Fundamenty
System rozproszony: zbiorcza grupa niezależnych komputerów, która pojawia się jako jedna spójna system. Motywacje: skalowalność, wytrzymałość na awarie, niskie opóźnienia (distribucja geograficzna), suwerenność danych. Wyzwania: częściowe awarii, podział sieci, synchronizacja zegarów, trade-off między zgodnością a dostępnością. Fałszywe założenia rozproszonych systemów (Deutsch, 1994): sieć jest wiarygodna, opóźnienia są zerowe, przepustowość jest nieskończona, itp. Typy: klient-serwer, p2p, wydarzeniowy, mikroservice. Komunikacja: RPC (gRPC, Thrift), kolejki komunikacyjne (Kafka, RabbitMQ), interfejsy API REST/GraphQL.
Teorema CAP i Zgodność
Teorema CAP (Brewer, 2000): w obecności podziału sieciowego (P), system rozproszony może dostarczyć albo zgodność (C) albo dostępność (A), ale nie oba. Systemy CP: HBase, MongoDB (z większościowymi odczytami) – zwracają błędy podczas podziałów zamiast starych danych. Systemy AP: Cassandra, DynamoDB – zawsze reagują, choć mogą zwracać stare dane. Teorema PACELC (Abadi): rozszerza CAP: jeśli wystąpił podział → wybierz A lub C; w przeciwnym razie → wybierz opóźnienie lub zgodność. Modele zgodności: liniowa zgodność (najsilniejsze), zgodność sekwencyjna, zgodność kauzalna, końcowa zgodność. CRDTy (Conflict-free Replicated Data Types): struktury danych, które zawsze się zbiegają – G-Counter, LWW-Register, OR-Set.
Algorytmy Konsensu
Konsensus: uzyskanie zgody N węzłów na wartość niezależnie od faulów. Nieporozumienie FLP (1985): nie ma deterministycznego algorytmu konsensu asynchronicznego z nawet jednym przestojem. Paxos (Lamport, 1989): role proponenta-akceptora-nauczyciela, bazujące na kworum (majority). Multi-Paxos: optymalizowany dla replikacji dziennika z przyjaznym liderem. Raft (Ongaro & Ousterhout, 2014): konsensus postrzeczny — wybor lidera, replikacja dziennika, bezpieczeństwo. Termy/epoki: monotonicznie rosnące, zapobiegają starym liderom. Tolerancja wobec błądów byzantskich (BFT): toleruje złośliwe węzły (PBFT: 3f+1 węzłów dla f błądów byzantskich). Blokchain: BFT konsensus na skalę internetową (PoW, PoS). Zab (ZooKeeper), Replicacja Widokowana, EPaxos (bez lidera).
Dyspersowane bazy danych
Podział na kawałki (sharding): pozioma podziałka danych między węzłami (na podstawie hashe, zakresu, directory). Replikacja: jednoprzemiennych (MySQL, PostgreSQL streaming), wielo-przemiennych (CockroachDB), bezpochodnych (styl Dynamo). Google Spanner: globalnie dyspersowane, silnie zgodne, interfejs TrueTime API (GPS + zegarki atomowe do ograniczenia niepewności czasu). CockroachDB: otwarta źródłowo, podniesiona na Spanner, transakcje serializowalne. Amazon DynamoDB: bezserwerowa, końcowo/silnie zgodna, opóźnienie latujące do kilku milisekund. Apache Cassandra: szerokokolumnowy, dostosowalna zgodność (JEDNO, KORUUM, Wszystko). NewSQL: połączenie interfejsu SQL z skalowalnością NoSQL (TiDB, YugabyteDB, VoltDB). Zegary wektorowe: śledzenie porządku przyczynowego w systemach zgodnych końcowo.
Microservices i wzory
Microservice: samodzielnie wdrożalne usługi posiadające swoje dane. Sieć usług: Istio, Linkerd — boczne proksi dla mTLS, równoważenia obciążenia, obserwacji. Wzorzec Saga: rozproszone transakcje między usługami za pomocą działań compensujących (choreografii w przeciwieństwie do orkestracji). CQRS (Command Query Responsibility Segregation): oddzielne modele czytania i zapisu. Źródło zdarzeń: przechowywanie wszystkich zmian jako niezmienne zdarzenia, powtarzanie dla konstrukcji stanu. Przewodnik elektryczny: zapobieganie cascade failure (Hystrix, Resilience4j). Obserwacja: rozproszone śledzenie (Jaeger, Zipkin), strukturalne logowanie, metryki (Prometheus). Inżynieria chaosu: Netflix Chaos Monkey, zdecydowane wprowadzanie awarii do poprawy odporności.
▶ Wypróbuj na żywo
Wszystko powyżej działa bezpośrednio w Twojej przeglądarce — otwórz Hash Function Avalanche Visualizer i zmieniaj parametry podczas działania. Nic nie jest instalowane ani przesyłane na serwer, cały model działa w jednej karcie.