advanced n service bus deployment - nsbconnyc 2014 by kijana woodard

61
Advanced NServiceBus Deployment NSBCon NYC 2014 / Kijana Woodard @kijanawoodard

Upload: particular-software

Post on 06-Jun-2015

215 views

Category:

Technology


0 download

DESCRIPTION

Mitigation all the way down

TRANSCRIPT

Page 1: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

AdvancedNServiceBusDeployment

NSBCon NYC 2014 / Kijana Woodard @kijanawoodard

Page 2: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

BackgroundFrom Dallas, TXProfessional develop since 1996.net since 1.0Independent contractor since 2010

Page 4: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

Slides are on GitHubgithub.com/kijanawoodard/NSBCon-NYC-2014/

Page 5: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

Mitigationallthewaydown

Page 6: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

An application which defies modificationBig Ball of Mud

Page 7: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

BBOM Formal DefinitionSELECT currentAssignmentFROM workHistoryWHERE originalDeveloper != me

Page 8: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

Defense MechanismsChange control committeeSource control committee

Page 9: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

BBOM Architecure

- thedailywtf.com Comment On The Enterprise Dependency

Page 10: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

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

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

Decouple through Events

Page 13: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

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

BlissEncapsulationSingle ResponsibilityOpen Closed PrincipleInterface Segregation PrincipleDependency Inversion Principle

Page 15: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

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

What's the Problem?

Page 17: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

BBOM Solution

Page 18: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

Events Solution

Page 19: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

Events Dev UX

Page 20: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

FrictionMessage ConventionsSerialization FormatPersistence Configuration

Page 21: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

Harder to DeployMany Endpoints vs One Application

Page 22: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

Decreased Legibilityribbonfarm.com/2010/07/26/a-big-little-idea-called-legibility/

Page 23: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

Developer's Opinion ofBBOM

- thedailywtf.com Comment On The Enterprise Dependency

Page 24: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

Executive Summary ofBBOM

Page 25: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

Executive Summary ofMessaging

Page 26: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

Combat Friction

Page 27: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

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 29: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

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

Restore some Legibility

Page 31: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

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

Automate

Automate

Automate

Page 33: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

Conventions: Web vs EndpointSeparate configuration repoDays to MinutesSmaller, more frequent releasesConfidenceRepeatability

Page 34: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

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

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 36: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

Bus Stopgithub.com/andreasohlund/BusStop

Page 37: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

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

Endpoints vs Handlers

Page 39: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

Before

Page 40: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

All Together

Page 41: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

Combined

Page 42: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

Dev UX

Page 43: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

Build Artifacts

Page 44: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

Mix and Match

Page 45: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

NServiceBus.Host.exe -endpointName=orders

Run

Page 46: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

Decouple Dev from OPSRedeploy without recompileTie to Platform Tools

Page 47: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

Pushing Forwards

Page 48: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

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

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

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

Run

Page 52: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

Subscriptions

Page 53: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

Subscribed

Page 54: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

Direct

Page 55: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

Future exploration

Page 56: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

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

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

Assembly NeutralInterfaces

davidfowl.com/assembly-neutral-interfaces/Consumer Driven Contracts

Page 59: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

What if source files were distrbuted....

Roslyn

Page 60: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

THE END

Page 61: Advanced n service bus deployment - NSBConnyc 2014 by Kijana Woodard

Advanced NServiceBusDeployment

Questions?slides @ github.com/kijanawoodard/NSBCon-NYC-2014/kijanawoodard.comtwitter.com/kijanawoodard