reactive revealed p1 - async nio, back-pressure and message- vs event-driven

109
Reactive Revealed: Message Driven with Konrad `@ktosopl` Malawski Part #1 Message-driven Asynchronous Non-blocking I/O and Back-pressure

Upload: typesafeinc

Post on 14-Aug-2015

2.926 views

Category:

Software


2 download

TRANSCRIPT

Page 1: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Part #1

Message-driven Asynchronous

Non-blocking I/Oand Back-pressure

Page 2: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Part #2

ElasticityScalability

Location Transparency

Part #3

ResiliencyFailures vs Errors

Isolation & ContainmentDelegation & Replication

with Viktor Klang with Jonas Bonér

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 3: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

 Konrad `ktoso` Malawski

Akka Team,Reactive Streams TCK

(we’re renaming soon!)

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 4: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

High Performance Software Development

For the majority of the time, high performance software development

is not about compiler hacks and bit twiddling.

It is about fundamental design principles that are key to doing any effective software development.

Martin Thompson

practicalperformanceanalyst.com/2015/02/17/getting-to-know-martin-thompson-...

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 5: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Agenda

• Reactive Manifesto & our focus today• Asynchronous vs. Synchronous• Messages compared to Events• Patterns enabled by Asynchronous

Messaging• Keeping things Non-blocking: Scheduling• Non-blocking I/O: IO, AIO, NIO, Zero• Asynchronous Non-blocking Back-

pressure• Wrapping up and Q/A

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 6: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 7: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Initial version published 2 years ago.

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 8: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Initial version published 2 years ago.

A “not only Typesafe” initiative:Jonas Bonér, Dave Farley, Roland Kuhn, and Martin Thompson

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 9: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Initial version published 2 years ago.

A “not only Typesafe” initiative:Jonas Bonér, Dave Farley, Roland Kuhn, and Martin Thompson

Defines a tech agnostic shared vocabulary.

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 10: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 11: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 12: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Asynchronous

Page 13: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Sync / Async Basics

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 14: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Sync / Async Basics

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 15: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Sync / Async Basics

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 16: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Sync / Async Basics

Implicitly back-pressures the sender, since it can only send M2 after M1

finished.

(we’ll discuss back-pressure in depth shortly)

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 17: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Sync / Async Basics

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 18: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Sync / Async Basics

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 19: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Sync / Async Basics

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 20: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Sync / Async Basics

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 21: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Sync / Async Basics

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 22: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Sync / Async Basics

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 23: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Messages compared to Events

Page 24: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Messages compared to Events

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Events are not addressed to a specific receiver.

They’re just “facts”, that get published to topics.

Page 25: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Messages compared to Events

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Event-based systems tend to focus on addressable event

sources.

Page 26: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Messages compared to Events

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

A Message can contain an Event as it’s payload,

i.e. “listener ! SeatReserved()”.

Messages always have a specific recipient.

Be it Actor or Topic or something else.

Page 27: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Messages compared to Events

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Message-based systems tend to focus on addressable recipients.

Page 28: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Load management

Page 29: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Async enables transparent load balancing

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 30: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Async enables transparent load balancing

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 31: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Async enables transparent load balancing

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 32: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Async enables transparent load balancing

Response latency grows since more and more messages pile up in the

mailbox…

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 33: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Async enables transparent load balancing

Response latency grows since more and more messages pile up in the

mailbox…

We can:A. back-pressure the

PublisherB. add more workers!

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 34: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Async enables transparent load balancing

Can add workers dynamically.

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 35: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Non-blocking

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 36: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Async where it matters: Scheduling

Page 37: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Async where it matters: Scheduling

Page 38: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Async where it matters: Scheduling

Page 39: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Async where it matters: Scheduling

Page 40: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Async where it matters: Scheduling

Page 41: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Async where it matters: Scheduling

Page 42: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Async where it matters: Scheduling

Page 43: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Async where it matters: Scheduling

Page 44: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Async where it matters: Scheduling

Page 45: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Scheduling (notice they grey sync call)

Page 46: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Scheduling (notice they grey sync call)

Page 47: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Scheduling (now with Async db call)

Page 48: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Scheduling (now with Async db call)

Page 49: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Scheduling (now with Async db call)

Page 50: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Scheduling (now with Async db call)

Page 51: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

I / O

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 52: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

IO / AIO

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 53: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

IO / AIO / NIO

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 54: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

IO / AIO / NIO / Zero

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 55: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Interruption!CPU: User Mode / Kernel Mode

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 56: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Kernels and CPUs

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 57: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Kernels and CPUs

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 58: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Kernels and CPUs

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 59: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Kernels and CPUs

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 60: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Kernels and CPUs

http://wiki.osdev.org/Context_SwitchingReactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 61: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Kernels and CPUs

[…] switching from user-level to kernel-level on a (2.8 GHz) P4 is 1348 cycles.

[…] Counting actual time, the P4 takes 481ns […]

http://wiki.osdev.org/Context_SwitchingReactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 62: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

I / O

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 63: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

I / O

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 64: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

I / O

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 65: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

I / O

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 66: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

I / O

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 67: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

I / O

“Don’t worry. It only gets worse!”

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 68: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

I / O

“Don’t worry. It only gets worse!”

Same data in 3 buffers!4 mode switches!

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 69: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Asynchronous I / O [Linux]

Linux AIO = JVM NIO

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 70: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Asynchronous I / O [Linux]

NewIO… since 2004!(No-one calls it “new” any more)

Linux AIO = JVM NIO

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 71: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Asynchronous I / O [Linux]

Less time wasted waiting.Same amount of buffer copies.

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 72: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

ZeroCopy = sendfile [Linux]

“Work smarter. Not harder.”

http://fourhourworkweek.com/Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 73: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

ZeroCopy = sendfile [Linux]

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 74: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

ZeroCopy = sendfile [Linux]

Data never leaves kernel mode!

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 75: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Delegating failures

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 76: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Delegate Failures

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 77: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Delegate Failures

Backup Requestsusing

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 78: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Backup requests

A technique for fighting “long tail latencies”.By issuing duplicated work, when SLA seems in danger.

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 79: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Backup requests

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 80: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Backup requests

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 81: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Backup requests

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 82: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Backup requests - send

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 83: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Backup requests - send

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 84: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Backup requests - send

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 85: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Backup requests

Avg Std dev 95%ile 99%ile 99.9%ile

No backups 33 ms 1524 ms 24 ms 52 ms 994 ms

After 10ms 14 ms 4 ms 20 ms 23 ms 50 ms

After 50ms 16 ms 12 ms 57 ms 63 ms 68 ms

Jeff Dean - Achieving Rapid Response Times in Large Online Services Peter Bailis - Doing Redundant Work to Speed Up Distributed Queries

Akka - Krzysztof Janosz @ Akkathon, Kraków - TailChoppingRouter (docs, pr)

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 86: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Lesson learned:

Backup requests allowtrade-off increased loadfor decreased latency.

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 87: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Asynchronous Back-pressure

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 88: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Back-pressure &

Combined Requests

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 89: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Combined requests & back-pressure

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 90: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Combined requests & back-pressure

No no no…!Not THAT Back-pressure!

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 91: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Combined requests & back-pressure

THAT kind of back-pressure:

www.reactive-streams.orgReactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 92: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Combined requests & back-pressure

THAT kind of back-pressure:

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawskiwww.reactive-streams.org

Page 93: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Combined requests & back-pressure

THAT kind of back-pressure:

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawskiwww.reactive-streams.org

Page 94: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Combined requests & back-pressure

THAT kind of back-pressure:

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawskiwww.reactive-streams.org

Page 95: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Combined requests

A technique for avoiding duplicated work.By aggregating requests, possibly increasing latency.

“Wat? Why would I increase latency!?”

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 96: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Combined requests

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 97: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Combined requests

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 98: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Combined requests

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 99: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Combined requests

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 100: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Lesson learned:

Back-pressure saves systems from overload.

Combined requests trade higher latency,for less work for the downstream.

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 101: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Wrapping up

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 102: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Wrapping up

• provides a shared vocabulary

• a “ubiquitous language“, for Reactive Systems

• is not re-discovering the wheel, instead just solidifies proven

patterns

• is technology independent

The Reactive Manifesto

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 103: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Wrapping up

• are loosely coupled by design

• therefore can be elastic and resilient

• allow certain patterns to be used which otherwise wouldn’t be

possible

Asynchronous and Message-driven systems:

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 104: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Links• akka.io• reactive-streams.org• akka-user

• Gil Tene - How NOT to measure latency, 2013• Jeff Dean @ Velocity 2014• Alan Bateman, Jeanfrancois Arcand (Sun) Async IO Tips @

JavaOne• http://linux.die.net/man/2/select• http://linux.die.net/man/2/poll• http://linux.die.net/man/4/epoll• giltene/jHiccup• Linux Journal: ZeroCopy I, Dragan Stancevis 2013

• Last slide car picture: http://actu-moteurs.com/sprint/gt-tour/jean-philippe-belloc-un-beau-challenge-avec-le-akka-asp-team/2000

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 105: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Links• http://wiki.osdev.org/Context_Switching• CppCon: Herb Sutter "Lock-Free Programming (or,

Juggling Razor Blades)"• http://www.infoq.com/presentations/reactive-services-scale• Gil Tene’s HdrHistogram.org

• http://hdrhistogram.github.io/HdrHistogram/plotFiles.html• Rob Pike - Concurrency is NOT Parallelism (video)• Brendan Gregg - Systems Performance: Enterprise and the Cloud (b

ook)• http://psy-lob-saw.blogspot.com/2015/02/hdrhistogram-better-laten

cy-capture.html• Jeff Dean, Luiz Andre Barroso - The Tail at Scale (whitepaper, ACM)• http://highscalability.com/blog/2012/3/12/google-taming-the-long-la

tency-tail-when-more-machines-equal.html• http://www.ulduzsoft.com/2014/01/select-poll-epoll-practical-differe

nce-for-system-architects/• Marcus Lagergren - Oracle JRockit: The Definitive Guide (book)• http://mechanical-sympathy.blogspot.com/2013/08/lock-based-vs-lo

ck-free-concurrent.html• Handling of Asynchronous Events -

http://www.win.tue.nl/~aeb/linux/lk/lk-12.html• http://www.kegel.com/c10k.html

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 106: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Links• www.reactivemanifesto.org/• Seriously the only right way to micro benchmark on the

JVM:• JMH openjdk.java.net/projects/code-tools/jmh/• JMH for Scala: https://github.com/ktoso/sbt-jmh

• http://www.ibm.com/developerworks/library/l-async/• http://lse.sourceforge.net/io/aio.html• https://code.google.com/p/kernel/wiki/AIOUserGuide• ShmooCon: C10M - Defending the Internet At Scale (Robert

Graham)• http://blog.erratasec.com/2013/02/scalability-its-question-that-drives-us.html#.VO6E

11PF8SM

•User-level threads....... with threads. - Paul Turner @ Linux Plumbers Conf 2013

• https://www.facebook.com/themainstreetpiggyboys/photos/a.1390784047896753.1073741829.1390594984582326/1423592294615928/?type=1&theater for the Rollin’ Cuy on last slide

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

Page 107: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Part #219 August 2015

ElasticityScalability

Location Transparency

Part #33 September 2015

ResiliencyFailures vs Errors

Isolation & ContainmentDelegation & Replication

with Viktor Klang with Jonas Bonér

Next time:

Reactive Revealed: Message Drivenwith Konrad `@ktosopl` Malawski

see blog.typesafe.com

Page 108: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

Go Reactive

More interesting stuff…

HOW TO VIDEO

Managing Library Dependencies with Play,

sbt & Activator

WATCH NOW

HAVE QUESTIONS?

Get in touch with Typesafe today!

CONTACT US

SUCCESS STORY

How Walmart Canada Saved Black Friday with

Akka, Play and Scala

READ NOW

Page 109: Reactive Revealed P1 -  Async NIO, Back-pressure and Message- vs Event-driven

©Typesafe 2015 – All Rights ReservedK©Typesafe 2015 – All Rights Reserved