reactive programming using rx java & akka actors - pdx-scala - june 2014

38
Reactive Programming using RxJava & Akka Actors Thomas Lockney (@tlockney ) PDXScala June 14, 2014

Upload: thomas-lockney

Post on 09-May-2015

3.295 views

Category:

Technology


5 download

TRANSCRIPT

Page 1: Reactive programming   using rx java & akka actors - pdx-scala - june 2014

Reactive Programmingusing RxJava & Akka Actors

Thomas Lockney (@tlockney)PDXScala

June 14, 2014

Page 2: Reactive programming   using rx java & akka actors - pdx-scala - june 2014

What is reactive programming?

Page 3: Reactive programming   using rx java & akka actors - pdx-scala - june 2014

Reactive programming is…

● A programming paradigm● About data-flow● Not really anything new

Page 4: Reactive programming   using rx java & akka actors - pdx-scala - june 2014

Reactive programming is...

● Event-driven● Scalable● Resilient● Responsive

(the definition via the manifesto, anyway)

Page 5: Reactive programming   using rx java & akka actors - pdx-scala - june 2014

Reorganizing our thoughts a bit...

● Think in terms of discrete events● Code in terms of behaviors

○ reacting to events● The system state changes over time based

on the flow of events

Page 6: Reactive programming   using rx java & akka actors - pdx-scala - june 2014

A brief digression...

Amdahl’s law (paraphrased):

The maximum increase in speed of a program is limited by the sequential portions of the code.

Page 7: Reactive programming   using rx java & akka actors - pdx-scala - june 2014

A brief digression...

Amdahl’s law (paraphrased):

If you have a program that runs for 4 hours, but 1 hour of runtime is necessarily serial, your

program will have at most a 4x speedup with parallelization.

Page 8: Reactive programming   using rx java & akka actors - pdx-scala - june 2014

Amdahl’s law

Page 9: Reactive programming   using rx java & akka actors - pdx-scala - june 2014

The thing about Amdahl’s law

This is death by a thousand cuts.

Every line of code is subject to this rule!

Page 10: Reactive programming   using rx java & akka actors - pdx-scala - june 2014

Some principles...

● Keep your data immutable● Share nothing● Blocking is bad!

Page 11: Reactive programming   using rx java & akka actors - pdx-scala - june 2014

Another brief digression...

Page 12: Reactive programming   using rx java & akka actors - pdx-scala - june 2014

● Immutable data structures● Referential transparency● First-class functions

… this gives you ...

Once you have:

Page 13: Reactive programming   using rx java & akka actors - pdx-scala - june 2014

Functional Programming

Page 14: Reactive programming   using rx java & akka actors - pdx-scala - june 2014

well...

Functional Programmingin the small

Page 15: Reactive programming   using rx java & akka actors - pdx-scala - june 2014

RxJava“a library for composing asynchronous and event-based programs using observable

sequences for the Java VM”

Page 16: Reactive programming   using rx java & akka actors - pdx-scala - june 2014

My translation:

RxJavaA library for composing behaviors

applied to event streams.

note: when I say behaviors, think referentially-transparent functions.

Page 17: Reactive programming   using rx java & akka actors - pdx-scala - june 2014

Marble Diagrams

Page 18: Reactive programming   using rx java & akka actors - pdx-scala - june 2014

Observable

● The “dual” of Iterable● Or an Observer for sequences● Somewhat similar to a Future

○ but, again, supports sequences

Page 19: Reactive programming   using rx java & akka actors - pdx-scala - june 2014

Observable

Basic mechanics● onNext()● onError()● onComplete()

Page 20: Reactive programming   using rx java & akka actors - pdx-scala - june 2014

Functional Composition

● map()● flatMap()● filter()

Page 21: Reactive programming   using rx java & akka actors - pdx-scala - june 2014

map()

Page 22: Reactive programming   using rx java & akka actors - pdx-scala - june 2014

flatMap()

Page 23: Reactive programming   using rx java & akka actors - pdx-scala - june 2014

filter()

Page 24: Reactive programming   using rx java & akka actors - pdx-scala - june 2014

Creating Observables

● Observable.from(...), Observable.just(...), Observable.range(...), etc.

● Implement the Observable interface○ explicit calls to onNext(), onError(), onComplete()

Page 25: Reactive programming   using rx java & akka actors - pdx-scala - june 2014

Observer & Subscriber

Observer● interface for handling Observables onNext,

onError, onCompleteSubscriber● represents a subscription to an observable

Page 26: Reactive programming   using rx java & akka actors - pdx-scala - june 2014

Demo time!

Page 27: Reactive programming   using rx java & akka actors - pdx-scala - june 2014

RxJava is Reactive

● event-based (data-flows)● scalable*● resilient* (???)● responsive* (???)

* - requires some additional work on your end??? - the story here is not entirely clear or potentially even available in current releases

Page 28: Reactive programming   using rx java & akka actors - pdx-scala - june 2014

Akka& the actor model

Page 29: Reactive programming   using rx java & akka actors - pdx-scala - june 2014

Actors (the Actor model)

Defined by three traits● a behavior (reacts to events)● an state model● send/receive (immutable) messages

Page 30: Reactive programming   using rx java & akka actors - pdx-scala - june 2014

Actors

● messages are processed sequentially● multiple actors can be working at the same

time● actors are not threads● an actor can block (but should avoid it)● no shared state

Page 31: Reactive programming   using rx java & akka actors - pdx-scala - june 2014

Actor System

● actors interact● actors exist together within an actor system● the system defines the outermost bounds

Page 32: Reactive programming   using rx java & akka actors - pdx-scala - june 2014

Akka

● Scala-based actor model toolkit● Provides a lot of extras● We won’t be talking about those

Page 33: Reactive programming   using rx java & akka actors - pdx-scala - june 2014

Akka

● Supervisors○ provide exception handling○ “let it crash”○ orthogonal to actor behavior

● Location transparency○ abstracts the idea of “where” an actor lives

Page 34: Reactive programming   using rx java & akka actors - pdx-scala - june 2014

Akka

● Mailboxes● Routing

○ e.g., round-robin, smallest mailbox, etc.● Dispatching

○ essentially how to allocate thread resources

Page 35: Reactive programming   using rx java & akka actors - pdx-scala - june 2014

Demo time!

Page 36: Reactive programming   using rx java & akka actors - pdx-scala - june 2014

Akka is Reactive

● event-based● resilient/fault-tolerant● easily scalable*● responsive*

* - requires some additional work on your end

Page 37: Reactive programming   using rx java & akka actors - pdx-scala - june 2014

Reactive Streams

Page 38: Reactive programming   using rx java & akka actors - pdx-scala - june 2014

Reactive Streams… I wish I had time … ;~)