Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Słowem wstępu
Nie jest moją intencją urazić
kogokolwiek na tej sali
Humor i żarty nie były testowane na
zwierzętach
Żadne ...
Jaka piękna
katastrofa w
doskonałym
świecie
rzecz o architekturze
skazanej na klęskę
czyli
Dzień z życia świra
Kim jestem?
Podróżnik wiedziony na manowce
przez technologie
Wyznawca kościoła JVM
Archeolog kodu odziedziczonego
Symentis...
Programowanie rozproszone
To sztuka rozwiązywania tego
samego problemu, który możesz
Rozwiązać na jednym komputerze,
Przy ...
System rozproszony
Gdzie awaria komputera o którego
istnieniu nie wiedziałeś
Czyni twój program bezużytecznym
Ktoś, kiedyś...
prędkość światła
1 nanosekunda
=
30 cm
0.5-1 nanosekund
Procesor -> L1 cache
7 nanosekund
Procesor -> L2 cache
100 nanosekund
Procesor -> RAM
Wszystkiemu winne?
Organizacje
Ludzie
Oprogramowanie (ale nie moje:) )
Sprzęt
Pierwsze I ostatnie
przykazanie
w teorii zupełnej i kompletnej
systemów
kompletnie rozproszonych
I
zupełnie spieprzonych
„fail fast”
upadnij
dopóki ty to kontrolujesz
w przeciwnym wypadku
to
upadek przejmie kontrolę
nad Tobą
Co ryzykujesz?
utratę danych
spójność danych
opóźnienia
„efekt domina”
Stabilny
system
Stabilnie, ale jakoś inaczej
Z teorii dynamiki systemów
inflow
|
capacity
|
outflow
inflow > outflow
capacity != const
delay = Tout-Tin
Drugie poprawione prawo
wyłączności i inercji systemów
rozproszonych „inaczej”
w
świetle
wszechogarniającej teorii
wszystk...
„tragedy of commons”
nie dziel się
procesorem
pamięcią
operacjami I/O
„chmury”
wirtualizacja
kontenery
współczesna wersja socjalizmu
wszystkim po równo
procesy wsadowe
kopie zapasowe
automatyczne skalowanie
zachłanni klienci
nieoptymalnie napisany kod
pijani sysadmini
system to układ naczyń połączonych
gdy jeden z systemów nie odpowiada
Propagacja opóźnienia
Propagacja błędu
… z zapomnianej ...
Księgi Upadłych Systemów
supervisor
proces który jest odpowiedzialny za
uruchamianie,
zatrzymywanie
i monitorowanie innych procesów
Ale to już było
actor model
(erlang, akka)
unix daemons
(supervisord, eye, god)
circuit braker
„aka”
„g..no uderzyło w wentylator”
Remote Procedure Call
aka
Rozpacz Programisty Czarna
CORBA, RMI, SOAP
grpc.io (to jest jakiś żart, tak?)
Mikrousługi = RPC^N
Prawdopodobieństwo rośnie
Geometrycznie
Naturalnym stanem takich
systemów Jest
„huston mamy problem”
Ktoś zapomniał
wam powiedzieć?
class SimpleCircuitBraker {
final int threshold;
final AtomicLong counter;
<T> T call(Supplier<T> call) {
if (counter.get(...
Jeśli potrzebujesz coś bardziej
wymyślnego
Netflix/Hystrix
Latency and Fault Tolerance for
Distributed Systems
import com.netflix.hystrix.HystrixCommand;
import com.netflix.hystrix.HystrixCommandGroupKey;
public class HelloWorldComma...
public class HelloWorldCommandTest {
@Test
public void test_synchronous() {
String result = new HelloWorldCommand("Jarek")...
circuitBreaker.enabled
circuitBreaker.requestVolumeThreshold
circuitBreaker.sleepWindowInMilliseconds
circuitBreaker.error...
Robotnicy, kolejki i SEDA
SEDA
Staged Event Driven Architecture
By Matt Welsh, Eric Brewer
ciśnienie zwrotne
(backpressure)
gdy producent produkuje więcej
niż odbiorca
może przetworzyć
kolejki i bufory o nieograniczonym
rozmiarze
(unbounded queue...
RxJava
Akka
Reactive Streams
public static Observable<Integer> hotStreamOfInts() {
return Observable.create((Subscriber<? super Integer> s) -> {
int i ...
public static int doExpensiveWork(int i) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
return i;
}
publi...
Gwarantowana
dostawa
Często kojarzony z
Enterprise Integration Patterns
Apache Camel, Mule ESB, Spring Integration
odtworzyć wiadomości/rządania
w kolejności
w jakiej zostały wysłane
github:sbtourist/Journal.IO
Journal journal = JournalBuilder.of(new File("/tmp")).open();
journal.write(new String("Hello world!!!").getBytes(), Write...
Podsumowań czas
Nie panikuj
Ktoś już w to wdepnął :)
supervisor
circuit braker
SEDA
backpressure
guaranteed delivery
O czym nie powiedziałem
a chciałbym
(złapcie mnie w przerwie)
organizacje
wyznawcy „....jowo ale stabilnie”
ludzie
to nie ...
Let the eternal stream of byte code
Flows through your body
4Developers 2015: Jaka piękna katastrofa w doskonałym świecie, rzecz o architekturze skazanej na klęskę - Jarosław Pałka
4Developers 2015: Jaka piękna katastrofa w doskonałym świecie, rzecz o architekturze skazanej na klęskę - Jarosław Pałka
4Developers 2015: Jaka piękna katastrofa w doskonałym świecie, rzecz o architekturze skazanej na klęskę - Jarosław Pałka
Upcoming SlideShare
Loading in …5
×

4Developers 2015: Jaka piękna katastrofa w doskonałym świecie, rzecz o architekturze skazanej na klęskę - Jarosław Pałka

392 views

Published on

Jarosław Pałka

Language: Polish

System powstają i upadają. Często to człowiek zawodzi, na różnych etapach tworzenia. Czasami gdy system jest jeszcze na deskach kreślarskich, czasami gdy już myśl w kod się przekuwa, gdy podejmujemy tysiące tych drobnych decyzji, "to się zrobi później", "będzie jeszcze czas".
Zapominamy ciągle jednak o tym, że jutro nie nadchodzi nigdy. I system upadają, pod naporem użytkowników, bez dostępu do szybkich dysków, niezawodnej sieci i stabilnych "chmur".
Ta opowieść, będzie historią takich upadków i o tym co ja i ludzie z którymi pracowałem w projektach mogliśmy zrobić lepiej, by ustrzec się przed koszmarem nadgodzin i utrzymywania systemu w jako taki zdrowiu. Opowiem o wzorcach, które pozwalają wam budować stabilne systemy. Opowiem o "fail fast", "circuit braker", "supervisor" i innych wynalazkach.
Tym razem jednak nie będzie tylko o technologii, będzie też o nas, o naszych błędach, o słabościach naszych i organizacji w których pracujemy, o braku komunikacji pomiędzy zespołami, o napiętych terminach i "business value", hegemonii procesów i braku zdrowego rozsądku.

Published in: Software
  • Be the first to comment

  • Be the first to like this

4Developers 2015: Jaka piękna katastrofa w doskonałym świecie, rzecz o architekturze skazanej na klęskę - Jarosław Pałka

  1. 1. Słowem wstępu Nie jest moją intencją urazić kogokolwiek na tej sali Humor i żarty nie były testowane na zwierzętach Żadne też mniejszości nie zostały Celowo pominięte Wszelkie próby cenzury są daremne I tak powiem co myślę
  2. 2. Jaka piękna katastrofa w doskonałym świecie
  3. 3. rzecz o architekturze skazanej na klęskę
  4. 4. czyli
  5. 5. Dzień z życia świra
  6. 6. Kim jestem? Podróżnik wiedziony na manowce przez technologie Wyznawca kościoła JVM Archeolog kodu odziedziczonego Symentis.pl @j_palka
  7. 7. Programowanie rozproszone To sztuka rozwiązywania tego samego problemu, który możesz Rozwiązać na jednym komputerze, Przy użyciu wielu komputerów
  8. 8. System rozproszony Gdzie awaria komputera o którego istnieniu nie wiedziałeś Czyni twój program bezużytecznym Ktoś, kiedyś, w Internetach
  9. 9. prędkość światła 1 nanosekunda = 30 cm
  10. 10. 0.5-1 nanosekund Procesor -> L1 cache 7 nanosekund Procesor -> L2 cache 100 nanosekund Procesor -> RAM
  11. 11. Wszystkiemu winne? Organizacje Ludzie Oprogramowanie (ale nie moje:) ) Sprzęt
  12. 12. Pierwsze I ostatnie przykazanie w teorii zupełnej i kompletnej systemów kompletnie rozproszonych I zupełnie spieprzonych
  13. 13. „fail fast” upadnij dopóki ty to kontrolujesz w przeciwnym wypadku to upadek przejmie kontrolę nad Tobą
  14. 14. Co ryzykujesz? utratę danych spójność danych opóźnienia „efekt domina”
  15. 15. Stabilny system
  16. 16. Stabilnie, ale jakoś inaczej
  17. 17. Z teorii dynamiki systemów inflow | capacity | outflow
  18. 18. inflow > outflow capacity != const delay = Tout-Tin
  19. 19. Drugie poprawione prawo wyłączności i inercji systemów rozproszonych „inaczej” w świetle wszechogarniającej teorii wszystkiego
  20. 20. „tragedy of commons” nie dziel się procesorem pamięcią operacjami I/O
  21. 21. „chmury” wirtualizacja kontenery współczesna wersja socjalizmu wszystkim po równo
  22. 22. procesy wsadowe kopie zapasowe automatyczne skalowanie zachłanni klienci nieoptymalnie napisany kod pijani sysadmini
  23. 23. system to układ naczyń połączonych gdy jeden z systemów nie odpowiada Propagacja opóźnienia Propagacja błędu
  24. 24. … z zapomnianej ... Księgi Upadłych Systemów
  25. 25. supervisor
  26. 26. proces który jest odpowiedzialny za uruchamianie, zatrzymywanie i monitorowanie innych procesów
  27. 27. Ale to już było
  28. 28. actor model (erlang, akka) unix daemons (supervisord, eye, god)
  29. 29. circuit braker „aka” „g..no uderzyło w wentylator”
  30. 30. Remote Procedure Call aka Rozpacz Programisty Czarna CORBA, RMI, SOAP grpc.io (to jest jakiś żart, tak?)
  31. 31. Mikrousługi = RPC^N Prawdopodobieństwo rośnie Geometrycznie Naturalnym stanem takich systemów Jest „huston mamy problem”
  32. 32. Ktoś zapomniał wam powiedzieć?
  33. 33. class SimpleCircuitBraker { final int threshold; final AtomicLong counter; <T> T call(Supplier<T> call) { if (counter.get() > threshold) { throw new CircuitBrakerOpen(); } try { return call.get(); } catch (Exception e) { counter.incrementAndGet(); throw e; } } boolean close() { return counter.getAndSet(0) != 0; } }
  34. 34. Jeśli potrzebujesz coś bardziej wymyślnego Netflix/Hystrix Latency and Fault Tolerance for Distributed Systems
  35. 35. import com.netflix.hystrix.HystrixCommand; import com.netflix.hystrix.HystrixCommandGroupKey; public class HelloWorldCommand extends HystrixCommand<String> { private final String name; public HelloWorldCommand(String name) { super(HystrixCommandGroupKey.Factory.asKey("HelloGroup")); this.name = name; } @Override protected String run() throws Exception { return format("Hello %s", name); } @Override protected String getFallback() { return format("World is crueal Mr. %s", name); } }
  36. 36. public class HelloWorldCommandTest { @Test public void test_synchronous() { String result = new HelloWorldCommand("Jarek").execute(); assertEquals("Hello Jarek", result); Future<String> future = new HelloWorldCommand("Jarek").queue(); Observable<String> observable = new HelloWorldCommand("Jarek").observe(); }
  37. 37. circuitBreaker.enabled circuitBreaker.requestVolumeThreshold circuitBreaker.sleepWindowInMilliseconds circuitBreaker.errorThresholdPercentage
  38. 38. Robotnicy, kolejki i SEDA
  39. 39. SEDA Staged Event Driven Architecture By Matt Welsh, Eric Brewer
  40. 40. ciśnienie zwrotne (backpressure)
  41. 41. gdy producent produkuje więcej niż odbiorca może przetworzyć kolejki i bufory o nieograniczonym rozmiarze (unbounded queues) asynchroniczna komunikacja
  42. 42. RxJava Akka Reactive Streams
  43. 43. public static Observable<Integer> hotStreamOfInts() { return Observable.create((Subscriber<? super Integer> s) -> { int i = 0; while (!s.isUnsubscribed()) { s.onNext(i++); try { Thread.sleep((long) (Math.random() * 10)); } catch (Exception e) { } } } ).subscribeOn(Schedulers.newThread()); }
  44. 44. public static int doExpensiveWork(int i) { try { Thread.sleep(100); } catch (InterruptedException e) { } return i; } public static void main(String[] args) { hotStreamOfInts() .onBackpressureDrop() .observeOn(Schedulers.computation()) .map(Main::doExpensiveWork) .toBlocking() .forEach(System.out::println); }
  45. 45. Gwarantowana dostawa
  46. 46. Często kojarzony z Enterprise Integration Patterns Apache Camel, Mule ESB, Spring Integration
  47. 47. odtworzyć wiadomości/rządania w kolejności w jakiej zostały wysłane github:sbtourist/Journal.IO
  48. 48. Journal journal = JournalBuilder.of(new File("/tmp")).open(); journal.write(new String("Hello world!!!").getBytes(), WriteType.SYNC); Iterable<Location> redo = journal.redo(); for (Location location : redo) { System.out.println(new String(journal.read(location, ReadType.SYNC))); }
  49. 49. Podsumowań czas Nie panikuj Ktoś już w to wdepnął :) supervisor circuit braker SEDA backpressure guaranteed delivery
  50. 50. O czym nie powiedziałem a chciałbym (złapcie mnie w przerwie) organizacje wyznawcy „....jowo ale stabilnie” ludzie to nie mój problem, mój kod? To niemożliwe
  51. 51. Let the eternal stream of byte code Flows through your body

×