Date post: | 21-Jan-2017 |
Category: |
Software |
Upload: | steve-pember |
View: | 251 times |
Download: | 3 times |
An introduction to reactive applications, Reactive Streams, and
options for the JVMSteve Pember
CTO, ThirdChannel
Software Architecture Con, 2016
THIRDCHANNEL @svpember
THIRDCHANNEL @svpember
Agenda• The Problem
• To Be Reactive
• What are Reactive Streams?
• Rx in Depth
• An Overview of JVM Options
• Demo Time!
THIRDCHANNEL @svpember
Reactive Applications• Responsive
• Resilient
• Elastic (Scalable)
• Asynchronous / Message Driven
THIRDCHANNEL @svpember
• User Interface: What the user interacts with (JS, iOS, Android)
• Inter-Service: Distributed application topology + service communication design (e.g. Kafka for async messaging)
• Intra-Service: The code! (well designed with bounded contexts)
• Framework: Structures your code + provides external communication, DI, etc
• Execution Environment: Broad area, but includes how your code is executed (e.g. in JVM: Tomcat, Jetty, Netty)
THIRDCHANNEL @svpember
Mostly talk about this…
We’ll talk a little about this…
And a little more about this
THIRDCHANNEL @svpember
What is Rx?• Collections + Time
• A Single Abstraction over data from different sources
• Observer Pattern with Push-based iterators
• Stream Based Functional Programming
• … with Extensions for Reactive Programming
• Async is easy
• Backpressure
THIRDCHANNEL @svpember
Groovy• Dynamic Language for the JVM
• Less Verbose (Reduce Java Boilerplate)
• Ruby/Python - esque Collections
• Run Time Meta Programming
• Optionally Typed
• AST Transformations
• Powerful Annotations
• Multi - Inheritance via Traits and @DelegatesTo
THIRDCHANNEL @svpember
You can get much power from 5 functions• filter
• map
• reduce
• groupBy
• flatMap
Cold Observable: only starts emitting data on .subscribe () Hot Observable: emits data whenever it’s ready
THIRDCHANNEL @svpember
AutoComplete Requirements• Wait 250 ms between keypresses before querying
• If no keys are pressed, no query
• Successful queries should render movies
• Any new queries should kill in-flight queries
THIRDCHANNEL @svpember
RxJava 2.0• Completely rebuilt for Reactive-Streams.org 1.0 spec
• Decreased resource usage
• No nulls allowed
• New Publisher types
THIRDCHANNEL @svpember
Publishers• Observable - classic. In 2.0: no Backpressure
• Flowable - new to 2.0. Use this for Backpressure
• Single - only one item will be emitted or signal error
• Completable - only signal success or error
• Maybe - new to 2.0: one item emitted, signal success, or signal error (think, Promise)
THIRDCHANNEL @svpember
Agenda• The Problem
• What are Reactive Streams?
• Rx In Depth
• An Overview of JVM options
THIRDCHANNEL @svpember
ReactiveX JVM Family• rxJava
• rxJavaFX
• rxGroovy
• rxClojure
• rxKotlin
• rxScala
• And many more (beyond JVM): https://github.com/ReactiveX
THIRDCHANNEL @svpember
Akka & Akka Streams• Library
• Definition of Reactive System
• Created by LightBend
• Actor-Based Concurrency
• Implemented Streams on Top of Actor Model
THIRDCHANNEL @svpember
• Pivotal Project
• Library
• Reactive Streams
• Built on LMAX Ring Buffer / Disrupter
• Multiple libraries to extend Disruptor in multiple ways
THIRDCHANNEL @svpember
• High Performance Web Framework
• Non-Opinionated
• Non-Blocking Network Stack
• Built on Reactive Streams, Netty, Java 8, Guice
• Deterministic Asynchronous Execution
Take a Look at Ratpack
THIRDCHANNEL @svpember
Spring 5• spring-web-reactive instead of spring-mvc
• Same @Controller programming model
• Different underlying API
• Based on Project Reactor
• Can run within Tomcat, Jetty, or Netty (e.g. can fallback to use servlets)
THIRDCHANNEL @svpember
Play Framework• Part of the Lightbend family
• Built on Akka and Netty
• Async I/O
• Lightweight and stateless
• Encourages RESTful design
• Focus on JSON
THIRDCHANNEL @svpember
Vert.X• Event-driven & Non blocking
• lightweight, non-opinionated, and modular
• integrates with rxJava
• support for additional languages (like JS and Ruby)
• Can be used as a library embedded in an existing app
THIRDCHANNEL @svpember
More Information• Reactive Groovy & Ratpack Demo: https://github.com/spember/reactive-movie-demo • Jafar Husain: RxJS: https://www.youtube.com/watch?v=XRYN2xt11Ek • Reactive Streams Spec: http://www.reactive-streams.org/ • Reactive Manifesto: http://www.reactivemanifesto.org/ • Akka: http://akka.io/ • rxJava / ReactiveX libraries: https://github.com/ReactiveX • Ratpack: http://ratpack.io/ • Reactor: https://github.com/reactor/reactor • The Introduction to Reactive Programming you’ve been missing: https://gist.github.com/staltz/868e7e9bc2a7b8c1f754 • Martin Fowler: Stream / Pipeline programming: http://martinfowler.com/articles/refactoring-pipelines.html • Or Just on Groovy (Groovy the Awesome Parts): http://www.slideshare.net/SpringCentral/groovy-the-awesome-parts • Ratpack Web Presentation: http://www.infoq.com/presentations/ratpack-2015 • Advanced RxJava Blog: http://akarnokd.blogspot.com/ • Martin Fowler LMAX breakdown: http://martinfowler.com/articles/lmax.html • Reactive Web Apps with Spring 5: https://www.youtube.com/watch?v=rdgJ8fOxJhc&feature=youtu.be
Images• Empty Pool: http://www.wtok.com/home/headlines/Water-Problems-205987121.html
• Juggling: https://en.wikipedia.org/wiki/Juggling
• Directing Traffic: https://www.flickr.com/photos/tracilawson/3474012583L
• LMAX Disrupter: http://martinfowler.com/articles/lmax.html
• Mailman: thebrandtstandard.com/2013/02/09/u-s-post-office-to-end-saturday-letter-delivery-this-summer/
• Actors Diagram: https://blog.codecentric.de/en/2015/08/introduction-to-akka-actors/
• Cheetah: www.livescience.com/21944-usain-bolt-vs-cheetah-animal-olympics.html
• Dominoes: https://www.flickr.com/photos/louish/5611657857/sizes/l/in/photostream/
• Spartans: www.300themovie.com/
• Stampeding Buffalo: news.sd.gov/newsitem.aspx?id=15164
• Turtles (Cosmic): http://synchronicity313.deviantart.com/art/Turtles-All-The-Way-Down-68160813
• XkCD turtles: https://xkcd.com/1416/
• Simpsons “Old Coot”: http://simpsons.wikia.com/wiki/Category:Grandparents
• Meditation: http://i.huffpost.com/gen/1405484/images/o-MEDITATION-facebook.jpg
• Death Star Architectures: http://www.slideshare.net/adriancockcroft/monitorama-please-no-more