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

un

gäst
1 / ?

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.

En begäran som en väg genom en riktad graf: klient, proxy, backend, databas

Rita (eller beskriv i text) begäran grafen för: klientwebbläsare -> CDN kant -> revers proxy -> bakre replika -> databas. Räkna hopp. Identifiera snittnoderna. Predikta en operativ konsekvens av att ha så många snittnodar i rad.

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 bakre replika kallar 4 nedströms-tjänster, var och en självständigt med 99,95% tillgänglighet. (1) Vilket är övre gränsen för bakre replikans tillgänglighet om alla 4 anrop krävs för ett lyckat svar? (2) Om 2 av de 4 nedströms-tjänsterna görs optionella via försiktig avskalning (ersätts med cachelagrade återgångar när de är otillgängliga), vilket blir gränsen?

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).

En grupp lägger till en CDN framför en befintlig reverser proxy. Vägen går från `klient -> proxy -> backend` (2 hopp) till `klient -> CDN -> proxy -> backend` (3 hopp). Namnge två fördelar med indirektningen (grafteoretiska termer välkomna) & två kostnader.

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 }.

Analysera: (1) vilket är det maximala antalet hopp på en enskild begäranstig, (2) vilket lager som har högst fan-in (& vad det innebär för skalering), (3) vilket tak för backend-tillgänglighet om DB är 99,95%, cache är 99,95% & extern API är 99,9%, alla krävs, & (4) vilken enskild nod, om borttagen, skulle skilja mest användare?

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.