SlideShare uma empresa Scribd logo
1 de 54
Baixar para ler offline
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ę
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.pl @j_palka
Programowanie rozproszone
To sztuka rozwiązywania tego
samego problemu, który możesz
Rozwiązać na jednym komputerze,
Przy użyciu wielu komputerów
System rozproszony
Gdzie awaria komputera o którego
istnieniu nie wiedziałeś
Czyni twój program bezużytecznym
Ktoś, kiedyś, w Internetach
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
wszystkiego
„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() > threshold) {
throw new CircuitBrakerOpen();
}
try {
return call.get();
} catch (Exception e) {
counter.incrementAndGet();
throw e;
}
}
boolean close() {
return counter.getAndSet(0) != 0;
}
}
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 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);
}
}
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();
}
circuitBreaker.enabled
circuitBreaker.requestVolumeThreshold
circuitBreaker.sleepWindowInMilliseconds
circuitBreaker.errorThresholdPercentage
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 queues)
asynchroniczna komunikacja
RxJava
Akka
Reactive Streams
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());
}
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);
}
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(), WriteType.SYNC);
Iterable<Location> redo = journal.redo();
for (Location location : redo) {
System.out.println(new String(journal.read(location, ReadType.SYNC)));
}
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 mój problem,
mój kod? To niemożliwe
Let the eternal stream of byte code
Flows through your body

Mais conteúdo relacionado

Destaque

Parade x0092 s end
Parade x0092 s endParade x0092 s end
Parade x0092 s endmrhoward12
 
ragam morfologi daun
ragam morfologi daunragam morfologi daun
ragam morfologi daunshellin02
 
Presentation by the OECD on the “World Class Civil Service" made at the meeti...
Presentation by the OECD on the “World Class Civil Service" made at the meeti...Presentation by the OECD on the “World Class Civil Service" made at the meeti...
Presentation by the OECD on the “World Class Civil Service" made at the meeti...OECD Governance
 
Proposal for Assessment and Feedback
Proposal for Assessment and FeedbackProposal for Assessment and Feedback
Proposal for Assessment and Feedbacksarrrer
 
Complejo pulpodentinario
Complejo pulpodentinarioComplejo pulpodentinario
Complejo pulpodentinarioDAMARYS DELGADO
 

Destaque (8)

Parade x0092 s end
Parade x0092 s endParade x0092 s end
Parade x0092 s end
 
ragam morfologi daun
ragam morfologi daunragam morfologi daun
ragam morfologi daun
 
Viva!Clinic
Viva!ClinicViva!Clinic
Viva!Clinic
 
Josefina
JosefinaJosefina
Josefina
 
Mural
MuralMural
Mural
 
Presentation by the OECD on the “World Class Civil Service" made at the meeti...
Presentation by the OECD on the “World Class Civil Service" made at the meeti...Presentation by the OECD on the “World Class Civil Service" made at the meeti...
Presentation by the OECD on the “World Class Civil Service" made at the meeti...
 
Proposal for Assessment and Feedback
Proposal for Assessment and FeedbackProposal for Assessment and Feedback
Proposal for Assessment and Feedback
 
Complejo pulpodentinario
Complejo pulpodentinarioComplejo pulpodentinario
Complejo pulpodentinario
 

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

ETW w służbie programisty .NET
ETW w służbie programisty .NETETW w służbie programisty .NET
ETW w służbie programisty .NETKonrad Kokosa
 
Python i elektronika
Python i elektronikaPython i elektronika
Python i elektronikariklaunim
 
[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...
[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...
[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...Future Processing
 
ETW w służbie programisty .NET
ETW w służbie programisty .NETETW w służbie programisty .NET
ETW w służbie programisty .NETKonrad Kokosa
 
Secure Coding w praktyce.
Secure Coding w praktyce.Secure Coding w praktyce.
Secure Coding w praktyce.Semihalf
 
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?The Software House
 
TGT#11 - Zostały Ci jeszcze jakieś włosy? (Testowanie programów równoległych)...
TGT#11 - Zostały Ci jeszcze jakieś włosy? (Testowanie programów równoległych)...TGT#11 - Zostały Ci jeszcze jakieś włosy? (Testowanie programów równoległych)...
TGT#11 - Zostały Ci jeszcze jakieś włosy? (Testowanie programów równoległych)...Trójmiejska Grupa Testerska
 
Technologia Xamarin i wprowadzenie do Windows IoT core
Technologia Xamarin i wprowadzenie do Windows IoT coreTechnologia Xamarin i wprowadzenie do Windows IoT core
Technologia Xamarin i wprowadzenie do Windows IoT coreSages
 

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

ETW w służbie programisty .NET
ETW w służbie programisty .NETETW w służbie programisty .NET
ETW w służbie programisty .NET
 
Python i elektronika
Python i elektronikaPython i elektronika
Python i elektronika
 
[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...
[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...
[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...
 
ETW w służbie programisty .NET
ETW w służbie programisty .NETETW w służbie programisty .NET
ETW w służbie programisty .NET
 
Secure Coding w praktyce.
Secure Coding w praktyce.Secure Coding w praktyce.
Secure Coding w praktyce.
 
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
 
TGT#11 - Zostały Ci jeszcze jakieś włosy? (Testowanie programów równoległych)...
TGT#11 - Zostały Ci jeszcze jakieś włosy? (Testowanie programów równoległych)...TGT#11 - Zostały Ci jeszcze jakieś włosy? (Testowanie programów równoległych)...
TGT#11 - Zostały Ci jeszcze jakieś włosy? (Testowanie programów równoległych)...
 
Technologia Xamarin i wprowadzenie do Windows IoT core
Technologia Xamarin i wprowadzenie do Windows IoT coreTechnologia Xamarin i wprowadzenie do Windows IoT core
Technologia Xamarin i wprowadzenie do Windows IoT core
 

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