Reactive programming and Hystrix fault tolerance
Max Myslyvtsev
Agenda
• Reactive
• Observables
• Hystrix
• How we use it
2
ReactiveInitiate Call
Wait
Get Response
Continue
3
When call is complete
ReactiveInitiate Call
Get Response
Continue
Continue
4
When call is complete
ReactiveInitiate Call
Get Response
React
Continue
5
Observer pattern
Why Reactive?
• Event-driven applications
• Easy dependency composition
• Allows parallel execution
6
Why Reactive?
• Event-driven applications
• Easy dependency composition
• Allows parallel execution
• No callback hell
7
rxJava
Observable<T>
Future<T> Iterable<T>
8
Observable
onNext onComplete onError
9
Terminal
ObservableObserver
onNext
onComplete
onError
Subscription
unsubscribe
Observable
subscribe
Work
start
stopemit
X
Operations
• Create
• Modify (immutable)
• Terminate
10
CreationCreate
Observer
onNext
onComplete
onError
Subscription
unsubscribe
Observable
subscribe
onSubscribe
X
Item
Creation
Never
Just
Empty
ErrorThrowable
11
CreationFromIterable
FromFuture
Factory Defer
Range 1 2 3Start, Count
12
Transformation
Map
13
Transformation
FlatMap
14
Filtering
FilterTake Skip
15
Combination
Merge
16
Combination
Concat
17
Combination
Zip+
18
Aggregation
21 3 4
Reduceyx x+y+
10
19
Error Handling
onErrorReturn
20
Error Handling
onErrorResumeNext
21
Error Handling
onErrorResumeNext
22
Source Observable
Lift
onNext
onComplete
onError
New Observable
onNext
onComplete
onError
Operator
23
TerminationBlockingObservable
Single[OrDefault]
First[OrDefault]
Last[OrDefault]
ToIterable
ToBlocking
Observable
24
Observable<List>
Termination
ToListBlockingObservable<List>
Single[OrDefault]ToBlocking
Observable
25
Temperature
Cold
• Lazy • Does not emit until subscribed • Whole sequence
Hot
• Eager • Emits regardless of subscriptions • Partial sequence
26
Scheduling
Observable
subscribeOn
observeOn
Schedulers
Immediate
Trampoline
New Thread
Computations
IO
From(Executor)
Test
27
Immediate
Unit of Work
scheduleUnit of Work
Thread
X
Trampoline
Unit of Work
schedule
Unit of Work
X
Thread
New Thread
Unit of Work
schedule
Unit of Work
Thread 1 Thread 2
X
Computations / IO
Unit of Work
schedule
Unit of Work
Thread 1 Pool
X
Test Scheduler
Unit of Work
schedule
Unit of Work
Thread 1 Virtual Thread
X
Dependency Composition
• Single Item Observables
• Fork Join
• If Then Else
X
Fork Join
Map Map
Observable
Observable Observable
Observable
Zip
X
If Then Else
Filter (If) Filter (Else)
Observable
Map Map
Observable
Merge
X
Why Hystrix?
• Latency
• Fault-tolerance
• Isolation
28
Command
Hystrix
Fragile Operation
API
Observable
Future
Sync Execute
Remote Service
Metrics Dashboard
Configuration
Fallback
29
How we use it
30
Server
REST Resources
Client
Maven Plugin
Generated Client Hystrix
generate during build
REST API
RX API
same API
References• http://reactivex.io/intro.html
• https://github.com/ReactiveX/RxJava/wiki
• https://gist.github.com/staltz/868e7e9bc2a7b8c1f754
• https://github.com/Netflix/Hystrix/wiki
• https://github.com/mmyslyvtsev/rx-workshop
31