Automātiskie slēdži un gracioza degradācija ir divas savstarpēji papildinošas pieejas elastīgu izkliedētu sistēmu veidošanai, kur automātiskie slēdži novērš kaskādes kļūmes, apturot pieprasījumus neveselīgiem pakalpojumiem, savukārt gracioza degradācija nodrošina daļēju funkcionalitāti, ja lejupējās atkarības neizdodas.
Iezīmes
Automātiskie slēdži aktīvi novērš kļūmju izplatīšanos, uzraugot un bloķējot neveselīgu datplūsmu, savukārt pakāpeniska degradācija pasīvi pielāgojas, lai uzturētu daļēju pakalpojumu.
Ķēdes slēdža shēmai ir nepieciešama skaidra stāvokļa pārvaldība un sliekšņa regulēšana, tāpēc tās pareiza ieviešana prasa lielāku infrastruktūras ietilpību.
Gracioza degradācija prasa dziļākas lietojumprogrammu līmeņa izmaiņas, bet piedāvā labāku lietotāja pieredzi daļēju pārtraukumu laikā.
Šie modeļi viens otru papildina, nevis konkurē; Netflix, Amazon un Google plaši izmanto abus savās arhitektūrās.
Kas ir Slēdži?
Kļūmju tolerances modelis, kas uzrauga pakalpojuma stāvokli un automātiski bloķē pieprasījumus bojātiem komponentiem, lai novērstu sistēmas pārslodzi.
Slēdža modeli popularizēja Maikls Naigards savā 2007. gada grāmatā “Release It!”, un kopš tā laika tas ir kļuvis par pamatu mikropakalpojumu arhitektūrās.
Ķēdes slēdzi definē trīs atšķirīgi stāvokļi: aizvērts (normāla darbība), atvērts (pieprasījumi nekavējoties tiek novērsti) un daļēji atvērts (pārbaude, vai ir notikusi atkopšana).
Netflix Hystrix bibliotēka, kas tika izlaista 2012. gadā, tika plaši izmantota, pirms 2018. gadā tā pārgāja apkopes režīmā; tagad dominē tādas alternatīvas kā Resilience4j un Sentinel.
Automātiskie slēdži parasti izmanto slīdošo logu skaitītājus vai eksponenciālus atpalicības algoritmus, lai noteiktu, kad pāriet starp stāvokļiem, ar konfigurējamām robežvērtībām kļūmju biežumam un taimauta ilgumam.
Amazon Web Services Taivānas komandas bija pirmās, kas ieviesa automātiskos ķēdes pārtraucējus AWS Lambda un API Gateway, dokumentētos gadījumos samazinot klientu elektroenerģijas padeves pārtraukumu izplatību par vairāk nekā 60 %.
Kas ir Gracioza degradācija?
Dizaina filozofija, kas nodrošina, ka sistēmas saglabā ierobežotu, bet jēgpilnu funkcionalitāti, kad komponenti vai atkarības kļūst nepieejamas.
Gracioza degradācija radās mašīnbūvē un elektrotehnikā pirms programmatūras ieviešanas, un agrīnie skaitļošanas piemēri datējami ar NASA Apollo vadības datoru, kas resursu ierobežojumu laikā prioritizēja kritiskās funkcijas.
Twitter slavenais “neveiksmju vaļu” laikmets (2007.–2011. g.) spilgti ilustrēja sliktu, graciozu degradāciju, izraisot pilnīgu arhitektūras pārrakstīšanu, kurā lasīšanas pieejamība tika prioritizēta, nevis rakstīšanas konsekvence maksimālās slodzes laikā.
Mūsdienu satura piegādes tīkli, piemēram, Cloudflare un Fastly, īsteno graciozu degradāciju, izmantojot novecojuša satura atkārtotas validēšanas kešatmiņu, tādējādi nodrošinot novecojušu saturu, nevis radot kļūmi, ja tā izcelsme nav sasniedzama.
Google meklēšanas infrastruktūra apzināti samazina nebūtisku funkciju — personalizācijas, reāllaika rezultātu un bagātināto fragmentu — kvalitāti, lai saglabātu pamata vaicājumu apstrādi reģionālu pārtraukumu laikā.
CAP teorēmas praktiskais pielietojums bieži vien prasa graciozu degradāciju, jo sistēmām, kas izvēlas sadalījuma toleranci un pieejamību, nevis konsekvenci, ir jātiek galā ar īslaicīgu neatbilstību bez pilnīgas kļūmes.
Salīdzinājuma tabula
Funkcija
Slēdži
Gracioza degradācija
Galvenais mērķis
Novērsiet kaskādes kļūmes, apturot datplūsmu uz neveselīgiem pakalpojumiem
Saglabāt daļēju funkcionalitāti, ja atkarības neizdodas
Neveiksmes reakcija
Ātri neizdodas un īslaicīgi bloķē pieprasījumus
Turpināt darboties ar samazinātām iespējām
Lietotāja pieredze
Lietotāji kļūdas redz uzreiz, bet sistēma paliek stabila
Lietotājiem tiek nodrošināta pasliktināta, bet funkcionāla pieredze
Ieviešanas slānis
Parasti tīkla/klienta robežās (API vārtejas, pakalpojumu tīkli)
Aptver lietojumprogrammu loģiku, lietotāja saskarni un datu slāņus
Valsts pārvaldība
Skaidra stāvokļa mašīna (aizvērta/atvērta/pusatvērta)
Netieša spēju samazināšana bez formāliem stāvokļiem
Tipiska latentuma ietekme
Minimāla pieskaitāmā summa veselības pārbaudēm un stāvokļa izsekošanai
Mainīgs; var palielināties rezerves apstrādes dēļ
Vislabāk kombinēt ar
Atkārtotas mēģinājuma politikas, starpsienas, taimauti
Funkciju karodziņi, kešatmiņas stratēģijas, slodzes samazināšana
Detalizēts salīdzinājums
Galvenā filozofija un dizaina nolūks
Automātiskie slēdži ieņem aizsargājošu nostāju attiecībā uz sistēmas veselību, uztverot atteices radošas atkarības kā lipīgus draudus, kas jāievieto karantīnā. Šī filozofija pieņem, ka darbības pārtraukuma nodrošināšana pakalpojumam, kas darbojas slikti, galu galā palīdz tam ātrāk atgūties. Turpretī gracioza degradācija pieņem nepilnības kā neizbēgamas un jautā, cik daudz vērtības joprojām var iegūt no daļēji bojātas sistēmas. Turpretī automātiskās slēdži saka “apstāties”, gracioza degradācija saka “pielāgoties”.
Lietotāja ietekme un uztvertā uzticamība
Lietotāji, kas saskaras ar aktivizētu ķēdes pārtraucēju, parasti redz tiešas kļūdas vai rezerves atbildes, kas var šķist traucējošas, bet novērš sliktākus rezultātus, piemēram, pilnīgu sistēmas nepieejamību. Gracioza degradācija ir paredzēta, lai padarītu problēmas neredzamas, lai gan prasmīgi lietotāji var pamanīt trūkstošas funkcijas vai lēnākas atbildes. Netflix video atskaņotājs, kas samazina straumes kvalitāti joslas platuma ierobežojumu laikā, ir graciozas degradācijas piemērs, kas šķiet nemanāma, savukārt maksājumu pakalpojuma ķēdes pārtraucēja atgriežamā 503. kļūda ir apzināti acīmredzama.
Darbības sarežģītība un uzturēšana
Automātiskajiem slēdžiem nepieciešama rūpīga robežvērtību regulēšana, kas dažādos pakalpojumos atšķiras un mainās laika gaitā; pārāk jutīgi sliekšņi rada viltus pozitīvus rezultātus, pārāk jutīgi sliekšņi — nepamana reālas problēmas. Shopify un Uber komandas ir plaši rakstījušas par simtiem automātisko slēdžu konfigurāciju uzturēšanas operacionālo slogu. Gracioza degradācija rada koda sarežģītību, izmantojot vairākus izpildes ceļus un rezerves ieviešanas, taču katrs ceļš parasti ir statisks un pārbaudāms, nevis dinamiski konfigurēts.
Integrācija ar modernām mākoņpakalpojumu sistēmām
Pakalpojumu tīkli, piemēram, Istio un Linkerd, ir padarījuši ķēdes pārtraukšanu par komerciālu objektu infrastruktūras slānī, ļaujot platformu komandām ieviest politikas bez lietojumprogrammu izmaiņām. Gracioza degradācija joprojām lielā mērā ir lietojumprogrammu problēma, lai gan bezserveru platformas un perifērijas skaitļošana sāk piedāvāt primitīvus rezerves mehānismus. Šī atšķirība nozīmē, ka ķēdes pārtraucēji arvien vairāk ir “bezmaksas” ar atbilstošu infrastruktūru, savukārt gracioza degradācija joprojām prasa apzinātus inženiertehniskus ieguldījumus.
Kļūmes režīma pārklājums
Automātiskie slēdži lieliski apstrādā latentuma impulsus, savienojuma taimautus un kļūdu kaskādes sinhrono pieprasījumu ķēdēs. Tie sniedz ierobežotu vērtību asinhronai apstrādei vai gadījumos, kad kļūmes ir momentānas, nevis degradējošas. Gracioza degradācija izpaužas gadījumos, kad noteiktas funkcijas var atspējot vai vienkāršot, bet nevar aizsargāt pret pilnīgu resursu izsīkumu vai pilnīgu atkarības neesamību. Daudziem ražošanas incidentiem ir nepieciešami abi: automātiskie slēdži, lai apturētu noplūdi, un pēc tam gracioza degradācija, lai uzturētu pakalpojumu, kamēr notiek atjaunošana.
Priekšrocības un trūkumi
Slēdži
Iepriekšējumi
+Novērš kaskādes kļūmes
+Ātrgaitas darbība samazina resursu izšķērdēšanu
+Automātiska atkopšanas noteikšana
+nepieciešams mikropakalpojumiem
+Labs infrastruktūras rīku atbalsts
Ievietots
−Lietotāji uzreiz redz kļūdas
−Sliekšņa regulēšana ir pakļauta kļūdām
−Var maskēt pamatā esošās problēmas
−Pievieno latentuma pieskaitāmās izmaksas
Gracioza degradācija
Iepriekšējumi
+Izcila lietotāja pieredze
+Saglabā ieņēmumus pārtraukumu laikā
+Elastīga funkciju prioritāšu noteikšana
+Samazina avārijas spiedienu
Ievietots
−Sarežģīta rezerves loģika
−Testēšanas matrica eksplodē
−Var slēpt nopietnas problēmas
−Grūtāk ieviest ar atpakaļejošu datumu
Biežas maldības
Mīts
Automātiskie slēdži un gracioza degradācija atrisina vienu un to pašu problēmu un ir savstarpēji aizvietojami.
Realitāte
Šie modeļi attiecas uz dažādām atteices fāzēm. Automātiskie slēdži pārvalda akūtu atkarības atteices krīzi, savukārt gracioza degradācija risina hronisku samazinātas spējas stāvokli. Sistēma bez automātiskajiem slēdžiem var sabrukt, pirms graciozā degradācija pat aktivizējas, un gracioza degradācija bez automātiskajiem slēdžiem var izsmelt resursus, mēģinot kompensēt fundamentāli bojātas atkarības.
Mīts
Automātiskie slēdži ir svarīgi tikai mikropakalpojumu arhitektūrām.
Realitāte
Lai gan mikropakalpojumi popularizēja ķēdes pārtraucējus, šis modelis attiecas uz gadījumiem, kad komponenti sazinās pāri neuzticamām robežām. Monolītas lietojumprogrammas, kas izsauc ārējos API, datubāzes ar savienojumu ierobežojumiem vai pat iekšējos pavedienu kopumus, var gūt labumu. 2010. gadu mikropakalpojumu vilnis vienkārši padarīja nepieciešamību redzamāku, pateicoties palielinātajam tīkla lēcienu skaitam.
Mīts
Gracioza degradācija nozīmē apzinātu zemas kvalitātes funkciju veidošanu.
Realitāte
Efektīvai un graciozai degradācijai ir nepieciešama izpratne par funkciju kritiskumu un lietotāju vērtību hierarhijām, nevis viduvējības pieņemšana. Vismodernākās ieviešanas metodes, piemēram, LinkedIn un Airbnb, dinamiski degradējas, pamatojoties uz reāllaika noslodzi un biznesa prioritāti, dažreiz nodrošinot pieredzi, kas neatšķiras no pilnas funkcionalitātes lietotājiem, kuri nav prioritārie, vienlaikus saglabājot jaudu kritiski svarīgām darbībām.
Mīts
Kad ķēdes pārtraucēji ir ieviesti, tiem nav nepieciešama pastāvīga uzmanība.
Realitāte
Automātisko slēdžu konfigurācijas pasliktinās bez apkopes. Pakalpojumu latentuma bāzes līnijas mainās, datplūsmas modeļi attīstās, un iepriekš piemērotie robežvērtības tiek bīstami nepareizi kalibrētas. Haosa inženierijas prakse Netflix un Gremlin nepārprotami pārbauda automātisko slēdžu efektivitāti, atklājot, ka nenoregulēti slēdži bieži vien kļūst vai nu pastāvīgi atvērti (bloķējot veselīgu datplūsmu), vai iesprūst aizvērti (ļaujot kļūmēm notikt).
Mīts
Gracioza degradācija galvenokārt ir saistīta ar lietotāja saskarni.
Realitāte
Lai gan lietotāji galu galā saskarnēs piedzīvo pakāpenisku degradāciju, visietekmīgākā ieviešana sākas datu un pakalpojumu slāņos. Aizmugurējās sistēmas, kas samazina vaicājumu sarežģītību, pārslēdzas uz kešatmiņā saglabātiem apkopojumiem vai atspējo nebūtisku indeksēšanu, nodrošina priekšpuses degradāciju. Bez aizmugures sistēmas atbalsta tikai priekšpuses degradācija kļūst par plānu kārtu virs bojātām sistēmām.
Bieži uzdotie jautājumi
Vai ķēdes pārtraucēji un gracioza degradācija var darboties kopā vienā sistēmā?
Noteikti, un bieži vien tā arī vajadzētu. Tipiska plūsma ietver ķēdes pārtraucējus, kas atklāj un izolē bojātu maksājumu apstrādātāju, pēc tam aktivizē graciozu degradāciju, lai atļautu pirkumus ar atliktu maksājuma verifikāciju vai saglabātām maksājumu metodēm. Amazon norēķinu sistēma ir šī modeļa piemērs, kur ķēdes pārtraucēji aizsargā inventāra pakalpojumus, savukārt gracioza degradācija ļauj pabeigt pirkumu ar paredzamajiem piegādes datumiem, nevis reāllaika aprēķiniem.
Kā jūs izlemjat, kad atvērt ķēdes pārtraucēju, nevis kad to graciozi pazemināt?
Lēmums ir atkarīgs no tā, vai neizdevusies sastāvdaļa ir nepieciešama pamatfunkcionalitātei. Ja ieteikumu programma neizdodas, gracioza degradācija sniedz vispārīgus ieteikumus. Ja autentifikācijas pakalpojums neizdodas, gracioza degradācija parasti nav iespējama — ķēdes pārtraucējiem vajadzētu ātri atteicties un novirzīt uz statusa lapu. Atslēgu analīze katru atkarību sadala kategorijās “obligāti”, “uzlabojoši” vai “pēc izvēles”, kur nepieciešamās atkarības aizsargā ķēdes pārtraucēji, bet pārējās — graciozas degradācijas stratēģijas.
Kādi rādītāji vislabāk norāda slēdža efektivitāti?
Papildus pamata atvērto/aizvērto stāvokļu skaitam izmēriet kļūdaini pozitīvo rezultātu līmeni (nepareizi atslēgti veselīgi pakalpojumi), neatbildēto kļūmju līmeni (tiek cauri bojāti pakalpojumi), atkopšanas laiku (vidējais laiks no atvēršanas līdz aizvēršanai) un ietekmi uz uzņēmējdarbību (ieņēmumi vai pieprasījumi, ko ietekmē gan atvērtas ķēdes, gan neatbloķētas kļūmes). Izsmalcinātas Stripe un Square komandas izseko "ķēdes slēdžu efektivitāti" kā novērsto kļūmju attiecību pret lietotājam redzamām kļūdām.
Kā gracioza degradācija atšķiras no vienkāršiem kļūdām vai trūkstošām funkcijām?
Gracioza degradācija ir apzināta, pārbaudīta un atgriezeniska. Ja funkcija tiek apzināti atspējota atkarības kļūmes dēļ, tiek aktivizēti uzraudzības brīdinājumi, tiek aktivizēti izpildes grāmatu krājumi un funkcija automātiski atgriežas, kad veselības pārbaudes ir sekmīgi pabeigtas. Nejauši trūkstošām funkcijām trūkst šo īpašību, un tās bieži vien netiek atklātas un netiek novērstas. Šī atšķirība ir svarīga atbilstības un uzticamības ziņošanai — gracioza degradācija ir kontrolēts stāvoklis, nevis kļūdas nosacījums.
Kādi ir izplatītākie anti-modeļi, ieviešot automātiskos slēdžus?
Visbīstamākais anti-modelis ir automātisko slēdžu ieviešana bez rezerves loģikas, atstājot lietotājiem neapstrādātas kļūdas. Citi piemēri ir identisku sliekšņu izmantošana dažādos pakalpojumos, atkārtotas mēģinājumu vētru neņemšana vērā, kad ķēdes tiek slēgtas, un pusatvērta stāvokļa testēšanas atstāšana novārtā. Vēl viena smalka kļūme ir automātisko slēdžu kaskāde, kur vairāku slāņu slēdži visi ieslēdzas vienlaicīgi, radot visas sistēmas nepieejamību, ko varētu novērst viens pareizi novietots slēdzis.
Kā mūsdienu pakalpojumu tīkli ievieš ķēdes pārtraukšanu atšķirīgi no lietojumprogrammu bibliotēkām?
Pakalpojumu tīkli, piemēram, Istio, ievieš ķēžu pārtraukšanu tīkla slānī, izmantojot Envoy starpniekserverus, nepieprasot lietojumprogrammas koda izmaiņas, bet piedāvājot mazāk konteksta par pieprasījumu semantiku. Lietojumprogrammu bibliotēkas, piemēram, Resilience4j, ļauj pieņemt biznesa loģikai atbilstošus lēmumus — piemēram, dažādus slēdžus premium un bezmaksas lietotājiem. Kompromiss ir darbības vienkāršība pret semantisko precizitāti. Daudzas organizācijas izmanto gan tīkla līmeņa slēdžus kā plašu aizsardzību, gan lietojumprogrammu līmeni kritiskiem biznesa ceļiem.
Kāda loma ir graciozai degradācijai izmaksu optimizācijā?
Ievērojami izmaksu ietaupījumi rodas, pakāpeniski samazinot izmaksas pieprasījuma maksimuma laikā. Izmantojot kešatmiņā saglabātas vai vienkāršotas atbildes, nevis mērogojot infrastruktūru, lai apmierinātu maksimālo pieprasījumu, tādi uzņēmumi kā The New York Times un Spotify samazina mākoņpakalpojumu izdevumus. Šī pieeja “degradācija kā izmaksu kontrole” prasa rūpīgu komunikāciju ar lietotājiem un parasti attiecas uz funkcijām, kas nerada ieņēmumus, taču tā ir aizvien pieaugoša prakse inženiertehniskajās organizācijās, kas apzinās peļņas normu.
Kā komandām vajadzētu pārbaudīt graciozus degradācijas ceļus?
Degradētu ceļu testēšana prasa tādu pašu precizitāti kā primāro ceļu testēšana, tomēr tai bieži tiek pievērsta mazāka uzmanība. Efektīvas pieejas ietver kļūdu injicēšanu (haosa inženierija), atkarību imitēšanu ar kļūmju scenārijiem un tumšās palaišanas ražošanas vidē, kur degradēti ceļi aktivizējas noteiktai datplūsmas procentuālajai daļai. Netflix ChAP (Chaos Automation Platform) un Gremlin kļūmju testēšana īpaši apstiprina pakāpenisku degradāciju, savukārt slodzes testēšana ar ierobežotiem resursiem atklāj degradācijas robežas.
Vai ir situācijas, kad automātiskie slēdži nodara vairāk ļaunuma nekā laba?
Automātiskie slēdži var pastiprināt problēmas tīkla nodalījumu laikā, ja tie nespēj atšķirt pakalpojumu kļūmi no savienojamības problēmām. Sadalītas smadzeņu darbības scenārijos slēdži var atvērties visās nodalījuma pusēs, izraisot pilnīgu nepieejamību, lai gan daļēja darbība ir iespējama. Tie arī cīnās ar pakalpojumiem, kuriem ir liela latentuma bāzes līnijas svārstība, kā rezultātā bieži notiek viltus atvēršanās. Finanšu tirdzniecības sistēmas un veselības aprūpes kritiskās aprūpes sistēmas dažkārt izvairās no automātiskajiem slēdžiem, dodot priekšroku skaidrai manuālai vadībai šo risku dēļ.
Kā gracioza degradācija ir saistīta ar pakāpenisku uzlabošanu tīmekļa izstrādē?
Progresīvā uzlabošana veido funkcionalitātes slāņus no stabila HTML pamata uz augšu, dabiski radot graciozas degradācijas ceļus — ja JavaScript neizdodas, pamata saturs paliek pieejams. Tomēr gracioza degradācija izkliedētās sistēmās sniedzas tālāk par pārlūkprogrammu, iekļaujot servera puses komponentus, datubāzes un ārējos pakalpojumus. Filozofijas sakrīt, pieņemot mainīgu iespēju vidi, taču graciozās degradācijas darbības joma ir plašāka, aptverot aizmugursistēmas kļūmes, kas nav redzamas progresīvās uzlabošanas klienta puses uzmanībai.
Kāda uzraudzība ir būtiska ķēdes pārtraucēja veselībai?
Uzraugiet stāvokļa pārejas biežumu (trīcoša skaņa norāda uz nepareizu konfigurāciju), laiku atvērtā stāvoklī (ilgstoša atvēršana norāda uz pastāvīgām problēmām), rezerves risinājumu veiksmes rādītāju un korelāciju ar biznesa rādītājiem, piemēram, konversijas rādītājiem. Informācijas paneļiem jāparāda slēdža stāvoklis līdzās atkarību veselības rādītājiem, lai nošķirtu slēdža izraisītās un faktiskās servisa problēmas. Brīdināšana par slēdža stāvokļa izmaiņām, nevis tikai par atvērtiem stāvokļiem, novērš brīdinājumu nogurumu, vienlaikus nodrošinot informētību.
Kā jūs saglabājat graciozas degradācijas spējas, sistēmām attīstoties?
Degradācijas ceļi sabrūk bez apkopes. Katrai jaunai funkcijai ir nepieciešama skaidra klasifikācija kritiskuma hierarhijā, un degradācijas loģika jāiekļauj pabeigtības definīcijas kritērijos. Automatizētās testēšanas segmentu komplektiem jāaptver degradētie ceļi, un incidentu pēcnovērtējumos jānovērtē, vai pieejamā degradācija bija pietiekama. Dažas Google un Amazon komandas uztur "degradācijas izpildes grāmatas", kas tiek pārskatītas reizi ceturksnī, nodrošinot, ka komandas atceras, kā manuāli degradēt automātisko sistēmu atteices gadījumā.
Spriedums
Izvēlieties automātiskos slēdžus, ja sistēmas stabilitātes aizsardzība no neuzticamām atkarībām ir ārkārtīgi svarīga, īpaši augstas caurlaidspējas sinhronās pakalpojumu ķēdēs. Dodiet priekšroku graciozai degradācijai, ja lietotājam paredzēto funkcionalitāti var jēgpilni kārtot, nodrošinot pamatvērtības saglabāšanu pat tad, ja uzlabojumi neizdodas. Nobriedušas sistēmas parasti izmanto abus, izmantojot automātiskos slēdžus kā aizsardzības perimetru, savukārt gracioza degradācija saglabā pieredzi darbības robežās.