Gr8conf US 2015: Reactive Options for Groovy

85
THIRDCHANNEL @svpember Reactive Options for Groovy Steve Pember CTO, ThirdChannel @svpember

Transcript of Gr8conf US 2015: Reactive Options for Groovy

THIRDCHANNEL @svpember

Reactive Options for Groovy

Steve PemberCTO, ThirdChannel

@svpember

What is ‘Reactive’?

THIRDCHANNEL @svpember

Possible Reactive Definitions• Reactive Programming

Imperative: A = B+C at that moment in time

Reactive: A = B+C whenever B or C change values

THIRDCHANNEL @svpember

Possible Reactive Definitions• Reactive Programming

• Reactive Systems

THIRDCHANNEL @svpember

Possible Reactive Definitions• Reactive Programming

• Reactive Systems

• Reactive Streams / Reactive Extensions (Rx)

THIRDCHANNEL @svpember

Possible Reactive Definitions• Reactive Programming

• Reactive Systems

• Reactive Streams / Reactive Extensions (Rx)

THIRDCHANNEL @svpember

Agenda• Reactive Systems

• Reactive Streams / Reactive Extensions

• Reactive Groovy

The Need For Reactive(The Reactive Manifesto)

–Johnny Appleseed

“Type a quote here.”

–Johnny Appleseed

“Type a quote here.”

http://www.internetlivestats.com/internet-users/

THIRDCHANNEL @svpember

–Johnny Appleseed

“Type a quote here.”

–Johnny Appleseed

“Type a quote here.”

https://medium.com/reactive-programming/what-is-reactive-programming-bc9fa7f4a7fc

Need to Handle As Many Users As Possible

THIRDCHANNEL @svpember

Reactive Systems• The Need for Reactive

• 4 Reactive Principles

THIRDCHANNEL @svpember

THIRDCHANNEL @svpember

Reactive Systems• The Need for Reactive

• 4 Reactive Principles

• Responsive

THIRDCHANNEL @svpember

THIRDCHANNEL @svpember

Reactive Systems• The Need for Reactive

• 4 Reactive Principles

• Responsive

• Resilient

–Johnny Appleseed

“Type a quote here.”

Embrace Failure

Independent Things Fail Independently

THIRDCHANNEL @svpember

Reactive Systems• The Need for Reactive

• 4 Reactive Principles

• Responsive

• Resilient

• Elastic (Scalable)

THIRDCHANNEL @svpember

Reactive Systems• The Need for Reactive

• 4 Reactive Principles

• Responsive

• Resilient

• Elastic (Scalable)

• Asynchronous / Message-Driven

Humans Are Terrible At Concurrency

Recommended: Actors

THIRDCHANNEL @svpember

Akka

–Johnny Appleseed

“Type a quote here.”

–Johnny Appleseed

“Type a quote here.”

Never Block Your Resources

THIRDCHANNEL @svpember

Agenda• Reactive Systems

• Reactive Streams / Reactive Extensions

“A standard for asynchronous stream processing of potentially infinite data, across boundaries,

with non-blocking backpressure”

THIRDCHANNEL @svpember

THIRDCHANNEL @svpember

Story Time

THIRDCHANNEL @svpember

Story Time

THIRDCHANNEL @svpember

Story Time

THIRDCHANNEL @svpember

Story Time

2012 - MS Open Source’s RX! (wut?)

THIRDCHANNEL @svpember

Story Time

2012 - MS Open Source’s RX! (wut?)

–Johnny Appleseed

“Type a quote here.”

THIRDCHANNEL @svpember

Rx: More Than a Stream• Pull vs Push

THIRDCHANNEL @svpember

THIRDCHANNEL @svpember

Rx: More Than a Stream• Pull vs Push

• Observable / Subscriber

An Observable is a push-based collection

THIRDCHANNEL @svpember

Rx: More Than a Stream• Pull vs Push

• Observable / Subscriber

• Hot / Cold

THIRDCHANNEL @svpember

THIRDCHANNEL @svpember

Rx: More Than a Stream• Pull vs Push

• Observable / Subscriber

• Hot / Cold

• Composable

THIRDCHANNEL @svpember

Rx: More Than a Stream• Pull vs Push

• Observable / Subscriber

• Hot / Cold

• Composable

• Async is Easy!

The Subscriber & Observable can be independently Async

THIRDCHANNEL @svpember

THIRDCHANNEL @svpember

Rx: More Than a Stream• Pull vs Push

• Observable / Subscriber

• Hot / Cold

• Composable

• Async is Easy!

• Backpressure

THIRDCHANNEL @svpember

THIRDCHANNEL @svpember

Rx: More Than a Stream• Pull vs Push

• Observable / Subscriber

• Hot / Cold

• Composable

• Async is Easy!

• Backpressure

• Observable Interaction

THIRDCHANNEL @svpember

Rx: More Than a Stream• Pull vs Push

• Observable / Subscriber

• Hot / Cold

• Composable

• Async is Easy!

• Backpressure

• Observable Interaction

• You really only need 4 functions

THIRDCHANNEL @svpember

4 functions!• filter

• map / flatMap

• groupBy

• reduce

THIRDCHANNEL @svpember

Agenda• Reactive Systems

• Reactive Streams / Reactive Extensions

• Groovy Options

THIRDCHANNEL @svpember

A Few Groovy Options…• Akka

THIRDCHANNEL @svpember

A Few Groovy Options…• Akka

• Akka Streams

THIRDCHANNEL @svpember

Akka & Akka Streams• Library

• Definition of Reactive System

• Typesafe

• Actor-Based Concurrency

• Implemented Streams on Top of Actor Model

THIRDCHANNEL @svpember

A Few Groovy Options…• Akka

• Akka Streams

• RxJava / RxGroovy

THIRDCHANNEL @svpember

RxJava• Library

• Comes out of Netflix

• Part of reactivex.io

• Reactive Streams on the JVM

THIRDCHANNEL @svpember

THIRDCHANNEL @svpember

A Few Groovy Options…• Akka

• Akka Streams

• RxJava / RxGroovy

• Ratpack

THIRDCHANNEL @svpember

• HTTP application server

• Non-opinionated

• Built on Reactive Streams, Netty, Java 8, Guava

• Fully embodies reactive

THIRDCHANNEL @svpember

A Few Groovy Options…• Akka

• Akka Streams

• RxJava / RxGroovy

• Ratpack

• Reactor

THIRDCHANNEL @svpember

• Library

• Reactive Streams

• Reactor Pattern

• Built on LMAX Ring Buffer / Disrupter

THIRDCHANNEL @svpember

VS

THIRDCHANNEL @svpember

THIRDCHANNEL @svpember

THIRDCHANNEL @svpember

THIRDCHANNEL @svpember

• Groovy Parallelism and Concurrency

• Built into the language!

• Actors

• DataFlow

• Async Closures

Do I Have Time for a Demo?

Final Thought: What About Java 8 Streams?

THIRDCHANNEL @svpember

Java 8 Streams• Built into the language

• Meant for ‘pull’ on finite Iterables

• Parallelization has rather severe problems (e.g. https://dzone.com/articles/think-twice-using-java-8)

• No Async

• vs Observables -> potentially infinite items, async, with back pressure

Thank You!Questions?

@svpember

Image Credits• 1000ms Time To glass:

https://docs.google.com/presentation/d/1IRHyU7_crIiCjl0Gvue0WY3eY_eYvFQvSfwQouW9368/present?slide=id.g1e697bbb_0_7

• internet users in the world: http://www.internetlivestats.com/internet-users/• internet users vs Facebook: https://medium.com/reactive-programming/what-is-reactive-programming-bc9fa7f4a7fc• reactivex logo: https://www.stickermule.com/marketplace/2223-rx-reactive-extensions-logo-4• cheetah: www.livescience.com/21944-usain-bolt-vs-cheetah-animal-olympics.html• dominoes: https://www.flickr.com/photos/louish/5611657857/sizes/l/in/photostream/• 300 / Spartans: http://www.300themovie.com/• latop punch: http://walls4joy.com/wallpaper/730566-angry-laptops-punch• mailman: http://thebrandtstandard.com/2013/02/09/u-s-post-office-to-end-saturday-letter-delivery-this-summer/• actor system: http://letitcrash.com/post/30585282971/discovering-message-flows-in-actor-systems-with• slow down: http://forthefamily.org/reminder-slow/• Buffalo: http://news.sd.gov/newsitem.aspx?id=15164• Midvale School for the Gifted: http://www.2ndfirstlook.com/2012/09/gary-larson.html