Simplicity vs.Performance NSBCon NY by Jeffrey Palermo and Andrew Siemer

27
Simplicity vs. Performance

description

Minimize processing in the saga Don’t share queues/processes across SLAs – decouple fault/surge isolation Don’t use a saga when a normal handler will suffice

Transcript of Simplicity vs.Performance NSBCon NY by Jeffrey Palermo and Andrew Siemer

Page 1: Simplicity vs.Performance NSBCon NY by Jeffrey Palermo and Andrew Siemer

Simplicity vs.

Performance

Page 2: Simplicity vs.Performance NSBCon NY by Jeffrey Palermo and Andrew Siemer

Jeffrey Palermohttp://jeffreypalermo.com/about/

Page 3: Simplicity vs.Performance NSBCon NY by Jeffrey Palermo and Andrew Siemer

Andrew Siemerhttp://about.me/andrewsiemer

Page 4: Simplicity vs.Performance NSBCon NY by Jeffrey Palermo and Andrew Siemer
Page 5: Simplicity vs.Performance NSBCon NY by Jeffrey Palermo and Andrew Siemer

We are hiring!!!

Page 6: Simplicity vs.Performance NSBCon NY by Jeffrey Palermo and Andrew Siemer

Simplicity VS. Performance

Page 7: Simplicity vs.Performance NSBCon NY by Jeffrey Palermo and Andrew Siemer

We’ve screwed up!

• We’ve worked through all kinds of barriers to performance.

• We’ve employed NServiceBus on Dell.com, big retailers, financial institutions, etc.

Page 8: Simplicity vs.Performance NSBCon NY by Jeffrey Palermo and Andrew Siemer

Simplicity yields performance

Page 9: Simplicity vs.Performance NSBCon NY by Jeffrey Palermo and Andrew Siemer

Executive summary• Don’t distribute

• Martin Fowler’s First Law of Distributed Object Design: Don’t distribute your objects!1. The network is reliable.2. Latency is zero.3. Bandwidth is infinite.4. The network is secure.5. Topology doesn't change.6. There is one administrator.7. Transport cost is zero.8. The network is homogeneous.

• Minimize processing in the saga• Don’t share queues/processes across SLAs – decouple fault/surge isolation• Don’t use a saga when a normal handler will suffice

Page 10: Simplicity vs.Performance NSBCon NY by Jeffrey Palermo and Andrew Siemer

Example application

Page 11: Simplicity vs.Performance NSBCon NY by Jeffrey Palermo and Andrew Siemer

Problem: god Sagas

• All actions managed by the saga• All work done in the context of the saga• Very slow• Hard to manage• Let’s look at the code. . . RUN IT!!

Page 12: Simplicity vs.Performance NSBCon NY by Jeffrey Palermo and Andrew Siemer

god Sagas – test scenario

• Roughly 1000 orders created• 16 minutes 26 seconds to complete

Page 13: Simplicity vs.Performance NSBCon NY by Jeffrey Palermo and Andrew Siemer
Page 14: Simplicity vs.Performance NSBCon NY by Jeffrey Palermo and Andrew Siemer
Page 15: Simplicity vs.Performance NSBCon NY by Jeffrey Palermo and Andrew Siemer

god Saga depends on everything

Page 16: Simplicity vs.Performance NSBCon NY by Jeffrey Palermo and Andrew Siemer

SolutionUse sagas only for orchestration – not integration or

processing logic

Page 17: Simplicity vs.Performance NSBCon NY by Jeffrey Palermo and Andrew Siemer

Refactor to: Thinner saga, single process• Saga only manages taking and cancelling orders• All handler methods refactored into classes• More SOLID code (child’s play)

Page 18: Simplicity vs.Performance NSBCon NY by Jeffrey Palermo and Andrew Siemer

Remaining problem: single process

• Roughly 1000 orders created• 9 minutes 57 seconds to complete• Processed eventually!• Let’s take a look at the code. . .

Page 19: Simplicity vs.Performance NSBCon NY by Jeffrey Palermo and Andrew Siemer
Page 20: Simplicity vs.Performance NSBCon NY by Jeffrey Palermo and Andrew Siemer

Single process, separate handlers structure

Page 21: Simplicity vs.Performance NSBCon NY by Jeffrey Palermo and Andrew Siemer

SolutionSeparate handlers into dedicated worker processes

Page 22: Simplicity vs.Performance NSBCon NY by Jeffrey Palermo and Andrew Siemer

Refactoring: multiple processes

• Saga only manages taking and cancelling orders• All handler classes refactored into their own processes• Can scale handlers/processes independently

Page 23: Simplicity vs.Performance NSBCon NY by Jeffrey Palermo and Andrew Siemer

Refactored performance

• Roughly 1000 orders created• 7 minutes 53 seconds to complete

•Processed twice as fast!• Could be faster hosted across multiple machines• Messages of varying throughput levels can maintain

SLAs

Page 24: Simplicity vs.Performance NSBCon NY by Jeffrey Palermo and Andrew Siemer
Page 25: Simplicity vs.Performance NSBCon NY by Jeffrey Palermo and Andrew Siemer

A place for everything & everything in its place

Page 26: Simplicity vs.Performance NSBCon NY by Jeffrey Palermo and Andrew Siemer

Don’t overuse the saga. . .

• Unless you have an orchestration/workflow• And get out of a saga method as fast as possible

• For maintaining any data other than orchestration (SagaData)• Unless you have to

Page 27: Simplicity vs.Performance NSBCon NY by Jeffrey Palermo and Andrew Siemer

Jeffrey [email protected]

@jeffreypalermo

Andrew [email protected]

@asiemer

Come work with us in Austin!

#LoveClearMeasure