distributing transactions using masstransit

31
Distributing Transactions Chris Patterson Fellow McKesson

Upload: chris-patterson

Post on 11-Feb-2017

485 views

Category:

Software


2 download

TRANSCRIPT

Page 1: Distributing Transactions using MassTransit

Distributing TransactionsChris PattersonFellowMcKesson

Page 2: Distributing Transactions using MassTransit

Chris Patterson

• Principal Architect, FellowRelayHealth Intelligence, a part of McKesson• Microsoft MVP (C#, .NET)• Open Source Enthusiast

Page 3: Distributing Transactions using MassTransit

Begin Conversation

• Deconstructing transactions into activities• Orchestrating activities into a distributed transaction• Tracking distributed transactions

Page 4: Distributing Transactions using MassTransit

Using Transactions For Good

• Atomic completion of operations• Consistency maintained when systems fail• Isolation from concurrent operations• Durability when crashes occur

Page 5: Distributing Transactions using MassTransit

Taking Transactions Too Far

• Combining two separate transactions using a distributed transaction coordinator• Calling high latency services during a transaction• Using triggers inside a transaction

Page 6: Distributing Transactions using MassTransit

Creating Inconsistency

Reserve Seat

Process Payment

Reservation Web Site

Page 7: Distributing Transactions using MassTransit

Deconstructing a Transaction

• A transaction is a sequence of activities that complete entirely, or not at all

Page 8: Distributing Transactions using MassTransit

Defining an Activity

• An activity should have a single responsibility• An activity may have explicit input arguments• An activity may produce output variables• An activity may update an activity log

Page 9: Distributing Transactions using MassTransit

Creating an Activity

• An activity should be an autonomous service

Page 10: Distributing Transactions using MassTransit

Topshelfis an open source framework for creating and deploying .NET services.

Page 11: Distributing Transactions using MassTransit

Creating an Activity

• An activity should be an autonomous service• An activity should use asynchronous endpoints for availability• An activity should use durable messaging for reliability• An activity should be load balanced for scalability

Page 12: Distributing Transactions using MassTransit

MassTransitis a free, open-source distributed application framework for .NET. MassTransit makes it easy to create applications and services which leverage message-based, loosely-coupled asynchronous communication for higher availability, reliability, and scalability.

Page 13: Distributing Transactions using MassTransit

Creating an Itinerary

• An itinerary is a list of activities to be executed

Page 14: Distributing Transactions using MassTransit

Executing an Itinerary

• An itinerary is executed using a routing slip• A routing slip is a workspace for a distributed transaction

The analogy to a paper routing slipis both obvious and intentional

Page 15: Distributing Transactions using MassTransit

Creating a Routing Slip

• Activities can be added to the itinerary• Variables may be added to the routing slip

Page 16: Distributing Transactions using MassTransit

Executing a Routing Slip

• A routing slip is sent to the execute address of the first activity• A routing slip with an empty itinerary completes immediately

Page 17: Distributing Transactions using MassTransit

Executing an Activity

• An activity is executed using the arguments from the itinerary• An activity’s arguments may be read from the routing slip variables

Page 18: Distributing Transactions using MassTransit

Completing an Activity

• A completed activity sends the routing slip to the next activity in the itinerary• A completed activity may add or update variables in the routing slip• A completed activity may add an activity log to the routing slip

Page 19: Distributing Transactions using MassTransit

Completing a Routing Slip

• The routing slip completes when every activity has completed

Page 20: Distributing Transactions using MassTransit

Publishing Events

Page 21: Distributing Transactions using MassTransit

Faulting an Activity

• A faulted activity sends the routing slip to the compensate address of the last activity log• A routing slip with no activity log entries faults immediately

Page 22: Distributing Transactions using MassTransit

Compensating an Activity

• A previously completed activity is compensated using the activity log from the routing slip• A previously completed activity that faults during compensation fails the routing slip

Page 23: Distributing Transactions using MassTransit

Revising an Itinerary

• A completed activity may revise the itinerary• A completed activity may terminate the routing slip

Page 24: Distributing Transactions using MassTransit

Tracking a Routing Slip• A routing slip has a unique identifier• An event is published when a routing slip is completed, faulted, or when a routing slip compensation fails• An event is published when a routing slip itinerary is revised• An event is published when a routing slip is terminated

Page 25: Distributing Transactions using MassTransit

Tracking an Activity

• An activity execution has a unique identifier• An event is published when an activity is completed, faulted, compensated, or when an activity compensation fails

Page 26: Distributing Transactions using MassTransit

Monitoring a Routing Slip

• A state machine observes routing slip events to track the status of a routing slip

Page 27: Distributing Transactions using MassTransit

Monitoring a Distributed Transaction

• A state machine maintains separate instances for each transaction• A state machine monitors transaction creation events• A state machine monitors routing slip events to determine when a transaction is completed or faulted

Page 28: Distributing Transactions using MassTransit

Identifying a Distributed Transaction

• A transaction has a unique identifier• A routing slip event includes the transaction identifier• A transaction event includes the transaction identifier

Page 29: Distributing Transactions using MassTransit

Retrying Faulted Transactions

• A retry state machine observes transaction fault events• A retry state machine can coordinate additional transaction attempts• A retry state machine may use a retry policy to determine a retry schedule for any additional transaction attempts

Page 30: Distributing Transactions using MassTransit

Learning Resources

Page 31: Distributing Transactions using MassTransit

MassTransit• Main Project Site

http://masstransit-project.com

• Documentation Site http://docs.masstransit-project.com

• Source Browser http://source.masstransit-project.com

• GitHub Repository https://github.com/MassTransit

• Build Server https://ci.appveyor.com/project/phatboyg/masstransit