Eingehend & ausgehend als getrennte Mengen
Bipartite Graphen in der Netzwerkarchitektur
Ein bipartiter Graph teilt Knoten in zwei Mengen auf, wobei Kanten nur zwischen den Mengen erlaubt sind (nie innerhalb einer Menge).
Netzwerkgrenzen haben eine natürliche bipartite Struktur:
- Ingress-Seite: Externe Clients auf einer Seite, interne Dienste auf der anderen. Kanten: Externe Anfragen, die eintreten, interne Antworten, die ausgehen.
- Egress-Seite: interne Dienste auf einer Seite, externe Ziele auf der anderen. Kanten: interne Dienste, die ausgehende Aufrufe initiieren, und externe Antworten, die zurückkommen.
Die Asymmetrie:
- Ingress: Die Quellmenge ist unbeschränkt (jeder im Internet). Die Zielmenge ist klein (einige Dienste). Das Volumen skaliert mit den Nutzern.
- Egress: Die Quellmenge ist klein (einige interne Dienste). Die Zielmenge ist begrenzt (einige bekannte Partner). Das Volumen skaliert mit der internen Aktivität.
Einzelkasten-Design (Single-Box-Design) faltet beide bipartiten Hälften durch einen einzigen Knoten zusammen. Dieser Knoten hat einen Fan-in von außen (Ingress) UND einen Fan-in von innen (Richtung des Egress). Die Last des Knotens = Summe beider Seiten.
Getrenntes Design (Split-Design) erhält beide bipartiten Hälften an separaten Knoten. Jeder Knoten übernimmt eine Rolle mit seiner entsprechenden Skalierungsachse.
Vor der Trennung: Ein Schnittknoten überall
Einzelnes Element: Ein Knoten hält alles zusammen
Vor der Aufteilung befindet sich ein einzelner Proxy-Container zwischen jedem externen/internen Paar. In grafentheoretischen Begriffen ist dies ein Schnittknoten hoher Ordnung: Seine Entfernung trennt alle Clients von allen Backends UND alle internen Dienste von allen externen Partnern.
Die Konnektivität an diesem Knoten = 1. Alles, was diesen Knoten stört (Prozessabsturz, Netzwerkstörung, OOM-Kill), trennt jeden abhängigen Pfad.
Nach der Aufteilung: Schnittknoten durch zwei leichtere Knoten ersetzt
Die Aufteilung in Ingress + Egress erzeugt zwei Graphenknoten, wo es zuvor nur einen gab. Jeder Knoten befindet sich nun nur auf einer bipartiten Hälfte:
- Ingress-Knoten: Schnittknoten für die bipartite Hälfte externe-Clients-zu-internen-Diensten
- Egress-Knoten: Schnittknoten für die bipartite Hälfte interne-Dienste-zu-Partnern
Die Haarnadelschleife verschwindet geometrisch: Im Ein-Box-Graph musste ein interner Dienst, der einen extern zugänglichen Dienst über die öffentliche Adresse erreichen wollte, denselben Knoten zweimal durchlaufen (ausgehend über die Egress-Rolle, dann eingehend über die Ingress-Rolle). Im aufgeteilten Graph trifft die Durchlaufung auf zwei verschiedene Knoten.
Die Konnektivität pro Seite bleibt bei 1, aber die beiden Schnittknoten können unabhängig voneinander ersetzt werden. Das Hinzufügen eines zweiten Ingress-Proxy erhöht die Konnektivität auf der Ingress-Seite auf 2, ohne die Egress-Seite zu verändern.
Replikation pro Seite
Produktionsflotten betreiben häufig 2+ Ingress-Proxy (HA) UND 2+ Egress-Proxy (HA). Jede Seite erreicht die Konnektivität 2 unabhängig voneinander. Die Kapazität skaliert auf jeder Seite horizontal nach Bedarf.
Toleranz gegenüber Netzwerkpartitionen
Synthese
Sie können Netzwerkarchitekturen nun als bipartite Graphen lesen, Trennknoten identifizieren und die Konnektivität pro Hälfte verfolgen.
Wenden Sie dies auf Netzwerkpartitionen an.
Eine Netzwerkpartition ist ein Graphenschnitt: Kanten über die Partition hinweg fallen aus; beide Seiten fahren fort, können sich aber nicht mehr gegenseitig erreichen.
Ein geografisch verteiltes System verfügt über zwei Rechenzentren, die durch eine einzelne Inter-DC-Verbindung verbunden sind. Eingangsverkehr gelangt über DC1; Ausgangsverkehr verlässt das System über DC1 zu externen Partnern; einige interne Dienste befinden sich in DC2 und rufen für zustandsbehaftete Operationen in DC1 zurück.
Begleitnotizen
Begleitnotizen
Diese Lektion zur Geometrie formuliert die Hauptlektion Ingress & Egress Separation als Analyse eines bipartiten Graphen neu.
Die nächste Begleitnotiz, geometry_of_failure_modes_and_blast_radius, leitet die Betweenness-Zentralität (identifiziert Engpassknoten) und den minimalen Schnitt (begrenzt die Auswirkung) ab.
Gut gemacht.