Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard
-
Upload
particular-software -
Category
Technology
-
view
217 -
download
0
description
Transcript of Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard
![Page 1: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/1.jpg)
AdvancedNServiceBusDeployment
NSBCon NYC 2014 / Kijana Woodard @kijanawoodard
![Page 2: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/2.jpg)
BackgroundFrom Dallas, TXProfessional develop since 1996.net since 1.0Independent contractor since 2010
![Page 3: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/3.jpg)
Around the webkijanawoodard.comtwitter.com/kijanawoodardgithub.com/kijanawoodardlinkedin.com/in/kijanawoodard
particular forumravendb forumddd/cqrs forumhypermedia forum
![Page 4: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/4.jpg)
Slides are on GitHubgithub.com/kijanawoodard/NSBCon-NYC-2014/
![Page 5: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/5.jpg)
Mitigationallthewaydown
![Page 6: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/6.jpg)
An application which defies modificationBig Ball of Mud
![Page 7: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/7.jpg)
BBOM Formal DefinitionSELECT currentAssignmentFROM workHistoryWHERE originalDeveloper != me
![Page 8: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/8.jpg)
Defense MechanismsChange control committeeSource control committee
![Page 9: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/9.jpg)
BBOM Architecure
- thedailywtf.com Comment On The Enterprise Dependency
![Page 10: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/10.jpg)
BBOM Implementationpublic class OrderController{ ...
public OrderController( IOrderRepository orders, IBillingService billing, IShippingService shipping) { _orders = orders; _billing = billing; _shipping = shipping; }
public HttpStatusCode Post(Order order) { _orders.Save(order.OrderDetails); _billing.Charge(order.BillingDetails); _shipping.Ship(order.ShippingDetails);
return HttpStatusCode.OK; }}
![Page 11: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/11.jpg)
Mediatorkijanawoodard.com/introducing-nimbuslostechies.com/jimmybogard/2014/09/09/tackling-cross-cutting-concerns-with-a-mediator-pipeline/
![Page 12: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/12.jpg)
Decouple through Events
![Page 13: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/13.jpg)
Events Implementationpublic class OrderController{ public IBus Bus { get; set; }
public HttpStatusCode Post(ProcessOrder order) { Bus.Send(order); return HttpStatusCode.OK; }}
...
public class OrderHandler : IHandleMessages<ProcessOrder>{ public IBus Bus { get; set; }
public void Handle(ProcessOrder message) { //save order... Bus.Publish<IOrderAccepted>(x => x.Id = message.Id); }}
![Page 14: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/14.jpg)
BlissEncapsulationSingle ResponsibilityOpen Closed PrincipleInterface Segregation PrincipleDependency Inversion Principle
![Page 15: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/15.jpg)
It's almost as if...
Alan Kay - 2003
OOP to me means only messaging, localretention and protection and hiding of state-
process, and extreme late-binding of all things.
![Page 16: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/16.jpg)
What's the Problem?
![Page 17: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/17.jpg)
BBOM Solution
![Page 18: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/18.jpg)
Events Solution
![Page 19: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/19.jpg)
Events Dev UX
![Page 20: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/20.jpg)
FrictionMessage ConventionsSerialization FormatPersistence Configuration
![Page 21: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/21.jpg)
Harder to DeployMany Endpoints vs One Application
![Page 22: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/22.jpg)
Decreased Legibilityribbonfarm.com/2010/07/26/a-big-little-idea-called-legibility/
![Page 23: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/23.jpg)
Developer's Opinion ofBBOM
- thedailywtf.com Comment On The Enterprise Dependency
![Page 24: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/24.jpg)
Executive Summary ofBBOM
![Page 25: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/25.jpg)
Executive Summary ofMessaging
![Page 26: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/26.jpg)
Combat Friction
![Page 27: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/27.jpg)
Don't Call It a Rewritepublic class OrderController{ ...
public OrderController( IOrderRepository orders, IBillingService billing, IShippingService shipping) { _orders = orders; _billing = billing; _shipping = shipping; }
public HttpStatusCode Post(Order order) { _orders.Save(order.OrderDetails); _billing.Charge(order.BillingDetails); _shipping.Ship(order.ShippingDetails);
return HttpStatusCode.OK; }}
![Page 28: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/28.jpg)
Strangler Pattern
- Entry on Strangler Fig Wikipediahttp://www.martinfowler.com/bliki/StranglerApplication.html
![Page 29: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/29.jpg)
ContextRemember that time when we couldn't deploy anything for 6weeks...Remember that time when the strategic marketing initiativewas held up due to a Shipping upgrade...
![Page 30: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/30.jpg)
Restore some Legibility
![Page 31: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/31.jpg)
The Big Ball of Mud will not die easily
Have No Illusions
- Advanced Life Skills
![Page 32: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/32.jpg)
Automate
Automate
Automate
![Page 33: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/33.jpg)
Conventions: Web vs EndpointSeparate configuration repoDays to MinutesSmaller, more frequent releasesConfidenceRepeatability
![Page 34: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/34.jpg)
Configurationdb alert
local http://localhost:8080 [email protected] http://localhost:8080 [email protected] http://qa:8080 [email protected] http://p532977:8080 [email protected]
![Page 35: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/35.jpg)
Over time, layer in...
Don't Do an"Automation Project"
Build scriptspowershell / msbuildTeam City / Bamboo
Deploy scriptspowershellOctopus Deploy
Monitoring and MetricsService Insight / ControlSCOM
Discussion on DevOPS Experience on devopslive.org
![Page 37: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/37.jpg)
Bus Stopnamespace BusStop.Config{ public static class MyConvention { public static Configure MyMessageConventions(this Configure config) { config.DefiningEventsAs(t => t.Namespace != null && t.Namespace.EndsWith(".Contracts")); return config; } }}
github.com/andreasohlund/BusStop
![Page 38: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/38.jpg)
Endpoints vs Handlers
![Page 39: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/39.jpg)
Before
![Page 40: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/40.jpg)
All Together
![Page 41: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/41.jpg)
Combined
![Page 42: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/42.jpg)
Dev UX
![Page 43: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/43.jpg)
Build Artifacts
![Page 44: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/44.jpg)
Mix and Match
![Page 45: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/45.jpg)
NServiceBus.Host.exe -endpointName=orders
Run
![Page 46: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/46.jpg)
Decouple Dev from OPSRedeploy without recompileTie to Platform Tools
![Page 47: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/47.jpg)
Pushing Forwards
![Page 48: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/48.jpg)
A 2nd Look at Events Implpublic class OrderController{ public IBus Bus { get; set; }
public HttpStatusCode Post(ProcessOrder order) { Bus.Send(order); return HttpStatusCode.OK; }}
...
public class OrderHandler : IHandleMessages<ProcessOrder>{ public IBus Bus { get; set; }
public void Handle(ProcessOrder message) { //save order... Bus.Publish<IOrderAccepted>(x => x.Id = message.Id); }}
![Page 49: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/49.jpg)
One Choicepublic class OrderController{ private IFactory<Duck<Mockable<ProcessOrder>>> _something; public IBus Bus { get; set; }
public OrderController(IFactory<Duck<Mockable<ProcessOrder>>> something) { _something = something; } public HttpStatusCode Post(ProcessOrder order) { _something.Process(order); return HttpStatusCode.OK; }}
...
public class OrderHandler : IHandleMessages<ProcessOrder>{ private IFactory<Duck<Mockable<ProcessOrder>>> _something; public IBus Bus { get; set; }
public OrderHandler(IFactory<Duck<Mockable<ProcessOrder>>> something) { _something = something; } public void Handle(ProcessOrder message) {
![Page 50: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/50.jpg)
Exploit Decouplingpublic class OrderController{ private readonly IHandleMessages<ProcessOrder> _handler; public IBus Bus { get; set; }
public OrderController(IHandleMessages<ProcessOrder> handler) { _handler = handler; }
public HttpStatusCode Post(ProcessOrder order) { _handler.Handle(order); return HttpStatusCode.OK; }}
...
public class OrderHandler : IHandleMessages<ProcessOrder>{ public IBus Bus { get; set; }
public void Handle(ProcessOrder message) { //save order... Bus.Publish<IOrderAccepted>(x => x.Id = message.Id); }}
![Page 51: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/51.jpg)
Run
![Page 52: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/52.jpg)
Subscriptions
![Page 53: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/53.jpg)
Subscribed
![Page 54: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/54.jpg)
Direct
![Page 55: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/55.jpg)
Future exploration
![Page 56: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/56.jpg)
Later....
Break Apart the API?{ "submit-order" : "http://api.example.com/orders"}
{ "submit-order" : "http://orders.example.com/"}
HAL - Hypertext Application Language
![Page 57: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/57.jpg)
What about queries?N fanout queries vs 1 for commandVolatile queuesCould work with proper circuit breakersEasier configuration with mulitple databases
![Page 58: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/58.jpg)
Assembly NeutralInterfaces
davidfowl.com/assembly-neutral-interfaces/Consumer Driven Contracts
![Page 59: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/59.jpg)
What if source files were distrbuted....
Roslyn
![Page 60: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/60.jpg)
THE END
![Page 61: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard](https://reader034.fdocuments.us/reader034/viewer/2022052620/55721324d8b42a36668b472a/html5/thumbnails/61.jpg)
Advanced NServiceBusDeployment
Questions?slides @ github.com/kijanawoodard/NSBCon-NYC-2014/kijanawoodard.comtwitter.com/kijanawoodard