English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

gość
1 / ?
powrót do lekcji

Ruch przychodzący i wychodzący jako odrębne zbiory

Grafy dwudzielne w architekturze sieci

Graf dwudzielny dzieli wierzchołki na dwa zbiory, przy czym krawędzie są dozwolone wyłącznie między zbiorami (nigdy wewnątrz zbioru).

Granice sieci mają naturalną strukturę dwudzielną:

- Strona przychodząca (Ingress): klienci zewnętrzni po jednej stronie, usługi wewnętrzne po drugiej. Krawędzie: zewnętrzne żądania wchodzące, wewnętrzne odpowiedzi wychodzące.

- Strona egress: wewnętrzne usługi po jednej stronie, zewnętrzne destynacje po drugiej. Krawędzie: wewnętrzne usługi inicjujące połączenia wychodzące, zewnętrzne odpowiedzi wracające.

Asymetria:

- Ingress: zbiór źródeł jest nieograniczony (każdy w internecie). Zbiór destynacji jest mały (kilka usług). Wolumen skaluje się z liczbą użytkowników.

- Egress: zbiór źródeł jest mały (kilka wewnętrznych usług). Zbiór destynacji jest ograniczony (kilka znanych partnerów). Wolumen skaluje się z aktywnością wewnętrzną.

Projekt z jednym węzłem (single-box) sprowadza obie połówki grafu dwudzielnego do jednego węzła. Ten węzeł ma wejścia z zewnątrz (ingress) ORAZ wejścia z wewnątrz (odwrotny kierunek egress). Obciążenie węzła = suma obciążenia obu stron.

Projekt rozłączony (split design) zachowuje obie połówki grafu dwudzielnego na osobnych węzłach. Każdy węzeł obsługuje jedną rolę z odpowiednią osią skalowania.

Graf dwudzielny ingress i egress: osobne zbiory węzłów, osobne wierzchołki rozcinające

Narysuj graf dwudzielny dla małego SaaS: 5 zewnętrznych punktów końcowych klientów (wysyłających żądania), 3 wewnętrzne usługi (backend) oraz 4 zewnętrzne API partnerów (wywoływane wychodząco). Określ, które krawędzie należą do połówki ingress, a które do połówki egress. Przewidź, co stanie się z łącznością grafu, jeśli jedna z wewnętrznych usług ulegnie awarii.

Przed rozdzieleniem: Węzeł rozcinający wszędzie

Jedno pudełko: Jeden węzeł trzyma wszystko

Przed podziałem pojedyncze pudełko proxy znajduje się między każdą parą zewnętrzną/wewnętrzną. W terminologii grafowej jest to wierzchołek cięcia wysokiej rzędu: jego usunięcie rozłącza wszystkich klientów od wszystkich backendów ORAZ wszystkie usługi wewnętrzne od wszystkich partnerów zewnętrznych.

Łączność na tym węźle wynosi 1. Cokolwiek, co zakłóci działanie tego węzła (zawieszenie procesu, błąd sieci, zabójstwo przez OOM), rozłączy każdą zależną ścieżkę.

Po podziale: Wierzchołek cięcia zastąpiony przez dwa lżejsze węzły

Podział na ingress + egress tworzy dwa węzły grafu tam, gdzie wcześniej był jeden. Każdy węzeł znajduje się teraz tylko na jednej połówce dwudzielnej:

- Węzeł ingress: wierzchołek cięcia dla połówki dwudzielnej „klienci zewnętrzni – usługi wewnętrzne”

- Węzeł egress: wierzchołek cięcia dla połówki dwudzielnej „usługi wewnętrzne – partnerzy”

Pętla hairpin znika geometrycznie: w grafie z pojedynczym pudełkiem usługa wewnętrzna próbująca dotrzeć do usługi skierowanej na zewnątrz za pomocą adresu publicznego musiała przechodzić przez ten sam wierzchołek dwukrotnie (na zewnątrz w roli egress, a następnie do wewnątrz w roli ingress). W grafie po podziale przejście trafia na dwa różne wierzchołki.

Łączność po każdej stronie pozostaje na poziomie 1, ale dwa wierzchołki cięcia mogą być zastępowane niezależnie. Dodanie drugiego proxy ingress podnosi łączność po stronie ingress do 2, bez zmiany po stronie egress.

Replikacja po każdej stronie

Floty produkcyjne często uruchamiają 2 lub więcej proxy wejściowych (HA) ORAZ 2 lub więcej proxy wyjściowych (HA). Każda strona osiąga niezależnie łączność 2. Pojemność skaluje się poziomo na każdej stronie w miarę potrzeby.

Zespół obecnie uruchamia jeden serwer proxy (pojedynczy wierzchołek cięcia dla obu kierunków). Rozdziela go na jeden proxy wejściowy i jeden wyjściowy, a następnie dodaje drugi proxy wejściowy (para HA), ale pozostawia pojedynczy proxy wyjściowy. Przeanalizuj, jak zmienia się łączność grafu na każdym etapie, oraz zidentyfikuj połowę dwudzielna, która po etapie 3 nadal ma łączność 1 (co czyni ją nadal trybem awarii o najniższej tolerancji).

Odporność na partycjonowanie sieci

Synteza

Teraz możesz czytać architektury sieci jako grafy dwudzielne, identyfikować wierzchołki rozcinające oraz śledzić łączność w obrębie każdej z części.

Zastosuj to do partycjonowania sieci.

Partycjonowanie sieci to rozcięcie grafu: krawędzie przecinające partycję ulegają awarii; obie strony nadal działają, ale nie mogą się ze sobą komunikować.

Geograficznie rozproszony system ma dwa centra danych połączone pojedynczym łączem międzycentrowym (inter-DC). Ruch przychodzący (ingress) wchodzi przez DC1; ruch wychodzący (egress) przechodzi przez DC1 do zewnętrznych partnerów; niektóre usługi wewnętrzne znajdują się w DC2 i wywołują operacje stanowe (stateful) w DC1.

Przewidywalnie co się stanie, jeśli łącze inter-DC ulegnie awarii: (1) które części grafu dwudzielnego pozostaną połączone wewnątrz każdego centrum danych, (2) które przepływy ruchu będą kontynuowane, a które zostaną przerwane, oraz (3) zaproponuj jedną zmianę architektoniczną, która pozwoli systemowi tolerować to partycjonowanie z ograniczonym pogorszeniem wydajności, zamiast całkowitej awarii.

Notatki towarzyszące

Notatki towarzyszące

Ta lekcja z zakresu geometrii reinterpretuje główną lekcję Separacji Ingress i Egress jako analizę grafu dwudzielnego.

Następna notatka towarzysząca, geometry_of_failure_modes_and_blast_radius, wyprowadza centralność międzywęzłową (identyfikuje węzły wąskiego gardła) oraz minimalne cięcie (ogranicza promień rażenia).

Bardzo dobrze.