Høst-, afkast- og skalerbare tolerante systemer: et resumé

Denne artikel præsenterer et resumé af papiret "Harvest, Yield, and Scalable Tolerant Systems" udgivet af Eric Brewer & Amando Fox i 1999. Alle citater, der ikke er tilskrevet, er fra dette papir.

Papiret handler om afvejningerne mellem konsistens og tilgængelighed (CAP) for store systemer. Det er meget let at pege på CAP og hævde, at intet system kan have konsistens og tilgængelighed.

Men der er en fangst. CAP er blevet misforstået på en række forskellige måder. Som Coda Hale forklarer i sit fremragende blogindlæg "Du kan ikke ofre partitionstolerance":

Af CAP-sætningens konsistens, tilgængelighed og partitionstolerance er partitionstolerance obligatorisk i distribuerede systemer. Du kan ikke vælge det. I stedet for CAP skal du overveje din tilgængelighed med hensyn til udbytte (procent af anmodninger besvaret med succes) og høst (procent af krævede data, der faktisk er inkluderet i svarene), og hvilken af ​​disse to dit system ofrer, når der opstår fejl.

Papiret fokuserer på at øge tilgængeligheden af ​​storskala systemer ved fejltolerance, indeslutning og isolering:

Vi antager, at klienter foretager forespørgsler til servere, i hvilket tilfælde der er mindst to målinger for korrekt adfærd: udbytte, hvilket er sandsynligheden for at udfylde en anmodning, og høst, som måler den brøkdel af de data, der afspejles i svaret, dvs. fuldstændigheden af ​​svaret på forespørgslen.

De to målinger, høst og udbytte kan sammenfattes som følger:

  • Høst : data svar / samlede data

    For eksempel: Hvis en af ​​knudepunkterne er nede i en klynge med 100 knudepunkter, er høsten 99% i fejlens varighed.

  • Udbytte : anmodninger afsluttet med succes / samlet antal anmodninger

    Bemærk: Udbyttet adskiller sig fra oppetid. Yield beskæftiger sig med antallet af anmodninger, ikke kun den gang, systemet ikke var i stand til at svare på anmodninger.

Papiret hævder, at der er visse systemer, der kræver perfekte svar på forespørgsler hver eneste gang. Der er også systemer, der tåler ufuldkomne svar en gang imellem.

For at øge den samlede tilgængelighed af vores systemer er vi nødt til nøje at tænke igennem den krævede konsistens og tilgængelighedsgarantier, den har brug for.

Handelshøst for afkast - sandsynlig tilgængelighed

Næsten alle systemer er sandsynlige, uanset om de er klar over det eller ej. Især ethvert system, der er 100% tilgængeligt under enkelte fejl, er sandsynligvis tilgængeligt generelt (da der er en ikke-nul sandsynlighed for flere fejl)

Papiret taler om forståelse af sandsynligheden for tilgængelighed. Dette hjælper med at forstå og begrænse virkningen af ​​fejl ved at træffe beslutninger om, hvad der skal være tilgængeligt, og hvilken slags fejl systemet kan håndtere.

De skitserer den lineære nedbrydning af høsten i tilfælde af flere knudefejl. Høsten er direkte proportional med antallet af noder, der fungerer korrekt. Derfor falder / øges det lineært.

To strategier foreslås for at øge udbyttet:

  1. Tilfældig distribution af data på noderne

    Hvis en af ​​knudepunkterne går ned, ændres ikke gennemsnittet og værste tilfælde fejladfærd. Men hvis fordelingen ikke er tilfældig, kan effekten af ​​en fejl variere afhængigt af datatypen.

    For eksempel, hvis kun en af ​​de noder, der er gemt information relateret til en brugers kontosaldo, falder, vil hele banksystemet ikke være i stand til at arbejde.

  2. Replikering af de vigtigste data

    Dette reducerer påvirkningen, hvis en af ​​noderne, der indeholder et undersæt med højprioritetsdata, går ned.

    Det forbedrer også høsten.

En anden bemærkelsesværdig observation i papiret er, at det er muligt at replikere alle dine data. Det gør ikke meget for at forbedre din høst / udbytte, men det øger driftsomkostningerne betydeligt. Dette skyldes, at internettet fungerer baseret på best-in-indsats-protokoller, som aldrig kan garantere 100% høst / udbytte.

Applikationsnedbrydning og ortogonale mekanismer

Den anden strategi fokuserer på fordelene ved ortogonalt systemdesign.

Det starter med at sige, at store systemer er sammensat af undersystemer, som ikke tåler fejl. Men de fejler på en måde, der gør det muligt for hele systemet at fortsætte med at fungere med en vis indvirkning på hjælpeprogrammet.

Den faktiske fordel er evnen til at tilvejebringe hvert delsystems tilstandsstyring separat, hvilket kun giver stærk konsistens eller vedvarende tilstand for de delsystemer, der har brug for det, ikke for hele applikationen. Besparelserne kan være betydelige, hvis kun et par små delsystemer kræver den ekstra kompleksitet.

Papiret siger, at ortogonale komponenter er helt uafhængige af hinanden. De har ingen kørselstidsinterface til andre komponenter, medmindre der er en konfigurationsinterface. Dette gør det muligt for hver enkelt komponent at fejle uafhængigt og minimerer dens indvirkning på det samlede system.

Sammensætning af ortogonale undersystemer flytter byrden ved at kontrollere for muligvis skadelige interaktioner fra runtime til kompileringstid, og implementering af ortogonale beskyttelsesmekanismer forbedrer robustheden for de runtime-interaktioner, der opstår, ved at give forbedret fejlindeslutning.

Målet med denne artikel var at motivere forskning inden for design af fejltolerante og stærkt tilgængelige storskalasystemer.

Også at tænke nøje på konsistensen og tilgængeligheden garanterer, at applikationen skal levere. Ud over afvejningerne er det i stand til at gøre med hensyn til høst mod udbytte.

Hvis du nød dette papir, skal du trykke på klappeknappen, så flere mennesker ser det. Tak skal du have.

PS - Hvis du er kommet så langt og gerne vil modtage en mail, når jeg udgiver et af disse indlæg, kan du tilmelde dig her.