Top Banner
To Be Message-Driven Todd L. Montgomery @toddlmontgomery
67

Reactsf 2014-message-driven

Jul 02, 2015

Download

Technology

Todd Montgomery

To Be Message Driven from React SF 2014
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Reactsf 2014-message-driven

To Be Message-Driven

Todd L. Montgomery @toddlmontgomery

Page 2: Reactsf 2014-message-driven

Life is Message Driven

Page 3: Reactsf 2014-message-driven
Page 4: Reactsf 2014-message-driven
Page 5: Reactsf 2014-message-driven

CPUs are Message Driven

Page 6: Reactsf 2014-message-driven
Page 7: Reactsf 2014-message-driven
Page 8: Reactsf 2014-message-driven
Page 9: Reactsf 2014-message-driven

Browsers are “Message” Driven

Page 10: Reactsf 2014-message-driven
Page 11: Reactsf 2014-message-driven

Why is this?

Page 12: Reactsf 2014-message-driven

The most scalable, resilient, &fast systems seem to followsome common principles…

Page 13: Reactsf 2014-message-driven

Facilitating other traits

Page 14: Reactsf 2014-message-driven

Why Message Driven?

Page 15: Reactsf 2014-message-driven

It’s not what Message Passing provides…

Page 16: Reactsf 2014-message-driven

It’s what Message Passing makes harder or even impossible

Page 17: Reactsf 2014-message-driven

Boundaries

Page 18: Reactsf 2014-message-driven

Boundaries are Good!

Page 19: Reactsf 2014-message-driven
Page 20: Reactsf 2014-message-driven

Forced Decoupling & Separation of Concerns

BinaryBoundary

AsynchronousBoundary

Ordering Errors asMessages

Page 21: Reactsf 2014-message-driven

Asynchronous, BinaryBoundaries

Page 22: Reactsf 2014-message-driven

Asynchronous

Page 23: Reactsf 2014-message-driven

@toddlmontgomery

Request

Response

ProcessingCould do stuff while waiting!

Page 24: Reactsf 2014-message-driven

Waiting at the mailbox…

Page 25: Reactsf 2014-message-driven

Even traditional blocking operations can be decoupled

Page 26: Reactsf 2014-message-driven

@toddlmontgomery

AsyncRequests

&Responses

Request

Request

RequestResponse

Response

Response

Page 27: Reactsf 2014-message-driven

@toddlmontgomery

AsyncRequests

&Responses

Correlation!

Request 0

Request 1

Request 2Response 0

Response 1

Response 2

Page 28: Reactsf 2014-message-driven

@toddlmontgomery

Correlation!

Request 0

Request 1

Request 2Response 0

Response 1

Response 2

Ordering

Page 29: Reactsf 2014-message-driven

@toddlmontgomery

Correlation!

Request 0

Request 1

Request 2

Response 0

Response 1

Response 2

(Valid)Re-Ordering

Page 30: Reactsf 2014-message-driven

@toddlmontgomery

Handling the Unexpected

Request 0

Response 1

Invalid, Drop We only know of 0.1 is unknown!

Page 31: Reactsf 2014-message-driven

Binary

Page 32: Reactsf 2014-message-driven

.addPayment(5)

Without a binary boundary,too easy to couple & conflate

Page 33: Reactsf 2014-message-driven

struct PaymentMessage{ std::int32_t accountId; std::int32_t amount;};

When all you have is binary,harder to couple and/or conflate

Page 34: Reactsf 2014-message-driven

Ordering

Page 35: Reactsf 2014-message-driven

Duplicated

Re-Ordered

Lost

Packets, nay Messages!, Can Be…

Page 36: Reactsf 2014-message-driven
Page 37: Reactsf 2014-message-driven
Page 38: Reactsf 2014-message-driven

TCP connections can…

be closedunexpectedly

end in anunknown state

be interceptedby idiots, er Proxies

Page 39: Reactsf 2014-message-driven

Duplicated

Re-Ordered

Lost

Which meansData over TCP* might be…

* - When connections are re-established

Page 40: Reactsf 2014-message-driven

Ordering is an Illusion!!

Page 41: Reactsf 2014-message-driven

Compiler can re-order

Runtime can re-order

CPU can re-order

Page 42: Reactsf 2014-message-driven

Which is whyLock-Free Programmingshares some behaviors

with Protocols…

Page 43: Reactsf 2014-message-driven

Java

x86

C++11

http://en.wikipedia.org/wiki/Memory_ordering

Page 44: Reactsf 2014-message-driven

Source Ordering

Message A and B from same source are ordered

Page 45: Reactsf 2014-message-driven

Total Ordering

Message A and B from any 2+ sources are ordered the same at all destinations

Illusion of Ordering… bordering on “Delusion”

Page 46: Reactsf 2014-message-driven

Causal Ordering

Message A and B from any source are ordered if B causally relates to A

Page 47: Reactsf 2014-message-driven

Ordering can just fall out

Page 48: Reactsf 2014-message-driven

0 1 2 3 4 5 6 7 8

0 1 3 4 5 6 7

2 8

S:

R:

File to Transfer

Recover

0 X bytes

Clark and Tennenhouse, ACM SIGCOMM CCR, Volume 20, Issue 4, Sept. 1990

Application Layer Framing

Dead Reckoning about Ordering!

Page 49: Reactsf 2014-message-driven

Most of the time, Orderingsimply isn’t enough

Page 50: Reactsf 2014-message-driven

Duplicated

Re-Ordered

Lost

Messages Can Be…

Page 51: Reactsf 2014-message-driven
Page 52: Reactsf 2014-message-driven

Transition Table?

Java enums?

JavaScript prototypes?

Table with Lambdas!?

Page 53: Reactsf 2014-message-driven

public void onAck(final Event ev){

switch (currentState){

…case State.FIN_WAIT_1: // an ACK while in FIN_WAIT_1

currentState = State.FIN_WAIT_2;break;

…}

}

Event

CurrentState

NextState

State & Eventsbe explicit, do not hide behind

abstraction(s) Make them Observable!

Page 54: Reactsf 2014-message-driven

State Machines…worth your time

Page 55: Reactsf 2014-message-driven

RST

SimultaneousOpen

Closing &Dupes, etc.

Page 56: Reactsf 2014-message-driven

State Machine Testing

1. Does my “code” implement it correctly?2. Is my design safe, correct, etc.?

VLSI Testing Techniquese.g. ARC/Branch Testing

Page 57: Reactsf 2014-message-driven

Model Checking

Page 58: Reactsf 2014-message-driven

SPIN

http://en.wikipedia.org/wiki/SPIN_model_checker

2002 ACM System Software Award

Page 59: Reactsf 2014-message-driven

TLA+

http://research.microsoft.com/en-us/um/people/lamport/tla/tla.html

Page 60: Reactsf 2014-message-driven
Page 61: Reactsf 2014-message-driven

Idempotent Unit of WorkADU

1. Little to no ordering requirement2. Little to no state requirement

e.g. RESTThat stateless bit…

Page 62: Reactsf 2014-message-driven

Responsive

No/Less waiting & No/Less contention…

Page 63: Reactsf 2014-message-driven

Resilient

No/Less waiting & No/Less state…

Page 64: Reactsf 2014-message-driven

Elastic

No contention, no shared state…

Page 65: Reactsf 2014-message-driven

Because Amdahlwill hunt you down

Page 66: Reactsf 2014-message-driven
Page 67: Reactsf 2014-message-driven

@toddlmontgomery

Questions?

• Reactive Manifesto http://www.reactivemanifesto.com• Kaazing http://www.kaazing.com• SlideShare http://www.slideshare.com/toddleemontgomery• Twitter @toddlmontgomery

Thank You!