Post Mortem á Quay.io óaðgengi

Athugið. þýð.: í byrjun ágúst talaði Red Hat opinberlega um að leysa aðgengisvandamál sem notendur þjónustunnar höfðu lent í undanfarna mánuði quay.io (það er byggt á skrá fyrir gámamyndir, sem fyrirtækið fékk samhliða kaupum á CoreOS). Burtséð frá áhuga þínum á þessari þjónustu sem slíkri, þá er leiðin sem SRE verkfræðingar fyrirtækisins fóru til að greina og útrýma orsökum slyssins lærdómsrík.

Post Mortem á Quay.io óaðgengi

Þann 19. maí, snemma morguns (Eastern Daylight Time, EDT), hrundi þjónustan quay.io. Slysið hafði áhrif á bæði quay.io neytendur og Open Source verkefni sem notuðu quay.io sem vettvang til að byggja og dreifa hugbúnaði. Red Hat metur traust beggja.

Hópur SRE verkfræðinga tók strax þátt og reyndi að koma á stöðugleika í Quay þjónustunni eins fljótt og auðið var. Hins vegar, meðan þeir voru að gera þetta, misstu viðskiptavinir getu til að ýta nýjum myndum og aðeins einstaka sinnum gátu þeir dregið þær sem fyrir voru. Af einhverjum óþekktum ástæðum var quay.io gagnagrunninum lokað eftir að þjónustan var stækkuð í fulla getu.

«Hvað hefur breyst?“ - þetta er fyrsta spurningin sem venjulega er spurð í slíkum tilfellum. Við tókum eftir því að skömmu fyrir útgáfuna byrjaði OpenShift Dedicated þyrpingin (sem keyrir quay.io) að uppfæra í útgáfu 4.3.19. Þar sem quay.io keyrir á Red Hat OpenShift Dedicated (OSD), voru reglulegar uppfærslur venjubundnar og ollu aldrei vandamálum. Þar að auki, á síðustu sex mánuðum, höfum við uppfært Quay klasa nokkrum sinnum án truflunar á þjónustu.

Á meðan við vorum að reyna að endurheimta þjónustuna byrjuðu aðrir verkfræðingar að útbúa nýjan OSD þyrping með fyrri útgáfu hugbúnaðarins, þannig að ef eitthvað gerðist gætu þeir sett allt á hann.

Greining á rótum

Helsta einkenni bilunarinnar var snjóflóð tugþúsunda gagnagrunnstenginga, sem gerði MySQL tilvikið í raun óstarfhæft. Þetta gerði það að verkum að erfitt var að greina vandamálið. Við höfum sett takmörk á hámarksfjölda tenginga frá viðskiptavinum til að hjálpa SRE teyminu að meta málið. Við tókum ekki eftir neinni óvenjulegri umferð í gagnagrunninn: reyndar voru flestar beiðnir lesnar og aðeins nokkrar voru skrifaðar.

Við reyndum líka að finna mynstur í gagnagrunnsumferðinni sem gæti valdið þessu snjóflóði. Hins vegar gátum við ekki fundið nein mynstur í loggunum. Á meðan beðið var eftir að nýi þyrpingin með OSD 4.3.18 yrði tilbúin héldum við áfram að reyna að ræsa quay.io belg. Í hvert skipti sem þyrpingin náði fullri afkastagetu myndi gagnagrunnurinn frjósa. Þetta þýddi að það var nauðsynlegt að endurræsa RDS tilvikið auk allra quay.io pods.

Um kvöldið komum við þjónustunni á stöðugleika í skrifvarinn hátt og slökktum á eins mörgum ónauðsynlegum aðgerðum og hægt var (til dæmis sorpsöfnun nafnrýmis) til að draga úr álagi á gagnagrunninn. Frost hefur hætt en ástæðan fannst aldrei. Nýi OSD þyrpingin var tilbúin og við fluttum þjónustuna, tengdum umferð og áframhaldandi eftirlit.

Quay.io virkaði stöðugt á nýja OSD þyrpingunni, svo við fórum aftur í gagnagrunnsskránna, en gátum ekki fundið fylgni sem myndi útskýra stíflurnar. Verkfræðingar OpenShift unnu með okkur til að skilja hvort breytingar á Red Hat OpenShift 4.3.19 gætu valdið vandræðum með Quay. Hins vegar fannst ekkert, og Ekki var hægt að endurskapa vandamálið við aðstæður á rannsóknarstofu.

Önnur bilun

Þann 28. maí, skömmu fyrir hádegi EDT, hrundi quay.io aftur með sama einkenni: gagnagrunninum var lokað. Og aftur lögðum við allt okkar í rannsóknina. Fyrst af öllu var nauðsynlegt að endurheimta þjónustuna. Hins vegar að þessu sinni gerði það ekkert að endurræsa RDS og endurræsa quay.io pods: annað snjóflóð tenginga hefur yfirbugað stöðina. En afhverju?

Quay er skrifað í Python og hver fræbelgur starfar sem einn einhliða ílát. Gámakeyrslan keyrir mörg samhliða verkefni samtímis. Við notum bókasafnið gevent undir gunicorn til að vinna úr vefbeiðnum. Þegar beiðni kemur inn í Quay (í gegnum eigin API, eða í gegnum API Docker), er henni úthlutað gefandi starfsmanni. Venjulega ætti þessi starfsmaður að hafa samband við gagnagrunninn. Eftir fyrstu bilun komumst við að því að gefnir starfsmenn voru að tengjast gagnagrunninum með sjálfgefnum stillingum.

Í ljósi umtalsverðs fjölda Quay-belgja og þúsunda beiðna sem berast á sekúndu gæti mikill fjöldi gagnagrunnstenginga fræðilega yfirgnæft MySQL tilvikið. Þökk sé eftirliti var vitað að Quay vinnur að meðaltali um 5 þúsund beiðnir á sekúndu. Fjöldi tenginga við gagnagrunninn var nokkurn veginn sá sami. 5 þúsund tengingar voru vel innan getu RDS tilviksins okkar (sem ekki er hægt að segja um tugi þúsunda). Einhverra hluta vegna urðu óvæntir toppar í fjölda tenginga, hins vegar tókum við ekki eftir neinni fylgni við innkomnar beiðnir.

Að þessu sinni vorum við staðráðin í að finna og útrýma uppsprettu vandans, en ekki takmarka okkur við endurræsingu. Til Quay kóðagrunninn breytingar voru gerðar til að takmarka fjölda tenginga við gagnagrunninn fyrir hvern starfsmann gaft. Þetta númer varð færibreyta í uppsetningunni: það varð hægt að breyta því á flugi án þess að byggja nýja gámamynd. Til að komast að því hversu margar tengingar væri hægt að meðhöndla á raunhæfan hátt, keyrðum við nokkrar prófanir í sviðsetningarumhverfi, settum mismunandi gildi til að sjá hvernig þetta hefði áhrif á atburðarás álagsprófunar. Í kjölfarið kom í ljós að Quay byrjar að henda 502 villum þegar fjöldi tenginga fer yfir 10 þúsund.

Við sendum þessa nýju útgáfu strax í framleiðslu og byrjuðum að fylgjast með gagnagrunnstengingaráætluninni. Áður fyrr var stöðinni læst eftir um 20 mínútur. Eftir 30 vandræðalausar mínútur höfðum við von og klukkutíma síðar höfðum við sjálfstraust. Við endurheimtum umferð á síðuna og hófum greiningu eftir slátrun.

Eftir að hafa tekist að komast framhjá vandamálinu sem leiddi til lokunar, við höfum ekki fundið út raunverulegar ástæður þess. Staðfest var að það tengist ekki neinum breytingum á OpenShift 4.3.19, þar sem það sama gerðist á útgáfu 4.3.18, sem áður virkaði með Quay án vandræða.

Það var greinilega eitthvað annað sem leyndist í þyrpingunni.

Ítarleg rannsókn

Quay.io notaði sjálfgefnar stillingar til að tengjast gagnagrunninum í sex ár án vandræða. Hvað breyttist? Það er ljóst að allan þennan tíma hefur umferð á quay.io farið stöðugt vaxandi. Í okkar tilviki leit út fyrir að einhverju þröskuldsgildi hefði verið náð, sem virkaði sem kveikja að snjóflóði tenginga. Við héldum áfram að rannsaka gagnagrunnsskránna eftir seinni bilunina, en fundum engin mynstur eða augljós tengsl.

Í millitíðinni hefur SRE teymið unnið að endurbótum á sýnileika beiðni Quay og heildarþjónustu heilsu. Nýjar mælikvarðar og mælaborð hafa verið settar í notkun, sem sýnir hvaða hlutar bryggjunnar eru mest eftirsóttir frá viðskiptavinum.

Quay.io virkaði fínt til 9. júní. Í morgun (EDT) sáum við aftur verulega aukningu á fjölda gagnagrunnstenginga. Að þessu sinni var engin niðurstaða, þar sem nýja færibreytan takmarkaði fjölda þeirra og leyfði þeim ekki að fara yfir MySQL afköst. Hins vegar, í um hálftíma, tóku margir notendur eftir hægum árangri quay.io. Við söfnuðum fljótt öllum mögulegum gögnum með því að nota vöktunartækin sem bætt var við. Allt í einu kom upp mynstur.

Rétt fyrir aukningu í tengingum var mikill fjöldi beiðna sendar inn í forritaskil forritaskrárinnar. App Registry er lítt þekktur eiginleiki quay.io. Það gerir þér kleift að geyma hluti eins og Helm töflur og ílát með ríkum lýsigögnum. Flestir quay.io notendur vinna ekki með þennan eiginleika, en Red Hat OpenShift notar hann virkan. OperatorHub sem hluti af OpenShift geymir alla rekstraraðila í forritaskránni. Þessir rekstraraðilar mynda grunninn fyrir OpenShift vinnuálagsvistkerfi og samstarfsmiðaða rekstrarlíkan (dagur 2 aðgerðir).

Hver OpenShift 4 þyrping notar rekstraraðila frá innbyggða OperatorHub til að birta skrá yfir rekstraraðila sem eru tiltækir fyrir uppsetningu og veita uppfærslur fyrir þá sem þegar eru uppsettir. Með vaxandi vinsældum OpenShift 4 hefur fjöldi klasa á því um allan heim einnig aukist. Hver þessara klasa hleður niður rekstraraðila efni til að keyra innbyggða OperatorHub, með því að nota forritaskrána inni á quay.io sem bakenda. Í leit okkar að upptökum vandans söknuðum við þess að eftir því sem OpenShift jókst smám saman í vinsældum jókst álagið á einni af sjaldgæfnu quay.io aðgerðunum líka..

Við gerðum smá greiningu á umsóknarumferð App Registry og kíktum á skrásetningarkóðann. Strax komu í ljós annmarkar, vegna þess að fyrirspurnir í gagnagrunninn mynduðust ekki sem best. Þegar álagið var lítið ollu þær engum vandræðum, en þegar álagið jókst urðu þær uppspretta vandræða. App Registry reyndist hafa tvo erfiða endapunkta sem brást ekki vel við auknu álagi: sá fyrsti gaf lista yfir alla pakka í geymslunni, sá síðari skilaði öllum kubbum fyrir pakkann.

Útrýming á orsökum

Næstu viku eyddum við í að fínstilla kóðann á forritaskránni sjálfri og umhverfi hennar. Augljóslega árangurslausar SQL fyrirspurnir voru endurunnar og óþarfa skipanakall var eytt tar (það var keyrt í hvert sinn sem blobbar voru sóttir), skyndiminni var bætt við þar sem hægt var. Við gerðum síðan víðtækar frammistöðuprófanir og bárum saman hraða forritaskrárinnar fyrir og eftir breytingar.

API-beiðnum sem áður tóku allt að hálfa mínútu er nú lokið á millisekúndum. Í næstu viku settum við breytingarnar á framleiðslu og síðan þá hefur quay.io virkað stöðugt. Á þessum tíma voru nokkrir skarpir toppar í umferð á endapunkti App Registry, en endurbæturnar sem gerðar voru komu í veg fyrir truflun á gagnagrunni.

Hvað höfum við lært?

Það er ljóst að hvaða þjónusta sem er reynir að forðast niður í miðbæ. Í okkar tilviki teljum við að nýleg bilun hafi hjálpað til við að gera quay.io betra. Við höfum lært nokkra lykillexíu sem við viljum deila:

  1. Gögn um hver notar þjónustu þína og hvernig er aldrei óþarfur. Vegna þess að Quay „virkaði bara,“ þurftum við aldrei að eyða tíma í að hagræða umferð og stjórna álagi. Allt þetta skapaði falska öryggistilfinningu sem þjónustan gæti stækkað endalaust.
  2. Þegar þjónustan fellur niður, að koma honum aftur í gang er forgangsverkefni.. Vegna þess að Quay þjáðist áfram af læstum gagnagrunni í fyrsta bilun, höfðu staðlaðar verklagsreglur okkar ekki tilætluð áhrif og við gátum ekki endurheimt þjónustuna með því að nota þær. Þetta leiddi til þess að tími þurfti að fara í að greina og safna gögnum í von um að finna rót orsökarinnar - í stað þess að einbeita sér að því að endurheimta virkni.
  3. Metið áhrif hvers þjónustueiginleika. Viðskiptavinir notuðu sjaldan App Registry, svo það var ekki forgangsverkefni hjá teyminu okkar. Þegar sumir vörueiginleikar eru varla notaðir birtast villur þeirra sjaldan og verktaki hættir að fylgjast með kóðanum. Það er auðvelt að verða þeim misskilningi að bráð að þetta eigi að vera svona — þar til allt í einu er þessi aðgerð í miðju stóratviks.

Hvað er næst?

Vinnan við að tryggja stöðugleika þjónustunnar hættir aldrei og við erum stöðugt að bæta hana. Þar sem umferðarmagn heldur áfram að aukast á quay.io viðurkennum við að okkur ber skylda til að gera allt sem við getum til að standa undir trausti viðskiptavina okkar. Þess vegna erum við nú að vinna að eftirfarandi verkefnum:

  1. Settu upp skrifvarða eftirlíkingar af gagnagrunni til að hjálpa þjónustunni að sjá um viðeigandi umferð ef vandamál koma upp með aðal RDS tilvikið.
  2. Uppfærir RDS tilvik. Núverandi útgáfa sjálf er ekki vandamálið. Frekar viljum við einfaldlega fjarlægja fölsku slóðina (sem við fylgdumst með meðan á biluninni stóð); Að halda hugbúnaðinum uppfærðum mun útrýma öðrum þáttum ef stöðvun verður í framtíðinni.
  3. Auka skyndiminni yfir allan þyrpinguna. Við höldum áfram að leita að svæðum þar sem skyndiminni getur dregið úr álagi á gagnagrunninn.
  4. Bætir við eldvegg fyrir vefforrit (WAF) til að sjá hver er að tengjast quay.io og hvers vegna.
  5. Frá og með næstu útgáfu munu Red Hat OpenShift klasar yfirgefa App Registry í þágu rekstrarskrár byggða á gámamyndum sem eru tiltækar á quay.io.
  6. Langtíma skipti fyrir App Registry gæti verið stuðningur við Open Container Initiative (OCI) forskriftir gripa. Það er sem stendur útfært sem innfæddur Quay virkni og verður í boði fyrir notendur þegar forskriftin sjálf er frágengin.

Allt ofangreint er hluti af áframhaldandi fjárfestingu Red Hat í quay.io þar sem við færumst frá litlu „startup-stíl“ teymi yfir í þroskaðan SRE-drifinn vettvang. Við vitum að margir viðskiptavinir okkar treysta á quay.io í daglegu starfi sínu (þar á meðal Red Hat!) og við reynum að vera eins gagnsæ og hægt er varðandi nýleg bilun og áframhaldandi viðleitni til að bæta.

PS frá þýðanda

Lestu líka á blogginu okkar:

Heimild: www.habr.com

Bæta við athugasemd