Post Mortem op Quay.io OnverfĂŒgbarkeet

Note. iwwersat.: Ufank August huet de Red Hat Ă«ffentlech geschwat iwwer d'LĂ©isung vun AccessibilitĂ©itsproblemer, dĂ©i d'Benotzer vu sengem Service an de leschte MĂ©int begĂ©int haten Quay.io (et basĂ©iert op engem Registry fir Container Biller, dĂ©i d'Firma zesumme mam Kaf vun CoreOS kritt huet). OnofhĂ€ngeg vun Ärem Interessi un dĂ«sem Service als solch, de Wee, deen d'SRE Ingenieuren vun der Firma gemaach hunn fir d'Ursaachen vum Accident ze diagnostizĂ©ieren an ze eliminĂ©ieren ass lĂ©ierrĂ€ich.

Post Mortem op Quay.io OnverfĂŒgbarkeet

Den 19. Mee moies fréi (Eastern Daylight Time, EDT) ass de Quay.io Service erofgefall. Den Accident huet souwuel quay.io Konsumenten wéi och Open Source Projete beaflosst mat quay.io als Plattform fir Software ze bauen an ze verdeelen. Red Hat schÀtzt d'Vertraue vun deenen zwee.

Eng Equipe vun SRE-Ingenieuren huet sech direkt bedeelegt a probéiert de Quay-Service sou séier wéi méiglech ze stabiliséieren. Wéi och ëmmer, wÀrend se dëst gemaach hunn, hunn d'Clienten d'FÀegkeet verluer nei Biller ze drécken, an nëmmen heiansdo konnten se existéierend zéien. Aus e puer onbekannte Grënn gouf d'Quay.io Datebank blockéiert nodeems de Service op voll Kapazitéit skaléiert gouf.

«Wat huet geĂ€nnert?" - dat ass dĂ©i Ă©ischt Fro dĂ©i normalerweis an esou FĂ€ll gestallt gĂ«tt. Mir hu gemierkt datt kuerz virum Thema den OpenShift Dedicated Cluster (dee leeft quay.io) ugefaang ze aktualisĂ©ieren op d'Versioun 4.3.19. ZĂ«nter quay.io leeft op Red Hat OpenShift Dedicated (OSD), reegelmĂ©isseg Updates ware Routine an hunn ni Probleemer verursaacht. Ausserdeem, iwwer dĂ©i sechs MĂ©int virdrun, hu mir Quay Cluster e puer Mol aktualisĂ©iert ouni Ënnerbriechung am Service.

WÀrend mir probéiert hunn de Service ze restauréieren, hunn aner Ingenieuren ugefaang en neien OSD-Cluster mat der viregter Versioun vun der Software virzebereeden, sou datt wann eppes geschitt ass, kënne se alles drop ofsetzen.

Root Ursaach Analyse

D'Haaptsymptom vum Echec war eng Lawin vun Zéngdausende vun Datenbankverbindungen, déi d'MySQL Instanz effektiv inoperabel gemaach hunn. Dëst huet et schwéier gemaach de Problem ze diagnostizéieren. Mir hunn eng Limit op déi maximal Unzuel u Verbindunge vu Cliente gesat fir dem SRE Team ze hëllefen d'Thema ze evaluéieren. Mir hunn keen ongewéinlechen Traffic an d'Datebank gemierkt: TatsÀchlech goufen déi meescht Ufroe gelies, an nëmmen e puer goufen geschriwwen.

Mir hunn och probéiert e Muster am Datebankverkéier z'identifizéieren, deen dës Lawine verursaache kéint. Mir konnten awer keng Muster an de Logbicher fannen. WÀrend mir waarden op den neie StÀrekoup mat OSD 4.3.18 fir prett ze sinn, hu mir weider probéiert quay.io Pods ze lancéieren. All Kéier wann de Cluster voll Kapazitéit erreecht huet, géif d'Datebank afréieren. Dëst bedeit datt et néideg war d'RDS Instanz nieft all quay.io Pods nei ze starten.

Bis den Owend hu mir de Service am Read-only Modus stabiliséiert an esou vill net wesentlech Funktiounen wéi méiglech behënnert (zum Beispill Nummraum Drecksammlung) fir d'Laascht op der Datebank ze reduzéieren. Gefruer sinn opgehalen mÀ de Grond war ni fonnt. Den neie OSD Cluster war prett, a mir migréiert de Service, verbonne Verkéier a weider Iwwerwaachung.

Quay.io huet stabil um neien OSD-Cluster geschafft, also si mir zrĂ©ck an d'Datebankprotokoller, awer konnten keng Korrelatioun fannen, dĂ©i d'BlockĂ©ierungen erklĂ€re gĂ©if. OpenShift Ingenieuren hu mat eis geschafft fir ze verstoen ob Ännerungen am Red Hat OpenShift 4.3.19 Probleemer mam Quay verursaache kĂ«nnen. AllerdĂ©ngs gouf nĂ€ischt fonnt, an Et war net mĂ©iglech de Problem an Laboratoire Konditiounen ze reproduzĂ©ieren.

Zweet Echec

Den 28. Mee, kuerz viru MĂ«tteg EDT, ass quay.io erĂ«m mat deemselwechte Symptom erofgefall: d'Datebank gouf gespaart. An erĂ«m hu mir all eis Efforten an d'EnquĂȘte geheit. Éischt vun all, war et nĂ©ideg de Service ze restaurĂ©ieren. AllerdĂ©ngs dĂ«s KĂ©ier RDS nei starten an quay.io Pods nei starten huet nĂ€ischt gemaach: eng aner Lawine vu Verbindungen huet d'Basis iwwerwĂ€ltegt. Mee firwat?

Quay ass am Python geschriwwen an all Pod funktionnéiert als eenzegen monolithesche Container. De Container Runtime leeft vill parallel Aufgaben glÀichzÀiteg. Mir benotzen d'Bibliothéik gevent ënner dem gunicorn Web Ufroen ze verschaffen. Wann eng Ufro an de Quay kënnt (iwwer eisen eegene API, oder iwwer Docker's API), gëtt et e gevent Aarbechter zougewisen. Typesch soll dësen Aarbechter d'Datebank kontaktéieren. Nom éischten Echec, entdeckt mir dass gevent Aarbechter mat der Datebank benotzt Standard Astellunge Verbindung.

Mat der bedeitender Unzuel vu Quay Pods an Dausende vun erakommen Ufroe pro Sekonn, eng grouss Unzuel vun Datebankverbindunge kéinten theoretesch d'MySQL Instanz iwwerwannen. Dank Iwwerwaachung war et bekannt datt Quay am Duerchschnëtt 5 Tausend Ufroe pro Sekonn veraarbecht. D'Zuel vun de Verbindunge mat der Datebank war ongeféier d'selwecht. 5 dausend Verbindunge ware gutt an de FÀegkeeten vun eiser RDS Instanz (wat kann net iwwer Zéngdausende gesot ginn). Aus e puer Grënn goufen et onerwaart Spikes an der Unzuel vun de VerbindungenMir hunn awer keng Korrelatioun mat erakommen Ufroe gemierkt.

DĂ«s KĂ©ier ware mir dĂ©cidĂ©iert d'Quell vum Problem ze fannen an ze eliminĂ©ieren, an eis net op e Restart ze limitĂ©ieren. Zu der Quay Codebase Ännerungen goufen gemaach fir d'Zuel vun de Verbindunge mat der Datebank fir all Aarbechter ze limitĂ©ieren gevent. DĂ«s Nummer gouf e Parameter an der Konfiguratioun: et gouf mĂ©iglech et op der Flucht z'Ă€nneren ouni en neit Containerbild ze bauen. Fir erauszefannen wĂ©i vill Verbindunge realistesch gehandhabt kĂ«nne ginn, hu mir e puer Tester an engem InszenĂ©ierungsĂ«mfeld gemaach, verschidde WĂ€erter gesat fir ze kucken wĂ©i dĂ«st d'Laaschttestszenarie beaflosst. Als Resultat gouf entdeckt datt Quay fĂ€nkt 502 Feeler ze geheien wann d'Zuel vun de Verbindungen mĂ©i wĂ©i 10 dausend.

Mir hunn dës nei Versioun direkt op d'Produktioun ofgesat an hunn ugefaang den Datebankverbindungsplang ze iwwerwaachen. Fréier war d'Basis no ronn 20 Minutten gespaart. No 30 problemfrÀie Minutten hate mir Hoffnung, an eng Stonn méi spéit hu mir Vertrauen. Mir hunn de Traffic op de Site restauréiert an hunn eng postmortem Analyse ugefaang.

Nodeems Dir et fĂ€erdeg bruecht huet de Problem Ă«mzegoen, wat zu BlockĂ©ierung fĂ©iert, mir hunn hir richteg GrĂ«nn net erausfonnt. Et gouf bestĂ€tegt datt et net mat Ännerungen am OpenShift 4.3.19 verbonnen ass, well datselwecht geschitt ass op der Versioun 4.3.18, dĂ©i virdru mat Quay ouni Probleemer geschafft huet.

Et war kloer eppes anescht am StÀrekoup gelauert.

Detailléiert Etude

Quay.io huet d'Standardastellunge benotzt fir sechs Joer ouni Probleemer mat der Datebank ze verbannen. Wat huet geÀnnert? Et ass kloer datt all dës ZÀit Traffic op quay.io stÀnneg gewuess ass. An eisem Fall huet et ausgesinn, wéi wann ee SchwellwÀert erreecht wier, deen als Ausléiser fir eng Lawine vu Verbindungen gedéngt huet. Mir hunn d'Datebankprotokoller no der zweeter Echec studéiert, awer hu keng Mustere oder offensichtlech Bezéiungen fonnt.

An der ZwëschenzÀit huet d'SRE Team un Verbesserungen vun der Quay Ufroobservabilitéit an der allgemenger Servicegesondheet geschafft. Nei Metriken an Dashboards goufen ofgesat, weist wéi eng Deeler vum Quai am meeschte gefrot gi vu Clienten.

Quay.io huet bis den 9. Juni gutt geschafft. Haut de Moien (EDT) hu mir erëm eng dÀitlech Erhéijung vun der Zuel vun den Datebankverbindunge gesinn. Dës Kéier gouf et keng Ausdauer, well den neie Parameter hir Zuel limitéiert huet an et net erlaabt huet de MySQL-Duerchgang ze iwwerschreiden. Wéi och ëmmer, fir ongeféier eng hallef Stonn hu vill Benotzer eng lues Leeschtung vu quay.io bemierkt. Mir hu séier all méiglech Donnéeë gesammelt mat den zousÀtzlechen Iwwerwaachungsinstrumenter. Op eemol ass e Muster entstanen.

Just virum Iwwerschwemmung vu Verbindungen goufen eng grouss Zuel vun Ufroe un d'App Registry API gemaach. App Registry ass eng wĂ©ineg bekannt Feature vu quay.io. Et erlaabt Iech Saachen wĂ©i Helm Charts a Container mat rĂ€iche Metadaten ze spĂ€icheren. DĂ©i meescht quay.io Benotzer schaffen net mat dĂ«ser Feature, awer Red Hat OpenShift benotzt se aktiv. OperatorHub als Deel vun OpenShift spĂ€ichert all Betreiber an der App Registry. DĂ«s Betreiber bilden d'Basis fir den OpenShift Workload Ökosystem a Partner-centric Betribsmodell (Dag 2 Operatiounen).

All OpenShift 4 StĂ€rekoup benotzt Betreiber aus dem agebaute OperatorHub fir e Katalog vun Operatoren ze verĂ«ffentlechen dĂ©i fir d'Installatioun verfĂŒgbar sinn an d'AktualisĂ©ierunge fir dĂ©i scho installĂ©iert. Mat der wuessender PopularitĂ©it vum OpenShift 4 ass d'Zuel vu Cluster op der ganzer Welt och eropgaang. Jiddereng vun dĂ«se StĂ€rekĂ©ip luet den Bedreiwerinhalt erof fir den agebaute OperatorHub auszefĂ©ieren, andeems d'App Registry bannent quay.io als Backend benotzt. An eiser Sich no der Quell vum Problem hu mir d'Tatsaach verpasst datt wĂ©i OpenShift graduell an der PopularitĂ©it gewuess ass, d'Laascht op eng vun de selten benotzte Quay.io Funktiounen och eropgaang..

Mir hunn e puer Analyse vum App Registry Ufro Traffic gemaach an de Registry Code gekuckt. Direkt goufen MÀngel opgedeckt, wéinst deenen Ufroen un d'Datebank net optimal geformt goufen. Wann d'Laascht niddereg war, hunn se keng Probleemer verursaacht, awer wann d'Belaaschtung eropgeet, goufen se eng Quell vu Probleemer. App Registry huet sech erausgestallt fir zwee problematesch Endpunkter ze hunn, déi net gutt op d'Erhéijung vun der Belaaschtung reagéiert hunn: déi éischt huet eng Lëscht vun alle Packagen am Repository geliwwert, déi zweet huet all Blobs fir de Package zréckginn.

Eliminatioun vun Ursaachen

An der nĂ€chster Woch hu mir de Code vum App Registry selwer a seng Ëmwelt optimĂ©iert. Kloer net effikass SQL Ufroen goufen Ă«mgebaut an onnĂ©ideg Kommando Uruff goufen eliminĂ©iert tar (Et gouf all KĂ©ier gelaf wann d'Blobs erĂ«mfonnt goufen), Caching gouf bĂ€igefĂŒĂŒgt wou et mĂ©iglech ass. Mir hunn dunn extensiv Performance Tester gemaach an d'Geschwindegkeet vum App Registry virun an no den Ännerungen verglach.

API Ufroen, dĂ©i virdru bis zu enger hallef Minutt gedauert hunn, ginn elo a Millisekonnen ofgeschloss. DĂ©i nĂ€chst Woch hu mir d'Ännerunge fir d'Produktioun agesat, an zĂ«nterhier huet quay.io stabil geschafft. WĂ€rend dĂ«ser ZĂ€it goufen et e puer schaarf Spikes am Traffic um App Registry Endpunkt, awer d'Verbesserunge verhĂ«nnert d'Datebankausfall.

Wat hu mir geléiert?

Et ass kloer datt all Service probéiert Ausdauer ze vermeiden. An eisem Fall gleewen mir datt déi rezent Ausbréch gehollef hunn quay.io besser ze maachen. Mir hunn e puer wichteg Lektioune geléiert, déi mir gÀren deelen:

  1. Daten iwwer wien Äre Service benotzt a wĂ©i ass ni iwwerflĂ«sseg. Well Quay "just geschafft huet", hu mir ni ZĂ€it misse verbrĂ©ngen fir de Traffic ze optimisĂ©ieren an d'Laascht ze managen. All dĂ«st huet e falscht SĂ©cherheetsgefill erstallt datt de Service onbestĂ«mmt ka skalĂ©ieren.
  2. Wann de Service erof geet, et erëm op a lafen ze kréien ass eng Haaptprioritéit.. Well Quay weider ënner enger gespaarter Datebank wÀhrend dem éischten Ausfall leiden, hunn eis Standardprozeduren net de virgesinnenen Effekt gemaach a mir konnten de Service net mat hinnen restauréieren. Dëst huet zu enger Situatioun gefouert wou ZÀit huet missen analyséieren an Daten sammelen an der Hoffnung d'Ursaach ze fannen - amplaz all Efforten op d'Funktionalitéit ze restauréieren.
  3. Evaluéiert den Impakt vun all Service Feature. Clienten hunn selten App Registry benotzt, also war et keng Prioritéit fir eis Team. Wann e puer Produktfeatures kaum benotzt ginn, schéngen hir Bugs selten, an d'Entwéckler stoppen de Code ze iwwerwaachen. Et ass einfach de MëssverstÀndnis ze falen datt dat esou ass wéi et soll sinn - bis op eemol déi Funktioun sech am Mëttelpunkt vun engem groussen Tëschefall fënnt.

Wat d'nÀchst?

D'Aarbecht fir d'Stabilitéit vum Service ze garantéieren hÀlt ni op a mir verbesseren et permanent. Wéi de Verkéiersvolumen weider op quay.io wuessen, erkennen mir datt mir eng Verantwortung hunn alles ze maachen fir dem Vertrauen vun eise Clienten ze liewen. Dofir schaffe mir momentan un folgenden Aufgaben:

  1. Deploy just read-only Datebank Repliken fir de Service ze hëllefen de passenden Traffic am Fall vu Probleemer mat der primÀrer RDS Instanz ze handhaben.
  2. AktualisĂ©ierung vun enger RDS Instanz. DĂ©i aktuell Versioun selwer ass net de Problem. VillmĂ©i wĂ«lle mir einfach de falschen Trail ewechhuelen (dee mir wĂ€hrend dem Echec gefollegt hunn); D'Software up to date halen wĂ€ert en anere Faktor am Fall vun zukĂŒnfteg Ausbroch eliminĂ©ieren.
  3. ZousÀtzlech Cache iwwer de ganze Cluster. Mir sichen weider no BerÀicher wou Caching d'Laascht op der Datebank reduzéiere kann.
  4. Eng Webapplikatioun Firewall (WAF) bĂ€izefĂŒgen fir ze kucken wien op quay.io verbĂ«nnt a firwat.
  5. Vun der nĂ€chster VerĂ«ffentlechung un, Red Hat OpenShift Cluster verloossen d'App Registry zugonschte vun den Operateur Kataloge basĂ©iert op Container Biller verfĂŒgbar op quay.io.
  6. E laangfristeg Ersatz fir App Registry kĂ©int ËnnerstĂ«tzung fir Open Container Initiative (OCI) Artefakt Spezifikatioune sinn. Et ass de Moment als gebierteg Quay FunktionalitĂ©it implementĂ©iert a wĂ€ert fir Benotzer verfĂŒgbar sinn wann d'Spezifikatioun selwer finalisĂ©iert ass.

All déi uewendriwwer sinn Deel vun der lafender Investitioun vu Red Hat an quay.io wéi mir vun engem klenge "Startup-Stil" Team op eng reife SRE-driven Plattform plënneren. Mir wëssen, datt vill vun eise Clienten op quay.io an hirer alldeeglecher Aarbecht vertrauen (och Red Hat!) A mir probéieren esou transparent wéi méiglech ze sinn iwwer déi rezent Stéierungen a weider Efforte fir ze verbesseren.

PS vum Iwwersetzer

Liest och op eisem Blog:

Source: will.com

Kaaft zouverlĂ€sseg Hosting fir Site mat DDoS Schutz, VPS VDS Server đŸ”„ Kaaft zouverlĂ©issegt WebsĂ€ithosting mat DDoS-Schutz, VPS VDS Server | ProHoster