際際滷

際際滷Share a Scribd company logo
Czyli dwa pierwsze importy w architekturze rozproszonej
RxJava & Hystrix
Mateusz Serafin Gajewski
confitura 2015
Kim jestem?
@wendigo
Solutions Architect obszar坦w:
 Finansowego,
 Patnociowego,
 Analityki danych
G坦wne zainteresowania:
 Skalowalno,
 Odporno na awarie,
 Przetwarzanie danych,
 Klastry obliczeniowe
Mateusz Gajewski
Agenda
 Rozproszone i reaktywne systemy,
 Jak uatwi sobie 甜ycie narzdziami OSS,
 Kilka lu添nych przemyle
Architektura rozproszona
Architektura rozproszona
G坦wne cechy:
 wsp坦bie甜no komponent坦w,
 niezale甜ne awarie komponent坦w,
 brak globalnego zegara
Czego oczekuj
u甜ytkownicy?
Systemy reaktywne
 responsywno,
 odporno na bdy,
 elastyczno,
 sterowanie zdarzeniami i wiadomociami
responsywno ~ g坦rne ograniczenie na
czas przetwarzania
potrzebne: optymalizacja i zr坦wnoleglenie
nieblokujcych operacji
odporno ~ tolerancja na bdy i awarie
potrzebne: izolacja i obsuga
Platforma Allegro
 architektura master-master,
 250+ mikrousug na JVM (kolejne w drodze),
 4 prywatne AZ w 2 DC (4.500 VMs) + AWS,
 setki r坦甜nych technologii,
 dziesitki niezale甜nych system坦w storageowych
Co zego si mo甜e
wydarzy?
RxJava & Hystrix - Perfect match for distributed applications
店r坦da op坦添nie
 GC (JVM),
 noisy neighbours (cloud),
 stan sieci,
 wolumen danych,
 nieoptymalna implementacja,
 obci甜enie klastra...
店r坦da awarii
 logika biznesowa,
 implementacja techniczna,
 problemy sieciowo-sprztowe,
 bd operatora,
 prawo Murphyego ;)
Smutna prawda:
spontaniczne awarie i
wzrost czas坦w
odpowiedzi bd zdarza
si cay czas
Musimy nauczy si
niwelowa ich efekty
u甜ywajc odpowiednich
narzdzi.
RxJava 1.0+ Hystrix 1.4+
&
RxJava
Biblioteka do tworzenia
asynchronicznych i opartych o
zdarzenia program坦w z
wykorzystaniem obserwowalnych
sekwencji
Programowanie reaktywne
Programowanie reaktywne
Observable<T>
onNext(T value)
onCompleted()
onError(Throwable t)
Observer API:
Observable<T> vs pozostae typy
wartoci skalarne sekwencje
sync T getData() Iterable<T> getData()
async Future<T> getData() Observable<T> getData()
Skadanie operator坦w
getDataFromNetwork() // Observable<T>
.skip(10)
.take(5)
.map(value -> value + " transformed")
.subscribe(value -> {
System.out.println("Received => " + value);
});
Jak nas to przybli甜a do
responsywnoci i
odpornoci na bdy?
Caa magia le甜y w
dostpnych operatorach
(100+) ;)
merge
添r坦do: http://reactivex.io
flatMap
添r坦do: http://reactivex.io
zipWith
添r坦do: http://reactivex.io
retry
添r坦do: http://reactivex.io
timeout
添r坦do: http://reactivex.io
onErrorResumeNext
添r坦do: http://reactivex.io
Zunifikowana obsuga bd坦w
a.zipWith(b, (x, y) -> x + " " + y)
.subscribe(
value -> { System.out.println("onNext(" + value + ")"); },
error -> { System.out.println("onError(" + error + ")"); },
() -> { System.out.println("onCompleted"); }
);
Reactive pull back-pressure
Operatory: onBackpressure*, sample, throttle,...
Przykad z warsztat坦w RX Allegro
client
.getServices() // Observable<Service>
.flatMap(
service -> client
.getInstances(service) // Observable<Instance>
.onErrorResumeNext(Observable.<Instance>empty())
.timeout(500, TimeUnit.MILLISECONDS)
.retry(3),
16)
.subscribe(System.out::println);
RxJava - podsumowanie
 atwe tworzenie kodu asynchronicznego,
 zunifikowana obsuga bd坦w,
 dostepno operator坦w z zaawansowan mechanik (DRY),
 wysoka wydajno (ring buffers FTW),
 ukrywamy wewntrzn implementacj (sync vs async),
 kontrola nad back-pressure,
 testowalno kodu (wirtualny czas)
Hystrix
Biblioteka zaprojektowana do
kontroli op坦添nie, zapewnienia
niezawodnoci oraz izolacji dostpu
do zdalnych system坦w.
Bezpiecznik
添r坦do: http://github.com/netflix/Hystrix
Hystrix(Observable)Command
Hystrix(Observable)Command =
logika biznesowa +
logika statycznego fallbacku +
strategia izolacji +
konfiguracja +
metryki
Strategia izolacji
Pozwala oddzieli od siebie, przerwa po
przekroczeniu czasu i ograniczy ilo
r坦wnolegle wykonywanych komend:
 Oparta o pule wtk坦w
 Oparta o semafory
Etapy wykonywania
添r坦do: http://github.com/netflix/Hystrix
Izolacja
Izolujemy siebie od awarii zdalnego
systemu
Chronimy zdalny system od zalania
go 甜daniami po odzyskaniu
sprawnoci
Co jeszcze fajnego?
 dynamiczna zmiana parametr坦w (Archaius),
 strumie metryk (SSE),
 dashboard (Turbine),
 atwe u甜ycie za pomoc AOP,
 batchowanie komend (Request Collapsing),
 cacheowanie komend (Request Caching),
 natywne wsparcie RxJava
RxJava + Hystrix =
Wnioski
 programowanie asynchroniczne nie musi
by trudne,
 domeny awarii mog by ograniczone,
 op坦添nienia mo甜na kontrolowa,
 RxJava i Hystrix mo甜na wprowadzi w
ka甜dym momencie 甜ycia projektu ;)
Pytania?
禽噛庄一庄!
Znajdziesz nas:
Blog: allegrotech.io
Twitter: @allegrotechblog
pracuj z nami
kariera.allegro.pl

More Related Content

RxJava & Hystrix - Perfect match for distributed applications