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.
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
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ę
35. 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;
}
}
36. Jeśli potrzebujesz coś bardziej
wymyślnego
Netflix/Hystrix
Latency and Fault Tolerance for
Distributed Systems
37. 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);
}
}
38. 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();
}
44. gdy producent produkuje więcej
niż odbiorca
może przetworzyć
kolejki i bufory o nieograniczonym
rozmiarze
(unbounded queues)
asynchroniczna komunikacja
53. 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