async or bust!? · async or bust!? todd l. montgomery @toddlmontgomery. ... receiver blocks...

101
Async or Bust!? Todd L. Montgomery @toddlmontgomery

Upload: others

Post on 10-Aug-2020

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

Async or Bust!?Todd L. Montgomery@toddlmontgomery

Page 2: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

About me…

Page 3: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

✓ The Myth(s)✓ Illusion & Cognitive Dissonance✓ Impact of the Myth✓ Subjectivity of the Myth

Page 4: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

Do you remember….

Page 5: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

https://www.youtube.com/watch?v=bzkRVzciAZg

Page 6: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

The Myth

Sequential is good enough

Page 7: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

The Myth

Sequential is good enough….

Async is complicated & error prone

Page 8: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

A Right Way

&

MANY Wrong Ways

Page 9: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

MANY Right Ways

&

MANY Wrong Ways

In Reality…

Page 10: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

SequentialSynchronous

BlockingAsynchronousNon-Blocking

Wording

Page 11: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

What is Sync?

Request

Response

Processing

Page 12: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

What is Async?

Request

Response

Processing

Page 13: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

What is Async?

Request

Response

Processing

Cross Thread/Core/Node

Page 14: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

What is Async?

Request

Response

Processing?

Page 15: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

What is Event-Driven?

Request

Response

?

Page 16: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

Illusion of Sequentiality

Page 17: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

Ordering is an Illusion

Page 18: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

Compiler can re-order

Runtime can re-order

CPU can re-order

Page 19: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

Ordering has to be imposed!

Page 20: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

Illusion of Sequentiality

Page 21: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

• CPUs - Load/Store Buffers

Illusion of Sequentiality

Page 22: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

• CPUs - Load/Store Buffers• Storage - Caches

Illusion of Sequentiality

Page 23: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

• CPUs - Load/Store Buffers• Storage - Caches• OS - VM & Caches

Illusion of Sequentiality

Page 24: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

• CPUs - Load/Store Buffers• Storage - Caches• OS - VM & Caches

• Library - Promises / Futures

Illusion of Sequentiality

Page 25: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

@toddlmontgomery

SyncRequests

&Responses

Request

Request

RequestResponse

Response

Response

As easy* as…

* - for some definition of

Page 26: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

@toddlmontgomery

AsyncRequests

&Responses

Request

Request

RequestResponse

Response

Response

But with efficiency of…

Page 27: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

Do somethingwhile waiting

Page 28: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

@toddlmontgomery

AsyncRequests

&Responses

Correlation!

Request 0

Request 1

Request 2Response 0

Response 1

Response 2

Page 29: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

@toddlmontgomery

Correlation!

Request 0

Request 1

Request 2Response 0

Response 1

Response 2

Ordering

Page 30: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

@toddlmontgomery

Correlation!

Request 0

Request 1

Request 2

Response 0

Response 1

Response 2

(Valid)Re-Ordering

(one of many)

Page 31: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

The key is to wait…

That has a price!

Page 32: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

• Opportunity to De-Schedule

Price of Illusion

Page 33: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

• Opportunity to De-Schedule • Locks + Signaling

Price of Illusion

Page 34: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

• Opportunity to De-Schedule • Locks + Signaling

• Semaphores• Condition Variables

Price of Illusion

Page 35: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

Cognitive Dissonance

Page 36: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

• Completed Operation Fallacy

Cognitive Dissonance

Page 37: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

• Completed Operation Fallacy• Caching

Cognitive Dissonance

Page 38: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

@toddlmontgomery

Flush…

Request

Response

Block

Caches

Page 39: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

@toddlmontgomery

Flush…

Request

Response

Block

Caches

…?

Page 40: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

@toddlmontgomery

Flush…

Request

Response

Block

Caches

Stable… ?

…?

Page 41: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

• Completed Operation Fallacy• Caching• Blocking ACK Spiral

Cognitive Dissonance

Page 42: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

@toddlmontgomery

Block

Request

Response ACK

Response

Block

Blocking ACK

Page 43: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

@toddlmontgomery

Block

Request

Response ACK

Response

Block

Blocking ACK

X

Page 44: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

@toddlmontgomery

Block

Request

Response ACK

Response

Block

Blocking ACK

X

Receiver Blocks Forever

Page 45: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

@toddlmontgomery

Block

Request

Response ACK

Response

Spiral!!!

Block

Blocking ACK

Response ACK-ACK

Page 46: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

• Completed Operation Fallacy• Caching• Blocking ACK Spiral

• Wrong Abstraction• Remote Procedure Call

Cognitive Dissonance

Page 47: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

“The purpose of abstraction is not to be vague, but to create a new semantic level in which one can be absolutely precise”

— Edsger W. Dijkstra (The Humble Programmer)

Abstraction

Page 48: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

• Hiding precision• Inherent asynchronous nature• Error handling

Remote Procedure Call

Page 49: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

Don’t assume the networkis reliable

https://en.wikipedia.org/wiki/Fallacies_of_distributed_computing

Remote Procedure Call

Page 50: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

“Yeah, yeah, but your scientists were so preoccupied with whether or not they could that they didn't stop to think if they should.”

— Jurassic Park

Remote Procedure Call

Page 51: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

Works sooo poorly, wetook it one step further…

Page 52: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

REST via HTTP/1.1

• Custom Methods• Custom Response Codes• No Pipelining• Everything Request/Response

Page 53: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

REST via HTTP/2

• Custom Methods• Custom Error Codes• Custom Frame Types• No Pipelining• Mostly Request/Response

Page 54: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

• Completed Operation Fallacy• Caching• Blocking ACK Spiral

• Wrong Abstraction• Remote Procedure Call

• Coupling

Cognitive Dissonance

Page 55: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

Sequential function calls can and do

create Coupling

Page 56: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

Impact

Page 57: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

@toddlmontgomery

SyncRequests

&Responses

Request

Request

RequestResponse

Response

Response

Page 58: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

@toddlmontgomery

SyncRequests

&Responses

Request

Request

RequestResponse

Response

Response

Throughput limited by Round-Trip Time (RTT)

Page 59: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

Speed of Light isn’t onlya good idea, it’s the Law

Page 60: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

Accumulated Improvement

Time

Network Bandwidth

Response Time

Storage Capacity

CPU Cores

Memory Capacity

Page 61: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

@toddlmontgomery

Data

Data

DataACK

ACK

ACK

Throughput = Data Length / RTT

RTT

Stop-And-WaitFlow Control

Page 62: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking
Page 63: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

Delay

Bandwidth

BDP = (Byte / sec) * sec = Bytes

BDP(Buffer)

Page 64: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

@toddlmontgomery

Data

ACKR

TT

Throughput = N * Data Length / RTT

… N Data“Blobs”

Page 65: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

So…How big is N?

Page 66: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

N = Number of Cores

Thread-Per-Request

Page 67: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

How big is N?

TCP Flow & Congestion Control

Page 68: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

How big is N?

It depends…

TCP Flow & Congestion Control

Page 69: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

Big… but

Don’t overflow receiver

Don’t overflow “network”

Page 70: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

TCP Flow Control

Receiver advertises N

Page 71: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

TCP Congestion Control

Sender probes for network N

Page 72: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

TCP BBR Congestion Control

Bottleneck Bandwidth vs.Round-Trip Time

http://queue.acm.org/detail.cfm?id=3022184

Page 73: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

TCP Sender

min(Receiver N, Network N)

Only go as fast as Network & Receiver

Page 74: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

Static N?

Based on number of cores(threads)?

REALLY?!

Page 75: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

But that isn’t the worst…

Page 76: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

Locks & Signaling

• Introduces Serialization

Page 77: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

"AmdahlsLaw" by Daniels220 at English Wikipedia - Own work based on: File:AmdahlsLaw.png. Licensed under CC BY-SA 3.0 via Wikimedia Commons

Page 78: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

Locks & Signaling

• Introduces Serialization• Introduces Coherence Penalty

Page 79: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

Universal Scalability Law

0

2

4

6

8

10

12

14

16

18

20

1 2 4 8 16 32 64 128 256 512 1024

Spe

ed

up

Processors

Amdahl USL

Page 80: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

Locks & Signaling

• Introduces Serialization• Introduces Coherence Penalty

Limits Scaling!

Page 81: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

1 thread of awesome >

128 cores of so-so

http://www.frankmcsherry.org/graph/scalability/cost/2015/01/15/COST.htmlhttp://blog.acolyer.org/2015/06/05/scalability-but-at-what-cost/

Page 82: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

Async is HARD!!!

Page 83: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

• Callback Hell• Back Pressure!

Async is HARD!!

Page 84: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

Composition is hard

Page 85: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

ReactiveX

http://reactivex.io/

Page 86: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

Observables

Page 87: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

JavaScript

• RxJS• ECMAScript Observables

https://github.com/ReactiveX/RxJShttps://github.com/zenparsing/es-observable

Page 88: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

Challenges?

Page 89: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

• Non-Blocking Back Pressure• Heterogeneous Connectivity

Challenges

Page 90: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

Dealing with Back Pressure

• ReactiveStreams• RxJava 2.0

http://www.reactive-streams.org/

Page 91: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

Rx Heterogenous Connectivity

• ReactiveSocket

http://reactivesocket.io/

Page 92: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

• Callback Hell• Back Pressure! • Breaking up work units?

Async is HARD!!

Page 93: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

Threaded Work Units

• Work between System Calls

Page 94: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

Threaded Work Units

• Work between System Calls• Time between System Calls

High Variance

Page 95: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

Async Duty Cycle

• Work within a single cycle

First Class Concern

Page 96: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

• Callback Hell• Back Pressure! • Duty Cycle• Error Handling

Async is HARD!!

Page 97: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

Error Handling

• Errors are events

No real difference!!

Page 98: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

Error Handling

Be Honest…

Page 99: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

Takeaways!

Page 100: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

Still Think…

Sequential is good enough?….

Async is complicated & error prone?

Page 101: Async or Bust!? · Async or Bust!? Todd L. Montgomery @toddlmontgomery. ... Receiver Blocks Forever. @toddlmontgomery Block Request Response ACK Response Spiral!!! Block Blocking

@toddlmontgomery

Questions?

• Twitter @toddlmontgomery

Thank You!