reactive programming and hystrix fault tolerance by max myslyvtsev

41
Reactive programming and Hystrix fault tolerance Max Myslyvtsev

Upload: javadayua

Post on 15-Jan-2017

392 views

Category:

Technology


0 download

TRANSCRIPT

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