Węzły, Krawędzie, Kierunki
Żądanie jako Przechadzka Po Grafie
Każdy składnik, z którym żądanie się spotyka, to węzeł: klient, rozwiązywacz DNS, krawędź CDN, odwrotny proxy, replika serwera początkowego, baza danych, cache.
Każde połączenie między dwoma węzłami to kierunkowa krawędź: żądania przepływają naprzód, odpowiedzi przepływają wstecz. Krawędź w przód reprezentuje otwarte połączenie TCP oraz protokół na nim zbudowany.
Jedno żądanie to ścieżka przez ten graf. Suma pracy, jaką system wykona, aby odpowiedzieć na żądanie, to suma pracy na każdym węźle, plus opóźnienie każdej krawędzi.
Dlaczego to ważne? Kiedy naryszysz graf, właściwości zaczynają wypływać, które są niewidoczne w kodzie:
- Liczba skoków: liczba krawędzi w ścieżce. Każdy skok dodaje opóźnienia (okrągła podróż sieciowa + przetwarzanie węzła). Mniej skoków = niższy dół opóźnienia.
- Wpływ: ile krawędzi wskazuje na dany węzeł. Wysoka wpływ oznacza, że węzeł otrzymuje żądania z wielu źródeł i musi się skalować lub chronić.
- Wyjście: ile krawędzi wychodzi z danego węzła. Wysokie wyjście oznacza, że węzeł zależy od wielu niżej położonych i ma wiele sposobów na zawodzenie.
- Węzeł cięcia: jeden węzeł, któryz usunięciem rozłącza graf. Odwrotny proxy bez partnera to węzeł cięcia; usunięcie go usuwa dostęp do wszystkich swoich źródeł.
Gdzie Koncentruje się Ruch
Fan-In = Koncentracja
Stopień wejściowy węzła = liczba krawędzi wskazujących na niego. W grafie żądania, stopień wejściowy = liczba źródeł wysyłających żądania w górę.
Schemat fan-in: wiele klientów -> jeden CDN; wiele krawędzi CDN -> kilka serwerów proxy; wiele proxy -> mniej replik backendowych; wiele backends -> pojedyncza baza danych.
Wagę ma koncentracja, ponieważ najwyższy stopień wejściowy węzeł zobacza największą łączną obciążenie. Baza danych na końcu łańcucha może otrzymywać zapytania z każdego czynnego żądania w całym systemie, nawet jeśli żaden użytkownik nie generuje dużo.
Fan-Out = Zależność
Stopień wyjściowy węzła = liczba krawędzi wychodzących z niego. Wysoki stopień wyjściowy oznacza wiele zależności w dół.
Backend, który wywołuje bazę danych, dwa cache, trzy zewnętrzne API i kolejkę, ma stopień wyjściowy 7. Jego prawdopodobieństwo powodzenia jest mniej więcej iloczynem każdego zależności powodzenia (jeśli wszystkie są wymagane do odpowiedzi sukcesu).
0,999 ^ 7 ≈ 0,993: backend z 7 zależnościami, każda z 99,9% niezawodności, może osiągnąć tylko ~99,3% niezawodności, nawet w przypadku braku własnych błędów.
Zmniejsz stopień wyjściowy przez: cacheowanie wyników w dół, czynienie nieistotnych zależności opcjonalnymi (łagodna degradacja), równoległe wykonywanie tego, co można równolegle.
Asymetria
Fan-in skupia obciążenie; fan-out mnoży ryzyko. Często dobrany graf minimalizuje obie na najbardziej wpływających węzłach.
Baza danych (najwyższy fan-in): agresywnie cacheować, aby zmniejszyć obciążenie. Kopie odczytu do replikowania, aby rozprzestrzenić fan-in na wiele węzłów.
Orchestrator usługi (najwyższy fan-out): zamek wyjściowy dla każdej zależności, łagodna degradacja, bariery.
Wprowadzenie węzła kupuje elastyczność
Indirection = Dodawanie Węzła Pośredniego
Bez proxy, graf to: client -> backend. Klient musi wiedzieć o adresie backendu. Przeniesienie backendu wymaga aktualizacji klienta (dzięki DNS lub konfiguracji). To jestściżyna związanie.
Z proxy, graf staje się: client -> proxy -> backend. Klient wie tylko o proxy. Przeniesienie backendu wymaga aktualizacji konfiguracji proxy w górę, a nie klienta.
Operacja grafu: wstaw węzeł na istniejącej krawędzi. Nowa krawędź client -> proxy jest stabilna; nowa krawędź proxy -> backend jest teraz zespołu do zarządzania.
Czytanie geometryczne: indirekcja dodaje warstwę, która oddala zmianę na wysokim poziomie od zmiany na niższym poziomie. Krawędzie każdej warstwy można niezależnie przewiązać.
Koszt Indirekcji
Każda warstwa dodaje:
- Jedną pauz latencji (krawędź od klienta do proxy)
- Jedno więcej węzła przecinającego (proxy sam w sobie)
- Jedno więcej miejsca, gdzie może się zdarzyć błąd konfiguracji
Zalety (rewire, skalowanie, ochrona, zakończanie TLS, rozkład obciążenia) zwykle przeważają koszty dla dowolnego niezwykłego systemu. Ale jest granica: każda warstwa indirekcyjna dodaje kolejny skok & kolejnego kandydata na SPOF.
Powszechna reguła: każde problem można rozwiązać przez dodanie warstwy indirekcyjności (oprócz problemu zbyt wielu warstw indirekcyjności).
Przeczytaj Architekturę Jako Graf
Synteza
Teraz możesz czytać architekturę systemu jako graf: liczyć skoki, zidentyfikować węzły przecinające, mierzyć koncentrację fan-in, obliczać dach dostępności z fan-out, & ocenić korzyści z indirekcyjności.
Zastosuj wszystkie cztery.
Nowa usługa ma tę architekturę: klienci -> CDN -> odwrotny proxy (2 repliki) -> warstwa tylnej (8 replik) -> { podstawowa baza danych, klastr cache (3 węzły), zewnętrzny API }.
Notatki towarzyszące
Notatki towarzyszące
Ten geometry-of lesson przekształca główny lesson Proxies & Origins w analizę grafu kierunkowego.
Następna towarzysząca w tej kursie, geometry_of_stateless_horizontal_scaling, wykorzystuje matematykę replik z głównego lesson skalowania, aby wywnioskować krzywą kolejki, prawo Little'a i koliste kolczastości 80% geometricznie.
Brawo.