
Netflix er ledende innen internett-TV-markedet - selskapet som opprettet og aktivt utvikler dette segmentet. Netflix er ikke bare kjent for sin omfattende katalog over filmer og TV-serier tilgjengelig fra nesten alle hjÞrner av planeten og alle enheter med skjerm, men ogsÄ for sin pÄlitelige infrastruktur og unike ingeniÞrkultur.
Et tydelig eksempel pÄ Netflix-tilnÊrmingen til Ä utvikle og stÞtte komplekse systemer ble presentert pÄ DevOops 2019 - UtviklingsdirektÞr hos Netflix. Utdannet ved fakultetet for beregningsmatematikk og matematikk ved Nizhny Novgorod State University. Lobachevsky, Sergey en av de fÞrste ingeniÞrene i Open Connect - CDN-teamet hos Netflix. Han bygde systemer for overvÄking og analyse av videodata, lanserte en populÊr tjeneste for Ä vurdere Internett-tilkoblingshastighet FAST.com, og har de siste Ärene jobbet med Ä optimalisere Internett-forespÞrsler slik at Netflix-applikasjonen fungerer sÄ raskt som mulig for brukerne.
Rapporten fikk de beste anmeldelser fra konferansedeltakerne, og vi har utarbeidet en tekstversjon for deg.

I sin rapport snakket Sergei i detalj
- om hva som pÄvirker forsinkelsen av Internett-forespÞrsler mellom klienten og serveren;
- hvordan redusere denne forsinkelsen;
- hvordan designe, vedlikeholde og overvÄke feiltolerante systemer;
- hvordan oppnÄ resultater pÄ kort tid, og med minimal risiko for virksomheten;
- hvordan analysere resultater og lĂŠre av feil.
Svar pÄ disse spÞrsmÄlene trengs ikke bare av de som jobber i store selskaper.
De presenterte prinsippene og teknikkene bĂžr vĂŠre kjent og praktisert av alle som utvikler og stĂžtter Internett-produkter.
Neste er fortellingen fra foredragsholderens perspektiv.
Viktigheten av internetthastighet
Hastigheten pÄ Internett-forespÞrsler er direkte relatert til virksomheten. Tenk pÄ shoppingbransjen: Amazon i 2009 at en 100 ms forsinkelse resulterer i et tap pÄ 1 % av salget.
Det er flere og flere mobile enheter, etterfulgt av mobilsider og applikasjoner. Hvis siden din tar mer enn 3 sekunder Ă„ laste, mister du omtrent halvparten av brukerne. MED Google tar hensyn til lastehastigheten til siden din i sĂžkeresultatene: jo raskere siden, desto hĂžyere plassering i Google.
Tilkoblingshastighet er ogsÄ viktig i finansinstitusjoner hvor latens er kritisk. I 2015, Hibernia Networks en kabel pÄ 400 millioner dollar mellom New York og London for Ä redusere ventetiden mellom byene med 6 ms. Tenk deg $66 millioner for 1 ms reduksjon i ventetid!
IfÞlge , tilkoblingshastigheter over 5 Mbit/s pÄvirker ikke lenger lastehastigheten til et typisk nettsted direkte. Det er imidlertid et lineÊrt forhold mellom tilkoblingsforsinkelse og sidelastingshastighet:

Netflix er imidlertid ikke et typisk produkt. Virkningen av latens og hastighet pĂ„ brukeren er et aktivt omrĂ„de for analyse og utvikling. Det er applikasjonslasting og innholdsvalg som avhenger av latens, men lasting av statiske elementer og streaming avhenger ogsĂ„ av tilkoblingshastighet. Ă
analysere og optimalisere nÞkkelfaktorene som pÄvirker brukeropplevelsen er et aktivt utviklingsomrÄde for flere team hos Netflix. Et av mÄlene er Ä redusere ventetiden for forespÞrsler mellom Netflix-enheter og skyinfrastrukturen.
I rapporten vil vi fokusere spesifikt pÄ Ä redusere ventetiden ved Ä bruke eksemplet med Netflix-infrastrukturen. La oss vurdere fra et praktisk synspunkt hvordan vi skal nÊrme oss prosessene for design, utvikling og drift av komplekse distribuerte systemer og bruke tid pÄ innovasjon og resultater, i stedet for Ä diagnostisere driftsproblemer og sammenbrudd.
Inne pÄ Netflix
Tusenvis av forskjellige enheter stÞtter Netflix-apper. De er utviklet av fire forskjellige team, som hver lager separate klientversjoner for Android, iOS, TV og nettlesere. Vi jobber ogsÄ hardt med Ä forbedre og tilpasse brukeropplevelsen, og kjÞrer hundrevis av A/B-tester parallelt.
Personalisering stĂžttes av hundrevis av mikrotjenester i AWS-skyen, som gir personlig tilpassede brukerdata, sending av spĂžrringer, telemetri, Big Data og koding. Trafikkvisualisering ser slik ut:
Til venstre er inngangspunktet, og deretter fordeles trafikken pÄ flere hundre mikrotjenester som stÞttes av forskjellige backend-team.
En annen viktig komponent i infrastrukturen vĂ„r er Open Connect CDN, som leverer statisk innhold til sluttbrukeren â videoer, bilder, klientkode osv. CDN er plassert pĂ„ egendefinerte servere (OCA - Open Connect Appliance). Inne er det en rekke SSD- og HDD-stasjoner som kjĂžrer optimalisert FreeBSD, med NGINX og et sett med tjenester. Vi designer og optimaliserer maskinvare- og programvarekomponenter slik at en slik CDN-server kan sende sĂ„ mye data som mulig til brukerne.
"Veggen" til disse serverne ved utvekslingspunktet for Internett-trafikk (Internet eXchange - IX) ser slik ut:

Internet Exchange gir Internett-tjenesteleverandÞrer og innholdsleverandÞrer muligheten til Ä "koble seg" til hverandre for Ä utveksle data mer direkte pÄ Internett. Det er omtrent 70-80 Internet Exchange-punkter rundt om i verden hvor serverne vÄre er installert, og vi installerer og vedlikeholder dem uavhengig:

I tillegg leverer vi ogsÄ servere direkte til Internett-leverandÞrer, som de installerer i nettverket sitt, noe som forbedrer lokaliseringen av Netflix-trafikk og kvaliteten pÄ strÞmming for brukere:

Et sett med AWS-tjenester er ansvarlig for Ä sende videoforespÞrsler fra klienter til CDN-servere, samt konfigurere selve serverne - oppdatering av innhold, programkode, innstillinger osv. For sistnevnte bygde vi ogsÄ et ryggradsnettverk som kobler servere i Internet Exchange-punkter med AWS. Stamnettverket er et globalt nettverk av fiberoptiske kabler og rutere som vi kan designe og konfigurere basert pÄ vÄre behov.
PĂ„ , leverer CDN-infrastrukturen vĂ„r omtrent â av verdens Internett-trafikk i rushtiden og â av trafikken i Nord-Amerika, der Netflix har eksistert lengst. Imponerende tall, men for meg er en av de mest fantastiske prestasjonene at hele CDN-systemet er utviklet og vedlikeholdt av et team pĂ„ mindre enn 150 personer.
Opprinnelig ble CDN-infrastrukturen designet for Ä levere videodata. Men over tid innsÄ vi at vi ogsÄ kan bruke det til Ä optimalisere dynamiske forespÞrsler fra klienter i AWS-skyen.
Om Internett-akselerasjon
I dag har Netflix 3 AWS-regioner, og ventetiden pÄ forespÞrsler til skyen vil avhenge av hvor langt kunden er fra nÊrmeste region. Samtidig har vi mange CDN-servere som brukes til Ä levere statisk innhold. Er det noen mÄte Ä bruke dette rammeverket for Ä Þke hastigheten pÄ dynamiske spÞrringer? Imidlertid er det dessverre umulig Ä cache disse forespÞrslene - APIer er personlig tilpasset og hvert resultat er unikt.
La oss lage en proxy pÄ CDN-serveren og begynne Ä sende trafikk gjennom den. Blir det raskere?
materiell
La oss huske hvordan nettverksprotokoller fungerer. I dag bruker mesteparten av trafikken pÄ Internett HTTP-er, noe som avhenger av de lavere lagprotokollene TCP og TLS. For at en klient skal koble til serveren, utfÞrer den et hÄndtrykk, og for Ä etablere en sikker tilkobling, mÄ klienten utveksle meldinger med serveren tre ganger og minst én gang til for Ä overfÞre data. Med en ventetid per rundtur (RTT) pÄ 100 ms, vil det ta oss 400 ms Ä motta den fÞrste databiten:

Hvis vi plasserer sertifikatene pÄ CDN-serveren, kan hÄndtrykktiden mellom klienten og serveren reduseres betydelig hvis CDN-en er nÊrmere. La oss anta at ventetiden til CDN-serveren er 30 ms. Deretter vil det ta 220 ms Ä motta den fÞrste biten:

Men fordelene slutter ikke der. NÄr en forbindelse er opprettet, Þker TCP overbelastningsvinduet (mengden informasjon den kan overfÞre over den forbindelsen parallelt). Hvis en datapakke gÄr tapt, reduserer klassiske implementeringer av TCP-protokollen (som TCP New Reno) det Äpne "vinduet" med det halve. Veksten av overbelastningsvinduet og hastigheten pÄ dets utvinning fra tap avhenger igjen av forsinkelsen (RTT) til serveren. Hvis denne tilkoblingen bare gÄr sÄ langt som til CDN-serveren, vil denne gjenopprettingen gÄ raskere. Samtidig er pakketap et standardfenomen, spesielt for trÄdlÞse nettverk.
Internett-bÄndbredden kan reduseres, spesielt i rushtiden, pÄ grunn av trafikk fra brukere, noe som kan fÞre til trafikkork. Imidlertid er det ingen mÄte pÄ Internett Ä prioritere noen forespÞrsler fremfor andre. Gi for eksempel prioritet til smÄ og latenssensitive forespÞrsler fremfor "tunge" datastrÞmmer som laster nettverket. Men i vÄrt tilfelle lar det Ä ha vÄrt eget ryggradsnettverk oss gjÞre dette pÄ en del av forespÞrselsbanen - mellom CDN og skyen, og vi kan konfigurere det fullt ut. Du kan sÞrge for at smÄ og latenssensitive pakker blir prioritert, og store dataflyter gÄr litt senere. Jo nÊrmere CDN er klienten, jo stÞrre effektivitet.
Protokoller pÄ applikasjonsnivÄ (OSI Level 7) har ogsÄ innvirkning pÄ latens. Nye protokoller som HTTP/2 optimerer ytelsen til parallelle forespÞrsler. Imidlertid har vi Netflix-klienter med eldre enheter som ikke stÞtter de nye protokollene. Ikke alle klienter kan oppdateres eller konfigureres optimalt. Samtidig er det mellom CDN-proxyen og skyen full kontroll og muligheten til Ä bruke nye, optimale protokoller og innstillinger. Den ineffektive delen med gamle protokoller vil kun fungere mellom klienten og CDN-serveren. Dessuten kan vi lage multiplekse forespÞrsler pÄ en allerede etablert forbindelse mellom CDN og skyen, og forbedre tilkoblingsutnyttelsen pÄ TCP-nivÄ:

Vi mÄler
Til tross for at teorien lover forbedringer, haster vi ikke umiddelbart med Ä lansere systemet i produksjon. I stedet mÄ vi fÞrst bevise at ideen vil fungere i praksis. For Ä gjÞre dette mÄ du svare pÄ flere spÞrsmÄl:
- Fart: vil en proxy vĂŠre raskere?
- PÄlitelighet: Vil den gÄ i stykker oftere?
- Kompleksitet: hvordan integrere med applikasjoner?
- Koste: Hvor mye koster det Ă„ distribuere ekstra infrastruktur?
La oss vurdere i detalj vÄr tilnÊrming til Ä vurdere det fÞrste punktet. Resten behandles pÄ lignende mÄte.
For Ä analysere hastigheten pÄ forespÞrsler Þnsker vi Ä skaffe data for alle brukere, uten Ä bruke mye tid pÄ utvikling og uten Ä bryte produksjonen. Det er flere tilnÊrminger for dette:
- RUM, eller passiv forespÞrselsmÄling. Vi mÄler gjennomfÞringstiden for aktuelle forespÞrsler fra brukere og sikrer full brukerdekning. Ulempen er at signalet er lite stabilt pÄ grunn av mange faktorer, for eksempel pÄ grunn av ulike forespÞrselsstÞrrelser, behandlingstid pÄ server og klient. I tillegg kan du ikke teste en ny konfigurasjon uten effekt i produksjonen.
- Laboratorietester. Spesielle servere og infrastruktur som simulerer klienter. Med deres hjelp utfÞrer vi de nÞdvendige testene. PÄ denne mÄten fÄr vi full kontroll over mÄleresultatene og et tydelig signal. Men det er ingen fullstendig dekning av enheter og brukerplasseringer (spesielt med en verdensomspennende tjeneste og stÞtte for tusenvis av enhetsmodeller).
Hvordan kan du kombinere fordelene med begge metodene?
Teamet vĂ„rt har funnet en lĂžsning. Vi skrev en liten kodebit â en prĂžve â som vi bygde inn i applikasjonen vĂ„r. Prober lar oss utfĂžre fullstendig kontrollerte nettverkstester fra enhetene vĂ„re. Det fungerer slik:
- Kort tid etter at applikasjonen er lastet inn og den fĂžrste aktiviteten er fullfĂžrt, kjĂžrer vi sonder.
- Klienten sender en forespÞrsel til serveren og mottar en "oppskrift" for testen. Oppskriften er en liste over URL-er som en HTTP(e)-forespÞrsel mÄ sendes til. I tillegg konfigurerer oppskriften forespÞrselsparametere: forsinkelser mellom forespÞrsler, mengde forespurte data, HTTP(e)-header, etc. Samtidig kan vi teste flere forskjellige oppskrifter parallelt - nÄr vi ber om en konfigurasjon, bestemmer vi tilfeldig hvilken oppskrift som skal utstedes.
- Probelanseringstiden velges for ikke Ä komme i konflikt med aktiv bruk av nettverksressurser pÄ klienten. I hovedsak velges tidspunktet nÄr klienten ikke er aktiv.
- Etter Ä ha mottatt oppskriften, sender klienten forespÞrsler til hver av URL-ene, parallelt. ForespÞrselen til hver av adressene kan gjentas - den sÄkalte. "pulser". PÄ fÞrste puls mÄler vi hvor lang tid det tok Ä opprette en forbindelse og laste ned data. PÄ den andre pulsen mÄler vi tiden det tar Ä laste data over en allerede etablert forbindelse. FÞr den tredje kan vi stille inn en forsinkelse og mÄle hastigheten for Ä etablere en gjentilkobling osv.
Under testen mÄler vi alle parameterne som enheten kan oppnÄ:
- DNS-forespĂžrselstid;
- Oppsetttid for TCP-tilkobling;
- Oppsetttid for TLS-tilkobling;
- tidspunkt for mottak av den fĂžrste byten med data;
- total lastetid;
- status resultatkode.
- Etter at alle pulser er fullfÞrt, laster prÞven alle mÄlinger for analyse.

NÞkkelpunktene er minimal avhengighet av logikk pÄ klienten, databehandling pÄ serveren og mÄling av parallelle forespÞrsler. Dermed er vi i stand til Ä isolere og teste pÄvirkningen av ulike faktorer som pÄvirker sÞkeytelsen, variere dem innenfor en enkelt oppskrift og fÄ resultater fra ekte kunder.
Denne infrastrukturen har vist seg nyttig for mer enn bare analyse av spÞrringsytelse. For Þyeblikket har vi 14 aktive oppskrifter, mer enn 6000 prÞver per sekund, som mottar data fra alle verdenshjÞrner og full enhetsdekning. Hvis Netflix kjÞpte en lignende tjeneste fra en tredjepart, ville det koste millioner av dollar i Äret, med mye dÄrligere dekning.
Testteori i praksis: prototype
Med et slikt system var vi i stand til Ä evaluere effektiviteten til CDN-proxyer pÄ forespÞrselsforsinkelse. NÄ trenger du:
- lage en proxy-prototype;
- plasser prototypen pÄ en CDN;
- bestemme hvordan klienter skal dirigeres til en proxy pÄ en spesifikk CDN-server;
- Sammenlign ytelse med forespĂžrsler i AWS uten proxy.
Oppgaven er Ä evaluere effektiviteten til den foreslÄtte lÞsningen sÄ raskt som mulig. Vi valgte Go for Ä implementere prototypen pÄ grunn av tilgjengeligheten av gode nettverksbiblioteker. PÄ hver CDN-server installerte vi prototypeproxyen som en statisk binÊr for Ä minimere avhengigheter og forenkle integrasjonen. I den fÞrste implementeringen brukte vi standardkomponenter sÄ mye som mulig og mindre modifikasjoner for HTTP/2-tilkoblingspooling og forespÞrselsmultipleksing.
For Ä balansere mellom AWS-regioner brukte vi en geografisk DNS-database, den samme som ble brukt til Ä balansere klienter. For Ä velge en CDN-server for klienten bruker vi TCP Anycast for servere i Internet Exchange (IX). I dette alternativet bruker vi én IP-adresse for alle CDN-servere, og klienten vil bli dirigert til CDN-serveren med minst antall IP-hopp. I CDN-servere installert av Internett-leverandÞrer (ISP-er), har vi ikke kontroll over ruteren for Ä konfigurere TCP Anycast, sÄ vi bruker , som leder kunder til Internett-leverandÞrer for videostreaming.
SÄ vi har tre typer forespÞrselsstier: til skyen via det Äpne Internett, via en CDN-server i IX, eller via en CDN-server som ligger hos en Internett-leverandÞr. MÄlet vÄrt er Ä forstÄ hvilken vei som er bedre, og hva som er fordelen med en proxy, sammenlignet med hvordan forespÞrsler sendes til produksjon. For Ä gjÞre dette bruker vi et prÞvetakingssystem som fÞlger:

Hver av stiene blir et eget mÄl, og vi ser pÄ tiden vi fikk. For analyse kombinerer vi proxy-resultatene i én gruppe (velg den beste tiden mellom IX- og ISP-proxyer), og sammenligner dem med tidspunktet for forespÞrsler til skyen uten proxy:

Som du kan se, var resultatene blandede - i de fleste tilfeller gir proxyen en god hastighet, men det er ogsÄ et tilstrekkelig antall klienter som situasjonen vil forverres betydelig for.
Som et resultat gjorde vi flere viktige ting:
- Vi vurderte forventet ytelse av forespĂžrsler fra klienter til skyen via en CDN-proxy.
- Vi mottok data fra ekte kunder, fra alle typer enheter.
- Vi innsÄ at teorien ikke var 100 % bekreftet, og det fÞrste tilbudet med en CDN-proxy ville ikke fungere for oss.
- Vi tok ikke risiko - vi endret ikke produksjonskonfigurasjoner for klienter.
- Ingenting var Ăždelagt.
Prototype 2.0
SÄ tilbake til tegnebrettet og gjenta prosessen pÄ nytt.
Tanken er at i stedet for Ă„ bruke en 100 % proxy, skal vi bestemme den raskeste veien for hver klient, og vi vil sende forespĂžrsler dit â det vil si at vi skal gjĂžre det som kalles klientstyring.

Hvordan implementere dette? Vi kan ikke bruke logikk pÄ serversiden, fordi... MÄlet er Ä koble til denne serveren. Det mÄ vÊre en mÄte Ä gjÞre dette pÄ hos klienten. Og ideelt sett gjÞr dette med et minimum av kompleks logikk, for ikke Ä lÞse problemet med integrasjon med et stort antall klientplattformer.
Svaret er Ä bruke DNS. I vÄrt tilfelle har vi vÄr egen DNS-infrastruktur, og vi kan sette opp en domenesone som vÄre servere vil vÊre autoritÊre for. Det fungerer slik:
- Klienten sender en forespĂžrsel til DNS-serveren ved Ă„ bruke en vert, for eksempel api.netflix.xom.
- ForespÞrselen kommer til vÄr DNS-server
- DNS-serveren vet hvilken bane som er den raskeste for denne klienten og utsteder den tilsvarende IP-adressen.
LĂžsningen har en ekstra kompleksitet: autoritĂŠre DNS-leverandĂžrer ser ikke klientens IP-adresse og kan kun lese IP-adressen til den rekursive resolveren som klienten bruker.
Som et resultat mÄ vÄr autoritÊre resolver ikke ta en beslutning for en individuell klient, men for en gruppe klienter basert pÄ den rekursive resolveren.
For Ä lÞse det bruker vi de samme prÞvene, samler mÄleresultatene fra klienter for hver av de rekursive resolverne og bestemmer hvor vi skal sende denne gruppen av dem - en proxy gjennom IX ved hjelp av TCP Anycast, gjennom en ISP-proxy, eller direkte til skyen.
Vi fÄr fÞlgende system:

Den resulterende DNS-styringsmodellen lar deg dirigere klienter basert pÄ historiske observasjoner av hastigheten pÄ tilkoblinger fra klienter til skyen.
Igjen er spÞrsmÄlet hvor effektivt denne tilnÊrmingen vil fungere? For Ä svare bruker vi igjen sondesystemet vÄrt. Derfor konfigurerer vi presentatÞrkonfigurasjonen, der ett av mÄlene fÞlger retningen fra DNS-styring, det andre gÄr direkte til skyen (nÄvÊrende produksjon).

Som et resultat sammenligner vi resultatene og fÄr en vurdering av effektiviteten:

Som et resultat lĂŠrte vi flere viktige ting:
- Vi vurderte forventet ytelse av forespĂžrsler fra klienter til skyen ved hjelp av DNS Steering.
- Vi mottok data fra ekte kunder, fra alle typer enheter.
- Effektiviteten til den foreslÄtte ideen er bevist.
- Vi tok ikke risiko - vi endret ikke produksjonskonfigurasjoner for klienter.
- Ingenting var Ăždelagt.
NĂ„ om den vanskelige delen - vi lanserer den i produksjon
Den enkle delen er nÄ over - det er en fungerende prototype. NÄ er den vanskelige delen Ä lansere en lÞsning for all Netflix-trafikk, som distribueres til 150 millioner brukere, tusenvis av enheter, hundrevis av mikrotjenester og et produkt og infrastruktur i stadig endring. Netflix-servere mottar millioner av forespÞrsler per sekund, og det er lett Ä bryte tjenesten med uforsiktig handling. Samtidig Þnsker vi Ä rute trafikk dynamisk gjennom tusenvis av CDN-servere pÄ Internett, hvor noe endres og gÄr i stykker konstant og i det mest uleilige Þyeblikk.
Og med alt dette har teamet 3 ingeniĂžrer som er ansvarlige for utvikling, distribusjon og full stĂžtte for systemet.
Derfor vil vi fortsette Ă„ snakke om avslappende og sunn sĂžvn.
Hvordan fortsette utviklingen og ikke bruke all tid pÄ support? VÄr tilnÊrming er basert pÄ 3 prinsipper:
- Vi reduserer det potensielle omfanget av havari (eksplosjonsradius).
- Vi forbereder oss pĂ„ overraskelser â vi forventer at noe gĂ„r i stykker, til tross for testing og personlig erfaring.
- GrasiÞs nedbrytning - hvis noe ikke fungerer som det skal, bÞr det fikses automatisk, selv om det ikke er pÄ den mest effektive mÄten.
Det viste seg at i vÄrt tilfelle, med denne tilnÊrmingen til problemet, kan vi finne en enkel og effektiv lÞsning og betydelig forenkle systemstÞtten. Vi innsÄ at vi kunne legge til en liten kodebit til klienten og overvÄke for nettverksforespÞrselsfeil forÄrsaket av tilkoblingsproblemer. Ved nettverksfeil gjÞr vi en fallback direkte til skyen. Denne lÞsningen krever ikke betydelig innsats for kundeteamene, men reduserer risikoen for uventede sammenbrudd og overraskelser i stor grad for oss.
Til tross for fallback fĂžlger vi selvfĂžlgelig en klar disiplin under utviklingen:
- PrĂžveprĂžve.
- A/B-testing eller KanariĂžyene.
- Progressiv utrulling.
Med prĂžver er tilnĂŠrmingen beskrevet - endringer testes fĂžrst ved hjelp av en tilpasset oppskrift.
For kanaritesting mÄ vi fÄ sammenlignbare serverpar som vi kan sammenligne hvordan systemet fungerer pÄ fÞr og etter endringene. For Ä gjÞre dette, fra vÄre mange CDN-nettsteder, velger vi serverpar som mottar sammenlignbar trafikk:

Deretter installerer vi bygget med endringene pĂ„ Canary-serveren. For Ă„ evaluere resultatene kjĂžrer vi et system som sammenligner omtrent 100â150 beregninger med et utvalg av kontrollservere:

Hvis Canary-testingen er vellykket, slipper vi den gradvis, i bÞlger. Vi oppdaterer ikke servere pÄ hver side samtidig - Ä miste en hel side pÄ grunn av problemer har en stÞrre innvirkning pÄ tjenesten for brukere enn Ä miste samme antall servere pÄ forskjellige steder.
Generelt avhenger effektiviteten og sikkerheten til denne tilnÊrmingen av kvantiteten og kvaliteten pÄ de innsamlede beregningene. For sÞkeakselerasjonssystemet vÄrt samler vi inn beregninger fra alle mulige komponenter:
- fra klienter - antall Ăžkter og forespĂžrsler, reservefrekvenser;
- proxy - statistikk over antall og tidspunkt for forespĂžrsler;
- DNS - antall og resultater av forespĂžrsler;
- cloud edge - antall og tid for behandling av forespĂžrsler i skyen.
Alt dette samles i én enkelt pipeline, og avhengig av behovene bestemmer vi hvilke beregninger som skal sendes til sanntidsanalyse, og hvilke til Elasticsearch eller Big Data for mer detaljert diagnostikk.
Vi overvÄker

I vÄrt tilfelle gjÞr vi endringer pÄ den kritiske banen for forespÞrsler mellom klienten og serveren. Samtidig er antallet forskjellige komponenter pÄ klienten, pÄ serveren og pÄ veien gjennom Internett enormt. Endringer pÄ klienten og serveren skjer konstant - under arbeidet til dusinvis av team og naturlige endringer i Þkosystemet. Vi er i midten - nÄr vi diagnostiserer problemer, er det en god sjanse for at vi blir involvert. Derfor mÄ vi tydelig forstÄ hvordan vi definerer, samler inn og analyserer beregninger for raskt Ä isolere problemer.
Ideelt sett full tilgang til alle typer beregninger og filtre i sanntid. Men det er mange beregninger, sÄ spÞrsmÄlet om kostnad oppstÄr. I vÄrt tilfelle skiller vi beregninger og utviklingsverktÞy som fÞlger:

For Ä oppdage og triage problemer bruker vi vÄrt eget Äpen kildekode sanntidssystem О - for visualisering. Den lagrer aggregerte beregninger i minnet, er pÄlitelig og integreres med varslingssystemet. For lokalisering og diagnostikk har vi tilgang til logger fra Elasticsearch og Kibana. For statistisk analyse og modellering bruker vi big data og visualisering i Tableau.
Det ser ut til at denne tilnĂŠrmingen er svĂŠrt vanskelig Ă„ jobbe med. Men ved Ă„ organisere beregninger og verktĂžy hierarkisk, kan vi raskt analysere et problem, bestemme typen problem og deretter se nĂŠrmere pĂ„ detaljerte beregninger. Generelt bruker vi omtrent 1-2 minutter pĂ„ Ă„ identifisere kilden til sammenbruddet. Etter dette jobber vi med et spesifikt team om diagnostikk â fra titalls minutter til flere timer.
Selv om diagnosen stilles raskt, Þnsker vi ikke at dette skal skje ofte. Ideelt sett vil vi bare motta et kritisk varsel nÄr det er en betydelig innvirkning pÄ tjenesten. For sÞkeakselerasjonssystemet vÄrt har vi bare to varsler som vil varsle:
- Client Fallback-prosent - vurdering av kundeadferd;
- prosent sondefeil - stabilitetsdata for nettverkskomponenter.
Disse kritiske varslene overvÄker om systemet fungerer for de fleste brukere. Vi ser pÄ hvor mange kunder som brukte fallback hvis de ikke var i stand til Ä fÄ forespÞrselsakselerasjon. Vi gjennomsnittlig mindre enn 1 kritisk varsling per uke, selv om det er massevis av endringer pÄ gang i systemet. Hvorfor er dette nok for oss?
- Det er et tilbakefall av klienten hvis proxyen vÄr ikke fungerer.
- Det er et automatisk styresystem som reagerer pÄ problemer.
Flere detaljer om sistnevnte. VÄrt prÞvesystem, og systemet for automatisk Ä bestemme den optimale banen for forespÞrsler fra klienten til skyen, lar oss automatisk takle noen problemer.
La oss gÄ tilbake til vÄr eksempelkonfigurasjon og 3 banekategorier. I tillegg til lastetid kan vi se pÄ selve leveringen. Hvis det ikke var mulig Ä laste inn dataene, kan vi ved Ä se pÄ resultatene langs forskjellige baner finne ut hvor og hva som brÞt, og om vi automatisk kan fikse det ved Ä endre forespÞrselsbanen.
Eksempler:



Denne prosessen kan automatiseres. Ta den med i styresystemet. Og lÊr den Ä reagere pÄ ytelses- og pÄlitelighetsproblemer. Hvis noe begynner Ä gÄ i stykker, reager hvis det er et bedre alternativ. Samtidig er en umiddelbar reaksjon ikke kritisk, takket vÊre tilbakefall pÄ klienter.
Derfor kan prinsippene for systemstĂžtte formuleres som fĂžlger:
- redusere omfanget av sammenbrudd;
- samle inn beregninger;
- Vi reparerer automatisk havari hvis vi kan;
- hvis det ikke kan, varsler vi deg;
- Vi jobber med dashbord og triage-verktĂžysett for rask respons.
LĂŠrdom
Det tar ikke mye tid Ä skrive en prototype. I vÄrt tilfelle var den klar etter 4 mÄneder. Med den fikk vi nye mÄlinger, og 10 mÄneder etter utviklingsstart fikk vi den fÞrste produksjonstrafikken. SÄ begynte det kjedelige og svÊrt vanskelige arbeidet: Produktiser og skaler systemet gradvis, migrér hovedtrafikken og lÊr av feil. Denne effektive prosessen vil imidlertid ikke vÊre lineÊr - til tross for all innsats, kan ikke alt forutsies. Det er mye mer effektivt Ä raskt gjenta og svare pÄ nye data.

Basert pÄ vÄr erfaring kan vi anbefale fÞlgende:
- Ikke stol pÄ intuisjonen din.
Intuisjonen vÄr sviktet oss hele tiden, til tross for teammedlemmenes enorme erfaring. For eksempel spÄdde vi feil forventet hastighetsÞkning fra bruk av en CDN-proxy, eller oppfÞrselen til TCP Anycast.
- FĂ„ data fra produksjonen.
Det er viktig Ä fÄ tilgang til minst en liten mengde produksjonsdata sÄ raskt som mulig. Det er nesten umulig Ä fÄ tak i antall unike tilfeller, konfigurasjoner og innstillinger under laboratorieforhold. Rask tilgang til resultatene lar deg raskt lÊre om potensielle problemer og ta hensyn til dem i systemarkitekturen.
- Ikke fĂžlg andres rĂ„d og resultater â samle inn dine egne data.
FĂžlg prinsippene for innsamling og analyse av data, men aksepter ikke blindt andres resultater og utsagn. Bare du kan vite nĂžyaktig hva som fungerer for brukerne dine. Dine systemer og dine kunder kan vĂŠre vesentlig forskjellige fra andre selskaper. Heldigvis er analyseverktĂžy nĂ„ tilgjengelige og enkle Ă„ bruke. Resultatene du fĂ„r er kanskje ikke det Netflix, Facebook, Akamai og andre selskaper hevder. I vĂ„rt tilfelle avviker ytelsen til TLS, HTTP2 eller statistikk pĂ„ DNS-forespĂžrsler fra resultatene til Facebook, Uber, Akamai â fordi vi har forskjellige enheter, klienter og dataflyter.
- Ikke fĂžlg motetrender unĂždvendig og vurder effektiviteten.
Start enkelt. Det er bedre Ä lage et enkelt fungerende system pÄ kort tid enn Ä bruke mye tid pÄ Ä utvikle komponenter som du ikke trenger. LÞs oppgaver og problemer som betyr noe basert pÄ dine mÄlinger og resultater.
- GjĂžr deg klar for nye applikasjoner.
Akkurat som det er vanskelig Ä forutsi alle problemene, er det vanskelig Ä forutsi fordelene og anvendelsene pÄ forhÄnd. Ta en pekepinn fra startups - deres evne til Ä tilpasse seg kundenes forhold. I ditt tilfelle kan du oppdage nye problemer og deres lÞsninger. I prosjektet vÄrt har vi satt et mÄl om Ä redusere forespÞrselsforsinkelse. Under analysen og diskusjonene innsÄ vi imidlertid at vi ogsÄ kan bruke proxy-servere:
- Ä balansere trafikk pÄ tvers av AWS-regioner og redusere kostnadene;
- Ă„ modellere CDN-stabilitet;
- Ă„ konfigurere DNS;
- for Ă„ konfigurere TLS/TCP.
Konklusjon
I rapporten beskrev jeg hvordan Netflix lÞser problemet med Ä akselerere Internett-forespÞrsler mellom klienter og skyen. Hvordan vi samler inn data ved hjelp av et prÞvetakingssystem pÄ klienter, og bruker de innsamlede historiske dataene til Ä rute produksjonsforespÞrsler fra klienter gjennom den raskeste banen pÄ Internett. Hvordan vi bruker prinsippene for nettverksprotokoller, vÄr CDN-infrastruktur, ryggradsnettverk og DNS-servere for Ä oppnÄ denne oppgaven.
LÞsningen vÄr er imidlertid bare et eksempel pÄ hvordan vi i Netflix implementerte et slikt system. Hva fungerte for oss. Den anvendte delen av rapporten min for deg er prinsippene for utvikling og stÞtte som vi fÞlger og oppnÄr gode resultater.
VÄr lÞsning pÄ problemet passer kanskje ikke deg. Teorien og designprinsippene bestÄr imidlertid, selv om du ikke har din egen CDN-infrastruktur, eller om den skiller seg vesentlig fra vÄr.
Viktigheten av hastigheten pÄ forretningsforespÞrsler er fortsatt viktig. Og selv for en enkel tjeneste mÄ du ta et valg: mellom skyleverandÞrer, serverplassering, CDN- og DNS-leverandÞrer. Ditt valg vil pÄvirke effektiviteten til Internett-sÞk for kundene dine. Og det er viktig for deg Ä mÄle og forstÄ denne pÄvirkningen.
Start med enkle lÞsninger, bry deg om hvordan du endrer produktet. LÊr mens du gÄr og forbedre systemet basert pÄ data fra kundene dine, infrastrukturen din og virksomheten din. Tenk pÄ muligheten for uventede sammenbrudd under designprosessen. Og sÄ kan du Þke hastigheten pÄ utviklingsprosessen, forbedre lÞsningseffektiviteten, unngÄ unÞdvendig stÞttebelastning og sove rolig.
dette Äret i nettformat. Du kan stille spÞrsmÄl til en av fedrene til DevOps, selveste John Willis!
Kilde: www.habr.com
