Noder, Kanter, Riktningar
En Begäran som en Promenad på en Graf
Varje komponent som begäran berör är en nod: klient, DNS-resolver, CDN-kant, revers proxy, bakre replika, databas, cache.
Varje förbindelse mellan två noder är en riktad kant: begäranden flyter framåt, svar flyter tillbaka. Framåt-kanten representerar en öppen TCP-anslutning plus protokollet ovanpå.
En enda begäran är en väg genom denna graf. Det totala arbetet systemet gör för att svara på begäran är lika med summan av arbete vid varje nod, plus latensen för varje kant.
Varför bry dig? När du har ritat grafen dyker egenskaper upp som är osynliga i kod:
- Hoppavstånd: antalet kanter i vägen. Varje hopp lägger till latens (nätverksruntresa + nodbearbetning). Färre hopp = lägre golvmäta på latens.
- In-grader: hur många kanter som pekar INTE mot en nod. Hög in-gradering innebär att noden får begäranden från många källor & måste skalas eller skydda sig.
- Ut-grader: hur många kanter som pekar UTIFRÅN en nod. Hög ut-gradering innebär att noden beroende av många nedströms & har många sätt att misslyckas.
- Snittnod: en enskild nod vars borttagande kopplar av grafen. En revers proxy utan par är en snittnod; att ta bort den tar bort alla tillgångar till dess ursprung.
Där Trafik Koncentreras
Fan-In = Koncentration
In-gradering av en nod = antalet kanter som pekar mot den. I en begäran graf, in-gradering = antalet uppströms källor som skickar begäranden.
Fan-in mönster: många klienter -> en CDN; många CDN kanter -> få ursprungskrav; många proxy -> färre bakre repliker; många backends -> en databas.
Koncentrationen är viktig eftersom den högsta in-graderingen noden ser den mest sammankopplade lasten. Databasen på slutet av kedjan kan se frågor från varje aktiv begäran i hela systemet, även om ingen enskild användare genererar mycket.
Fan-Out = Beroende
Ut-gradering av en nod = antalet kanter som pekar ut från den. Hög ut-gradering innebär många nedströms-beroenden.
En backend som anropar en databas, två cacheminnen, tre externa API:er & en kö har ut-gradering 7. Dess lyckoprocent är ungefär produkten av varje nedströms lyckoprocent (om alla krävs för ett lyckat svar).
0,999 ^ 7 ≈ 0,993: en backend med 7 nedströms-tjänster var och en på 99,9% tillförlitlighet kan endast uppnå cirka 99,3% tillförlitlighet själv, även utan egna fel.
Minimera ut-gradering genom: att cachemina nedströms resultat, göra icke-kritiska nedströms-tjänster optionella (försiktig avskalning), parallellisera vad som kan parallelliseras.
Asymmetrin
Fan-in koncentrerar last; fan-out multiplicerar risk. En välformad graf minimerar både vid de högsta inverkningsnoderna.
Databasen (högsta fan-in): cachelagra aggressivt för att minska lasten. Läsreplicer för att sprida fan-in över flera noder.
Orkestrerande tjänst (högsta fan-out): kretsbräckare per beroende, försiktig avskalning, bulkheads.
En Inskriven Nod Köper Flexibilitet
Indirekt = Lägga till ett Mellanliggande Node
Utan proxy är grafen: klient -> backend. Klienten måste veta om backend-adressen. Att flytta backend kräver att du uppdaterar klienten (via DNS eller konfiguration). Detta är en stark bindning.
Med en proxy blir grafen: klient -> proxy -> backend. Klienten känner till bara proxy. Att flytta backend kräver att du uppdaterar proxys upstream-konfiguration, inte klientens.
Den grafiska operationen: infoga ett node längs en befintlig kant. Den nya kanten klient -> proxy är stabil; den nya kanten proxy -> backend är nu teamets att hantera.
Geometrisk läsning: indirektion lägger till en skikt som decouperar upstream-förändring från downstream-förändring. Varje lagers kanter kan omkopplas självständigt.
Kostnaden för Indirekt
Varje skikt lägger till:
- En hop av latens (kanten från klient till proxy)
- En ytterligare snittnod i vägen (proxy själv)
- En ytterligare plats där felkonfiguration kan inträffa
Fördelarna (omkoppla, skala, skydda, avsluta TLS, fördela belastning) väger ofta upp mot kostnaderna för något icke-trivialt system. Men det finns en gräns: varje indirektionslager lägger till ett annat hopp & ett annat SPOF-kandidat.
Folklore-regeln: något problem kan lösas genom att lägga till ett lager av indirektion (utom problemet med för många lager av indirektion).
Läs en Arkitektur som en Graf
Sammanfattning
Du kan nu läsa en systemarkitektur som en graf: räkna hopp, identifiera snittnoder, mäta koncentration av fan-in, beräkna tillgänglighetstak från fan-out & utvärdera indirektionsfördelar och nackdelar.
Använd alla fyra.
En ny tjänst har denna arkitektur: klienter -> CDN -> revers proxy (2 repliker) -> bakåtplan (8 repliker) -> { DB primärt, cachekluster (3 noder), extern API }.
Kompanjonsanteckningar
Kompanjonsanteckningar
Denna geometri-avslutning omformar den Proxies & Origins huvudlektionen till en riktad-graf analys.
Nästa kompanjonsida i detta kurs, geometry_of_stateless_horizontal_scaling, tar replikamatematiken från huvudskalningsektionen och härleder kökurvan, Little's lag och 80-procentsanvändningens knä geometriskt.
Bra gjort.