Flaskhalsnoden identifieras innan trafiken anländer
Mellancentralitet
För varje par noder i en graf finns det en kortaste väg mellan dem. Mellancentralitet för en nod N = andelen av alla kortaste vägar som passerar genom N.
En nod med hög mellancentralitet ligger på vägen mellan många andra par. Om den blir långsam, blir många flöden långsamma. Om den fallerar, bryts många flöden.
Arkitekturell tolkning: Noder med hög mellancentralitet är de som varje arkitekturgenomgång bör ägna extra uppmärksamhet åt. De är flaskhalsar, SPOF:er (single points of failure) & kapacitetskritiska komponenter i ett. De tenderar att vara:
- DNS-leverantören (mellan varje klient & varje tjänst)
- Ingress-proxy (mellan varje klient & varje backend)
- Databasens primärnöd (mellan varje backend & varje läsning)
- Autentiseringstjänsten (mellan varje användare & varje auktoriserad åtgärd)
Detektion utan mätning: grafens topologi identifierar noder med hög mellanliggande centralitet. Du behöver inte trafikdata; du behöver arkitekturdiagrammet. En nod som ligger mellan många par av andra noder är strukturellt kritisk.
Operationell konsekvens: noder med hög mellanliggande centralitet förtjänar oproportionerligt stort investering i (1) kapacitetsmarginal, (2) redundans, (3) observabilitet & (4) incidenthanteringsplaner.
Den minsta skärningen isolerar den minsta delen
Min-Cut-satsen i enkla ord
Min-cut mellan två noder i en graf = det minsta antalet kanter (eller noder) du måste ta bort för att koppla bort dem från varandra.
Operationell tolkning: min-cut sätter en övre gräns för värsta tänkbara skadeomfattning. Om min-cut mellan 'clients' och 'database' är 1 kant (en enda proxy), innebär det att om denna kant går sönder kopplas alla klienter bort från databasen. Om min-cut är 5, måste du förlora 5 komponenter samtidigt för att helt koppla bort dem; det är dåligt tur, men begränsat.
Design för skadeomfattning: öka min-cut vid varje viktig gräns. Flera proxies; flera cachemoduler; flera nätverksvägar mellan datacenter. Varje tillägg ökar min-cut med 1.
Bulkhead-mönstret i grafiska termer: partitionera resurser i separata delgrafer som inte delar någon min-cut med varandra. En felaktighet inom en delgraf kan inte spridas till de andra eftersom kanterna inte finns.
Diameter sätter avståndet för felaktighetsspridning
Grafdiameter = den längsta kortaste vägen mellan godtydliga två noder.
Felaktighetsspridning: när en nod felar och omförsökningar (retries) flödar tillbaka, drabbar de upströms-noder upp till diameter-avståndet bort. Ett system med diameter 3 (client -> proxy -> backend -> DB) innebär att ett DB-fel påverkar 3 upströmslager i en omförsöksomstorm.
Konsekvens: kortare diameter = snabbare inneslutning av felaktigheter men också högre nodkoncentration. Varje design har sina kompromisser.
Beräkna min-cut för en verklig arkitektur
En arkitektur: 1 DNS, 1 CDN, 3 reverse proxies, 12 backend-replikor, 1 DB-huvud.
Revisions av felmoder via grafmått
Syntes
Du kan nu identifiera noder med hög mellanliggande grad (betweenness), beräkna min-cut vid varje gräns och uppskatta spridningsavståndet för fel via diametern.
Tillämpa alla tre.
Ett system: 50 kundändpunkter -> 1 DNS -> 2 CDN-noder (POPs) -> 4 omvända proxyer -> 16 bakändskopior -> { databaskluster (1 primär + 2 reserv), Redis-kluster (5 noder), 3 externa API:er }.
Kompanjonsanteckningar
Kompanjonsanteckningar
Denna lektion om geometri omformulerar huvudlektionen Felmoder & Spridningsradie genom grafmetriker (mellanligghetsgrad, min-cut, diameter).
Den sista kompanjonen, geometry_of_observability_and_capacity, behandlar Voronoi-celler för CDN PoP-täckningsområden, latenstriangelns ljushastighetsbotten & kökurvan besökt på proxynivån.
Bra jobbat.