Automatiniai jungikliai ir grakštus degradavimas yra du vienas kitą papildantys būdai kurti atsparias paskirstytas sistemas: automatiniai jungikliai apsaugo nuo kaskadinių gedimų, sustabdydami užklausas netinkamoms paslaugoms, o grakštus degradavimas užtikrina dalinį funkcionalumą, kai sugenda tolesnės priklausomybės.
Akcentai
Automatiniai jungikliai aktyviai užkerta kelią gedimų plitimui stebėdami ir blokuodami nesveiką srautą, o grakštus gedimų mažinimas pasyviai prisitaiko, kad išlaikytų dalinį aptarnavimą.
Jungiklio schemai reikalingas aiškus būsenos valdymas ir slenksčių derinimas, todėl teisingas jos įgyvendinimas reikalauja daugiau infrastruktūros.
Grakštus degradavimas reikalauja gilesnių programos lygio pakeitimų, tačiau suteikia geresnę naudotojo patirtį dalinių sutrikimų metu.
Šie modeliai vienas kitą papildo, o ne konkuruoja; „Netflix“, „Amazon“ ir „Google“ plačiai naudoja abu savo architektūrose.
Kas yra Grandinės pertraukikliai?
Gedimų toleravimo modelis, kuris stebi paslaugos būklę ir automatiškai blokuoja užklausas sugedusiems komponentams, kad būtų išvengta sistemos perkrovos.
Automatinio jungiklio modelį išpopuliarino Michaelas Nygardas savo 2007 m. knygoje „Release It!“, ir nuo to laiko jis tapo mikropaslaugų architektūros pagrindu.
Automatinį jungiklio veikimą apibrėžia trys skirtingos būsenos: uždaryta (normalus veikimas), atidaryta (nedelsiant pašalinamos užklausos) ir pusiau atidaryta (tikrinamas atkūrimas).
„Netflix“ „Hystrix“ biblioteka, išleista 2012 m., sulaukė didelio populiarumo, o 2018 m. buvo perkelta į techninės priežiūros režimą; dabar dominuoja alternatyvos, tokios kaip „Resilience4j“ ir „Sentinel“.
Automatiniai jungikliai paprastai naudoja slankiojančio lango skaitiklius arba eksponentinius atsilikimo algoritmus, kad nustatytų, kada pereiti iš vienos būsenos į kitą, su konfigūruojamomis gedimų dažnio ir skirtojo laiko trukmės ribomis.
„Amazon Web Services“ Taivano komandos pirmoji įdiegė automatinius jungiklius „AWS Lambda“ ir „API Gateway“ sistemose, dokumentuotais atvejais sumažindamos klientų elektros energijos tiekimo sutrikimų skaičių daugiau nei 60 %.
Kas yra Grakštus pažeminimas?
Projektavimo filosofija, užtikrinanti, kad sistemos išlaikytų sumažintą, bet prasmingą funkcionalumą, kai komponentai ar priklausomybės tampa nepasiekiami.
Grakštus degradavimas atsirado mechanikos ir elektrotechnikos inžinerijoje prieš programinės įrangos diegimą, o ankstyvieji skaičiavimo pavyzdžiai datuojami NASA „Apollo“ valdymo kompiuteriu, kuris teikė pirmenybę svarbiausioms funkcijoms esant išteklių apribojimams.
Garsioji „Twitter“ „nesėkmingo banginio“ era (2007–2011 m.) demonstravo prastą, grakštų degradavimą, paskatinusį visiškai perrašyti architektūrą, kurioje skaitymo prieinamumas buvo prioritetas, o ne rašymo nuoseklumas piko metu.
Šiuolaikiniai turinio pateikimo tinklai, tokie kaip „Cloudflare“ ir „Fastly“, įgyvendina grakštų degradavimą naudodami talpyklą, kai turinys vėl patvirtinamas, ir pateikia pasenusį turinį, o ne neveikia, kai jo kilmė nepasiekiama.
„Google“ paieškos infrastruktūra sąmoningai menkina neesmines funkcijas – suasmeninimą, rezultatus realiuoju laiku, išsamias išnašas – kad išlaikytų pagrindinį užklausų apdorojimą regioninių sutrikimų metu.
Praktinis CAP teoremos taikymas dažnai reikalauja grakštaus degradavimo, nes sistemos, renkantis skaidymo toleranciją ir prieinamumą, o ne nuoseklumą, turi susidoroti su laikinu nenuoseklumu be visiško gedimo.
Palyginimo lentelė
Funkcija
Grandinės pertraukikliai
Grakštus pažeminimas
Pagrindinis tikslas
Išvenkite kaskadinių gedimų sustabdydami srautą į netinkamas paslaugas
Išlaikyti dalinį funkcionalumą, kai priklausomybės neveikia
Gedimo atsakas
Greitai blokuokite užklausas ir laikinai juos blokuokite
Toliau dirbti su sumažintomis galimybėmis
Naudotojo patirtis
Vartotojai klaidas mato iš karto, tačiau sistema išlieka stabili
Vartotojai gauna prastesnę, bet funkcionalią patirtį
Įgyvendinimo sluoksnis
Paprastai tinklo / kliento riboje (API šliuzai, paslaugų tinklai)
Apima programos logiką, vartotojo sąsają ir duomenų sluoksnius
Numanomas gebėjimų sumažinimas be oficialių būsenų
Tipinis delsos poveikis
Minimalios išlaidos sveikatos patikrinimams ir būsenos stebėjimui
Kintamas; gali padidėti dėl atsarginio apdorojimo
Geriausia derinti su
Pakartotinio bandymo politika, pertvaros, skirtasis laikas
Funkcijų žymės, kaupimo strategijos, apkrovos mažinimas
Išsamus palyginimas
Pagrindinė filosofija ir dizaino tikslas
Automatiniai jungikliai užima apsauginę poziciją sistemos sveikatos atžvilgiu, traktuodami gedimus sukeliančias priklausomybes kaip užkrečiamas grėsmes, kurias reikia izoliuoti. Ši filosofija remiasi prielaida, kad sutrikdžius sistemos veikimą, ji galiausiai greičiau atsigauna. Priešingai, grakštus degradavimas priima netobulumą kaip neišvengiamą ir klausia, kiek vertės dar galima išgauti iš iš dalies sugedusios sistemos. Kai automatiniai jungikliai sako „stop“, grakštus degradavimas sako „prisitaikyti“.
Vartotojo poveikis ir suvokiamas patikimumas
Suveikus automatiniam jungikliui, vartotojai paprastai mato aiškias klaidas arba atsarginius atsakymus, kurie gali kelti nerimą, tačiau padeda išvengti blogesnių pasekmių, tokių kaip visiškas sistemos neprieinamumas. Grakštus kokybės pablogėjimas siekia padaryti problemas nematomas, nors išmanantys vartotojai gali pastebėti trūkstamas funkcijas arba lėtesnius atsakymus. „Netflix“ vaizdo grotuvo srauto kokybės mažinimas esant pralaidumo apribojimams yra grakštaus kokybės pablogėjimo, kuris atrodo sklandus, pavyzdys, o mokėjimo paslaugos automatinis jungiklis, grąžinantis 503 klaidas, yra sąmoningai akivaizdus.
Veiklos sudėtingumas ir priežiūra
Automatiniai jungikliai reikalauja kruopštaus slenksčių derinimo, kurios skiriasi skirtingose paslaugose ir keičiasi laikui bėgant; per jautrus nustatymas sukelia klaidingus teigiamus rezultatus, per švelnus – nepastebimos tikros problemos. „Shopify“ ir „Uber“ komandos daug rašė apie šimtų automatinių jungiklių konfigūracijų priežiūros operacinę naštą. Grakštus degradavimas padidina kodo sudėtingumą dėl kelių vykdymo kelių ir atsarginių diegimų, tačiau kiekvienas kelias paprastai yra statinis ir testuojamas, o ne dinamiškai konfigūruojamas.
Integracija su moderniais debesijos pagrindu veikiančiais paketais
Tokie paslaugų tinklai kaip „Istio“ ir „Linkerd“ infrastruktūros lygmenyje supaprastino grandinių pertraukimus, leisdami platformų komandoms įgyvendinti politikas nekeičiant programų. Grakštus degradavimas išlieka daugiausia programų problema, nors serverių neturinčios platformos ir periferiniai skaičiavimai pradeda siūlyti primityvius atsarginius mechanizmus. Dėl šio skirtumo grandinių pertraukikliai vis labiau tampa „nemokami“ su tinkama infrastruktūra, o gražus degradavimas vis dar reikalauja apgalvotų inžinerinių investicijų.
Gedimo režimo aprėptis
Automatiniai jungikliai puikiai susidoroja su delsos šuoliais, ryšio skirtojo laiko pabaigomis ir klaidų kaskadomis sinchroninėse užklausų grandinėse. Jie suteikia ribotą vertę asinchroniniam apdorojimui arba kai gedimai yra momentiniai, o ne pablogina būklę. Grakštus gedimų šalinimas išryškėja, kai konkrečias funkcijas galima išjungti arba supaprastinti, tačiau jos negali apsaugoti nuo visiško išteklių išeikvojimo ar visiško priklausomybės nebuvimo. Daugeliui gamybinių incidentų reikalingi abu dalykai: automatiniai jungikliai, kad būtų sustabdytas gedimų skaičius, ir grakštus gedimų šalinimas, kad būtų palaikoma paslauga, kol vyksta atkūrimas.
Privalumai ir trūkumai
Grandinės pertraukikliai
Privalumai
+Apsaugo nuo kaskadinių gedimų
+Greitas gedimas sumažina išteklių švaistymą
+Automatinis atkūrimo aptikimas
+būtina mikropaslaugoms
+Gerai palaikoma infrastruktūros įrankių
Pasirinkta
−Vartotojai iš karto mato klaidas
−Slenksčio derinimas yra linkęs į klaidas
−Gali užmaskuoti pagrindines problemas
−Prideda delsos sąnaudas
Grakštus pažeminimas
Privalumai
+Aukščiausios kokybės naudotojo patirtis
+Išsaugo pajamas sutrikimų metu
+Lankstus funkcijų prioritetizavimas
+Sumažina avarinį spaudimą
Pasirinkta
−Sudėtinga atsarginė logika
−Testavimo matrica sprogsta
−Gali slėpti rimtas problemas
−Sunkiau įgyvendinti atgaline data
Dažni klaidingi įsitikinimai
Mitas
Grandinės pertraukikliai ir grakštus degradavimas išsprendžia tą pačią problemą ir yra keičiami.
Realybė
Šie modeliai skirti skirtingiems gedimų etapams. Automatiniai jungikliai valdo ūmią priklausomybės gedimo krizę, o grakštus degradavimas – lėtinę sumažėjusio pajėgumo būseną. Sistema be automatinių jungiklių gali sugriūti dar prieš aktyvuojant grakštų degradavimą, o grakštus degradavimas be automatinių jungiklių gali išeikvoti išteklius, bandant kompensuoti iš esmės nutrūkusias priklausomybes.
Mitas
Automatiniai jungikliai yra svarbūs tik mikropaslaugų architektūroms.
Realybė
Nors mikropaslaugos išpopuliarino automatinius jungiklius, šis modelis taikomas, kai komponentai bendrauja per nepatikimas ribas. Monolitinės programos, iškviečiančios išorines API, duomenų bazes su ryšio apribojimais ar net vidinius gijų telkinius, gali būti naudingos. 2010-ųjų mikropaslaugų banga tiesiog išryškino poreikį dėl padidėjusio tinklo šuolių skaičiaus.
Mitas
Grakštus degradavimas reiškia sąmoningą žemos kokybės funkcijų kūrimą.
Realybė
Efektyviam grakščiam degradavimui reikia suprasti funkcijų kritiškumą ir naudotojų vertės hierarchijas, o ne susitaikyti su vidutinybėmis. Sudėtingiausi diegimai, tokie kaip „LinkedIn“ ir „Airbnb“, dinamiškai degraduoja pagal realaus laiko pajėgumus ir verslo prioritetus, kartais teikdami patirtis, kurios nesiskiria nuo pilno funkcionalumo neprioritetiniams naudotojams, tuo pačiu išsaugant pajėgumus svarbiausioms operacijoms.
Mitas
Įdiegus automatinius jungiklius, jiems reikia mažai nuolatinio dėmesio.
Realybė
Automatinių jungiklių konfigūracijos blogėja be priežiūros. Keičiasi paslaugų delsos bazinės linijos, kinta srauto modeliai, o anksčiau tinkamos ribos tampa pavojingai neteisingai kalibruotos. „Netflix“ ir „Gremlin“ taikomi chaoso inžinerijos metodai aiškiai tikrina automatinių jungiklių efektyvumą ir atskleidžia, kad nesuderinti jungikliai dažnai tampa arba visam laikui atidaryti (blokuodami sveiką srautą), arba užstringa uždaryti (leisdami gedimams praeiti).
Mitas
Grakštus degradavimas pirmiausia yra vartotojo sąsajos problema.
Realybė
Nors vartotojai galiausiai patiria sklandų degradavimą per sąsajas, didžiausią įtaką turi įdiegimai, prasidedantys duomenų ir paslaugų lygmenyse. Galinės sistemos, kurios sumažina užklausų sudėtingumą, perjungia į talpykloje saugomus agregatus arba išjungia nebūtiną indeksavimą, leidžia sklandžiai veikti priekinėje dalyje. Be galinės dalies palaikymo, tik priekinės dalies degradavimas tampa plonu sluoksniu, dengiančiu neveikiančias sistemas.
Dažnai užduodami klausimai
Ar grandinės pertraukikliai ir grakštus degradavimas gali veikti kartu toje pačioje sistemoje?
Žinoma, ir dažnai taip ir turėtų būti. Įprastas srautas apima grandinės pertraukiklius, kurie aptinka ir izoliuoja sugedusį mokėjimo procesorių, o tada aktyvuoja grakštų degradavimą, kad būtų galima atlikti pirkimus su atidėtu mokėjimo patvirtinimu arba saugomais mokėjimo būdais. „Amazon“ atsiskaitymo sistema yra šio modelio pavyzdys, kai grandinės pertraukikliai apsaugo atsargų paslaugas, o grakštus degradavimas leidžia užbaigti pirkimą su numatomomis pristatymo datomis, o ne realiojo laiko skaičiavimais.
Kaip nuspręsti, kada išjungti grandinės pertraukiklį, o kada jį tvarkingai pabloginti?
Sprendimas priklauso nuo to, ar nepavykęs komponentas yra būtinas pagrindiniam funkcionalumui. Jei rekomendacijų variklis sugenda, grakštus degradavimas pateikia bendrines rekomendacijas. Jei autentifikavimo paslauga sugenda, grakštus degradavimas paprastai neįmanomas – grandinės pertraukikliai turėtų greitai sugesti ir nukreipti į būsenos puslapį. Pagrindinė analizė susieja kiekvieną priklausomybę su „būtinomis“, „papildomomis“ arba „neprivalomomis“ kategorijomis, o būtinas priklausomybes apsaugo grandinės pertraukikliai, o kitas – grakštaus degradavimo strategijos.
Kokie rodikliai geriausiai parodo automatinio jungiklio efektyvumą?
Be pagrindinio atvirų/uždarytų būsenų skaičiaus, išmatuokite klaidingai teigiamų rezultatų rodiklį (neteisingai suaktyvintos geros būklės paslaugos), praleistų gedimų rodiklį (praeinančios netinkamos būklės paslaugos), atkūrimo laiką (vidutinį laiką nuo atidarymo iki uždarymo) ir poveikį verslui (pajamas arba užklausas, kurioms įtakos turi tiek atviros grandinės, tiek neatblokuoti gedimai). Pažangios „Stripe“ ir „Square“ komandos stebi „grandinės pertraukiklių efektyvumą“ kaip išvengtų gedimų ir vartotojams matomų klaidų santykį.
Kuo skiriasi grakštus degradavimas nuo paprastų klaidų ar trūkstamų funkcijų?
Grakštus degradavimas yra tyčinis, išbandytas ir grįžtamas. Kai funkcija tyčia išjungiama dėl priklausomybės gedimo, suveikia stebėjimo įspėjimai, aktyvuojami operacijų rinkiniai ir funkcija automatiškai grįžta, kai sveikatos patikrinimai sėkmingi. Atsitiktinai trūkstamos funkcijos neturi šių savybių, todėl dažnai lieka nepastebimos ir nesprendžiamos. Šis skirtumas yra svarbus atitikties ir patikimumo ataskaitoms – grakštus degradavimas yra kontroliuojama būsena, o ne klaida.
Kokie yra dažni anti-modeliai diegiant automatinius jungiklius?
Pavojingiausias anti-modelio trūkumas yra automatinių jungiklių įdiegimas be atsarginės logikos, paliekant vartotojams neapdorotas klaidas. Kiti pavyzdžiai: identiškų slenksčių naudojimas skirtingose paslaugose, pakartotinių bandymų audrų neatsižvelgimas, kai grandinės užsidaro, ir pusiau atviros būsenos testavimo nepaisymas. Kitas subtilus gedimas yra automatinių jungiklių kaskadinis veikimas, kai kelių sluoksnių jungikliai įsijungia vienu metu, sukeldami visos sistemos nepasiekiamumą, kurio būtų galima išvengti vienu tinkamai išdėstytu jungikliu.
Kuo šiuolaikiniai paslaugų tinklai įgyvendina grandinių nutraukimą kitaip nei programų bibliotekos?
Paslaugų tinklai, tokie kaip „Istio“, įgyvendina grandinių nutraukimą tinklo lygmenyje per „Envoy“ tarpinius serverius, nereikalaudami jokių programos kodo pakeitimų, tačiau siūlydami mažiau konteksto apie užklausų semantiką. Taikomųjų programų bibliotekos, tokios kaip „Resilience4j“, leidžia priimti verslo logika pagrįstus sprendimus – pavyzdžiui, skirtingus jungiklius mokamiems ir nemokamiems vartotojams. Kompromisas yra veikimo paprastumas ir semantinis tikslumas. Daugelis organizacijų naudoja abu: tinklo lygio jungiklius kaip plačią apsaugą ir programos lygio jungiklius svarbiems verslo keliams.
Kokį vaidmenį atlieka grakštus degradavimas optimizuojant sąnaudas?
Dėl grakštaus degradavimo paklausos šuolių metu gaunamas didelis sąnaudų taupymas. Tokios įmonės kaip „The New York Times“ ir „Spotify“ sumažina išlaidas debesijos technologijoms, o ne pritaikydamos infrastruktūrą pagal didžiausią paklausą, o teikdamos talpykloje saugomus arba supaprastintus atsakymus. Šis „degradacijos kaip sąnaudų kontrolės“ metodas reikalauja kruopštaus bendravimo su vartotojais ir paprastai taikomas ne pajamų generuojančioms funkcijoms, tačiau tai yra vis labiau paplitusi praktika pelno siekiančiose inžinerijos organizacijose.
Kaip komandos turėtų išbandyti grakščius degradacijos kelius?
Sugedusių kelių testavimas reikalauja tokio pat griežtumo kaip ir pagrindinių kelių testavimas, tačiau dažnai jam skiriama mažiau dėmesio. Veiksmingi metodai apima klaidų injekciją (chaoso inžineriją), priklausomybių imitavimą su gedimų scenarijais ir gamybinius tamsiuosius paleidimus, kai sugedę keliai aktyvuojami tam tikrai srauto daliai. „Netflix“ „ChAP“ („Chaos Automation Platform“) ir „Gremlin“ gedimų testavimas konkrečiai patvirtina sklandų degradavimą, o apkrovos testavimas su ribotais ištekliais atskleidžia degradavimo ribas.
Ar pasitaiko situacijų, kai automatiniai jungikliai padaro daugiau žalos nei naudos?
Jungikliai gali sustiprinti problemas tinklo pertvarų metu, kai jie negali atskirti paslaugos gedimo nuo ryšio problemų. Esant „suskaidyto smegenų“ scenarijams, jungikliai gali atsidaryti visose pertvaros pusėse, dėl ko sistema visiškai nepasiekiama, nors iš dalies veiktų. Jie taip pat sunkiai veikia su paslaugomis, kurioms būdingas didelis bazinis delsos kintamumas, dėl kurio dažnai įvyksta klaidingas atsijungimas. Finansinės prekybos sistemos ir sveikatos priežiūros kritinės priežiūros sistemos dėl šių rizikų kartais vengia jungiklių, pirmenybę teikdamos aiškiems rankiniams valdikliams.
Kaip grakštus degradavimas susijęs su laipsnišku žiniatinklio kūrimo tobulinimu?
Progresyvus tobulinimas kuria funkcionalumo sluoksnius nuo tvirto HTML pagrindo aukštyn, natūraliai sukurdamas grakštų degradacijos kelią – kai „JavaScript“ neveikia, pagrindinis turinys lieka pasiekiamas. Tačiau grakštus degradavimas paskirstytose sistemose apima ne tik naršyklę, bet ir serverio pusės komponentus, duomenų bazes bei išorines paslaugas. Filosofijos sutampa priimdamos kintamas galimybių aplinkas, tačiau grakštaus degradavimo apimtis yra platesnė ir apima serverio pusės gedimus, nematomus progresyvaus tobulinimo kliento pusės požiūriu.
Koks stebėjimas yra būtinas grandinės pertraukiklio būklei?
Stebėkite būsenos perėjimo dažnį (čirškimas rodo netinkamą konfigūraciją), laiką, praleistą atviroje būsenoje (užsitęsęs atidarymas rodo nuolatines problemas), atsarginio sprendimo sėkmės rodiklį ir koreliaciją su verslo rodikliais, tokiais kaip konversijų rodikliai. Prietaisų skyduose turėtų būti rodoma pertraukiklio būsena kartu su priklausomybių sveikatos rodikliais, kad būtų galima atskirti pertraukiklio sukeltas ir faktines aptarnavimo problemas. Įspėjimai apie pertraukiklio būsenos pokyčius, o ne tik apie atidarytas būsenas, padeda išvengti įspėjimų nuovargio ir kartu užtikrina informuotumą.
Kaip išlaikyti tvarkingo degradavimo galimybes sistemoms tobulėjant?
Degradacijos keliai be priežiūros sugenda. Kiekviena nauja funkcija turi būti aiškiai klasifikuojama kritiškumo hierarchijoje, o degradacijos logika turi būti įtraukta į atlikto apibrėžimo kriterijus. Automatiniai testavimo rinkiniai turėtų apimti degradacijos kelius, o incidentų analizės turėtų įvertinti, ar esamas degradacijos lygis buvo pakankamas. Kai kurios „Google“ ir „Amazon“ komandos tvarko „degradacijos vykdymo knygas“, kurios peržiūrimos kas ketvirtį, užtikrindamos, kad komandos prisimintų, kaip rankiniu būdu degraduoti, kai sugenda automatinės sistemos.
Nuosprendis
Rinkitės automatinius jungiklius, kai svarbiausia yra apsaugoti sistemos stabilumą nuo nepatikimų priklausomybių, ypač didelio našumo sinchroninėse paslaugų grandinėse. Pirmenybę teikite sklandžiam degradavimui, kai vartotojui skirtą funkcionalumą galima prasmingai suskirstyti į lygius, užtikrinant, kad pagrindinė vertė išliktų net ir tada, kai patobulinimai stringa. Brandžios sistemos paprastai naudoja abu, naudodami automatinius jungiklius kaip gynybinį perimetrą, o sklandus degradavimas išsaugo patirtį veikimo ribose.