PiezÄ«me. tulk.: augusta sÄkumÄ Red Hat publiski runÄja par pieejamÄ«bas problÄmu risinÄÅ”anu, ar kurÄm tÄ pakalpojuma lietotÄji bija saskÄruÅ”ies iepriekÅ”Äjos mÄneÅ”os Quay.io (tas ir balstÄ«ts uz konteinera attÄlu reÄ£istru, ko uzÅÄmums saÅÄma kopÄ ar CoreOS iegÄdi). NeatkarÄ«gi no jÅ«su intereses par Å”o pakalpojumu kÄ tÄdu, uzÅÄmuma SRE inženieru ceļŔ, lai diagnosticÄtu un novÄrstu negadÄ«juma cÄloÅus, ir pamÄcoÅ”s.
19. maijÄ agri no rÄ«ta (Austrumu vasaras laiks, EDT) quay.io pakalpojums avarÄja. NegadÄ«jums skÄra gan quay.io patÄrÄtÄjus, gan atvÄrtÄ koda projektus, izmantojot quay.io kÄ platformu programmatÅ«ras izveidei un izplatÄ«Å”anai. Red Hat augstu vÄrtÄ abu uzticÄ«bu.
SRE inženieru komanda nekavÄjoties iesaistÄ«jÄs un centÄs pÄc iespÄjas ÄtrÄk stabilizÄt Quay pakalpojumu. TomÄr, kamÄr viÅi to darÄ«ja, klienti zaudÄja iespÄju nospiest jaunus attÄlus un tikai reizÄm varÄja izvilkt esoÅ”os. NezinÄma iemesla dÄļ quay.io datubÄze tika bloÄ·Äta pÄc pakalpojuma mÄrogoÅ”anas lÄ«dz pilnai jaudai.
Ā«Kas ir mainÄ«jies?" - tas ir pirmais jautÄjums, kas parasti tiek uzdots Å”Ädos gadÄ«jumos. MÄs pamanÄ«jÄm, ka neilgi pirms problÄmas OpenShift Dedicated klasteris (kurÄ darbojas quay.io) sÄka atjauninÄt uz versiju 4.3.19. TÄ kÄ quay.io darbojas ar Red Hat OpenShift Dedicated (OSD), regulÄri atjauninÄjumi bija regulÄri un nekad nav radÄ«juÅ”i problÄmas. TurklÄt pÄdÄjo seÅ”u mÄneÅ”u laikÄ mÄs esam vairÄkas reizes jauninÄjuÅ”i Quay klasterus bez jebkÄdiem pakalpojumu pÄrtraukumiem.
KamÄr mÄs mÄÄ£inÄjÄm atjaunot pakalpojumu, citi inženieri sÄka sagatavot jaunu OSD klasteru ar iepriekÅ”Äjo programmatÅ«ras versiju, lai, ja kaut kas notiktu, viÅi varÄtu tajÄ izvietot visu.
PamatcÄloÅu analÄ«ze
Galvenais kļūmes simptoms bija desmitiem tÅ«kstoÅ”u datu bÄzes savienojumu lavÄ«na, kas padarÄ«ja MySQL gadÄ«jumu faktiski nederÄ«gu. Tas apgrÅ«tinÄja problÄmas diagnosticÄÅ”anu. MÄs esam noteikuÅ”i ierobežojumu maksimÄlajam savienojumu skaitam no klientiem, lai palÄ«dzÄtu SRE komandai novÄrtÄt problÄmu. MÄs nepamanÄ«jÄm nekÄdu neparastu trafiku datu bÄzÄ: patiesÄ«bÄ lielÄkÄ daļa pieprasÄ«jumu tika izlasÄ«ti un tikai daži tika rakstÄ«ti.
MÄs arÄ« mÄÄ£inÄjÄm identificÄt datu bÄzes trafika modeli, kas varÄtu izraisÄ«t Å”o lavÄ«nu. TomÄr mÄs nevarÄjÄm atrast žurnÄlos nekÄdus rakstus. Gaidot, kad bÅ«s gatavs jaunais klasteris ar OSD 4.3.18, mÄs turpinÄjÄm mÄÄ£inÄt palaist quay.io pods. Katru reizi, kad klasteris sasniedza pilnu jaudu, datubÄze iesaldÄs. Tas nozÄ«mÄja, ka papildus visiem quay.io podiem bija jÄrestartÄ RDS instance.
LÄ«dz vakaram mÄs stabilizÄjÄm pakalpojumu tikai lasÄ«Å”anas režīmÄ un atspÄjojÄm pÄc iespÄjas vairÄk nebÅ«tisku funkciju (piemÄram, nosaukumvietas atkritumu savÄkÅ”anu), lai samazinÄtu datu bÄzes slodzi. SaldÄÅ”ana ir apstÄjusies bet iemesls tÄ arÄ« netika atrasts. Jaunais OSD klasteris bija gatavs, un mÄs migrÄjÄm pakalpojumu, savienojÄm trafiku un turpinÄjÄm uzraudzÄ«bu.
Quay.io stabili strÄdÄja pie jaunÄ OSD klastera, tÄpÄc mÄs atgriezÄmies datu bÄzes žurnÄlos, taÄu nevarÄjÄm atrast korelÄciju, kas izskaidrotu aizsprostojumus. OpenShift inženieri sadarbojÄs ar mums, lai saprastu, vai Red Hat OpenShift 4.3.19 izmaiÅas var radÄ«t problÄmas ar Quay. TomÄr nekas netika atrasts, un ProblÄmu nebija iespÄjams reproducÄt laboratorijas apstÄkļos.
OtrÄ neveiksme
28. maijÄ, Ä«si pirms pusdienlaika EDT, quay.io atkal avarÄja ar tÄdu paÅ”u simptomu: datubÄze tika bloÄ·Äta. Un atkal mÄs pielikÄm visas pÅ«les izmeklÄÅ”anai. PirmkÄrt, bija nepiecieÅ”ams atjaunot servisu. TomÄr Å”oreiz rebooting RDS un restartÄjot quay.io pods neko nedarÄ«ja: kÄrtÄjÄ savienojumu lavÄ«na ir pÄrÅÄmusi bÄzi. Bet kÄpÄc?
Quay ir rakstÄ«ts Python valodÄ, un katrs pods darbojas kÄ viens monolÄ«ts konteiners. Konteinera izpildlaikÄ vienlaikus tiek izpildÄ«ti daudzi paralÄli uzdevumi. MÄs izmantojam bibliotÄku gevent saskaÅÄ ar gunicorn lai apstrÄdÄtu tÄ«mekļa pieprasÄ«jumus. Kad pieprasÄ«jums nonÄk Quay (izmantojot mÅ«su paÅ”u API vai Docker API), tam tiek pieŔķirts gevent darbinieks. Parasti Å”im darbiniekam jÄsazinÄs ar datu bÄzi. PÄc pirmÄs kļūmes mÄs atklÄjÄm, ka programmas darbinieki izveido savienojumu ar datu bÄzi, izmantojot noklusÄjuma iestatÄ«jumus.
Å emot vÄrÄ ievÄrojamo Quay podziÅu skaitu un tÅ«kstoÅ”iem ienÄkoÅ”o pieprasÄ«jumu sekundÄ, liels skaits datu bÄzes savienojumu teorÄtiski varÄtu pÄrslogot MySQL gadÄ«jumu. Pateicoties monitoringam, bija zinÄms, ka Quay apstrÄdÄ vidÄji 5 tÅ«kstoÅ”us pieprasÄ«jumu sekundÄ. Savienojumu skaits ar datu bÄzi bija aptuveni vienÄds. 5 tÅ«kstoÅ”i savienojumu bija mÅ«su RDS instances iespÄju robežÄs (ko nevar teikt par desmitiem tÅ«kstoÅ”u). KÄdu iemeslu dÄļ bija negaidÄ«ti pieslÄgumu skaita pieaugumstomÄr mÄs nepamanÄ«jÄm nekÄdu korelÄciju ar ienÄkoÅ”ajiem pieprasÄ«jumiem.
Å oreiz mÄs bijÄm apÅÄmÄ«bas pilni atrast un novÄrst problÄmas avotu, nevis aprobežoties ar pÄrstartÄÅ”anu. Uz Quay kodu bÄzi tika veiktas izmaiÅas, lai ierobežotu savienojumu skaitu ar datu bÄzi katram darbiniekam gevent. Å is numurs kļuva par parametru konfigurÄcijÄ: kļuva iespÄjams to mainÄ«t lidojuma laikÄ, neveidojot jaunu konteinera attÄlu. Lai noskaidrotu, cik savienojumus var reÄli apstrÄdÄt, mÄs veicÄm vairÄkus testus iestudÄjuma vidÄ, iestatot dažÄdas vÄrtÄ«bas, lai redzÄtu, kÄ tas ietekmÄs slodzes testÄÅ”anas scenÄrijus. RezultÄtÄ tika atklÄts, ka Quay sÄk mest 502 kļūdas, kad pieslÄgumu skaits pÄrsniedz 10 tÅ«kstoÅ”us.
MÄs nekavÄjoties izvietojÄm Å”o jauno versiju ražoÅ”anÄ un sÄkÄm uzraudzÄ«t datu bÄzes savienojuma grafiku. AgrÄk bÄze tika bloÄ·Äta apmÄram pÄc 20 minÅ«tÄm. PÄc 30 bezproblÄmÄm minÅ«tÄm mums bija cerÄ«ba, un stundu vÄlÄk mums bija pÄrliecÄ«ba. MÄs atjaunojÄm vietnes trafiku un sÄkÄm pÄcnÄves analÄ«zi.
Kad izdevÄs apiet problÄmu, kas noveda pie bloÄ·ÄÅ”anas, mÄs neesam noskaidrojuÅ”i tÄs patiesos iemeslus. Tika apstiprinÄts, ka tas nav saistÄ«ts ar izmaiÅÄm OpenShift 4.3.19, jo tas pats notika ar versiju 4.3.18, kas iepriekÅ” strÄdÄja ar Quay bez problÄmÄm.
KlasterÄ« nepÄrprotami slÄpÄs kaut kas cits.
DetalizÄts pÄtÄ«jums
Quay.io izmantoja noklusÄjuma iestatÄ«jumus, lai seÅ”us gadus bez problÄmÄm izveidotu savienojumu ar datubÄzi. Kas mainÄ«jÄs? Ir skaidrs, ka visu Å”o laiku satiksme uz quay.io ir nepÄrtraukti pieaugusi. MÅ«su gadÄ«jumÄ izskatÄ«jÄs, ka ir sasniegta kÄda sliekÅ”Åa vÄrtÄ«ba, kas kalpoja par savienojumu lavÄ«nas izraisÄ«tÄju. MÄs turpinÄjÄm pÄtÄ«t datu bÄzes žurnÄlus pÄc otrÄs neveiksmes, taÄu neatradÄm nekÄdus modeļus vai acÄ«mredzamas attiecÄ«bas.
Pa to laiku SRE komanda ir strÄdÄjusi pie Quay pieprasÄ«juma novÄrojamÄ«bas un vispÄrÄjÄ pakalpojuma stÄvokļa uzlabojumiem. Ir izvietoti jauni rÄdÄ«tÄji un informÄcijas paneļi, kas parÄda, kuras piestÄtnes daļas ir visvairÄk pieprasÄ«tas no klientiem.
Quay.io darbojÄs labi lÄ«dz 9. jÅ«nijam. Å orÄ«t (EDT) atkal novÄrojÄm ievÄrojamu datu bÄzes savienojumu skaita pieaugumu. Å oreiz dÄ«kstÄves nebija, jo jaunais parametrs ierobežoja to skaitu un neļÄva tiem pÄrsniegt MySQL caurlaidspÄju. TomÄr apmÄram pusstundu daudzi lietotÄji atzÄ«mÄja quay.io lÄnu darbÄ«bu. MÄs Ätri savÄcÄm visus iespÄjamos datus, izmantojot pievienotos uzraudzÄ«bas rÄ«kus. PÄkÅ”Åi parÄdÄ«jÄs modelis.
TieÅ”i pirms savienojumu pieauguma App Registry API tika iesniegts liels skaits pieprasÄ«jumu. LietotÅu reÄ£istrs ir maz zinÄma quay.io funkcija. Tas ļauj saglabÄt tÄdas lietas kÄ Helm diagrammas un konteinerus ar bagÄtÄ«giem metadatiem. LielÄkÄ daļa quay.io lietotÄju nedarbojas ar Å”o funkciju, bet Red Hat OpenShift to aktÄ«vi izmanto. OperatorHub kÄ daļa no OpenShift visus operatorus saglabÄ lietotÅu reÄ£istrÄ. Å ie operatori veido pamatu OpenShift darba slodzes ekosistÄmai un uz partneri orientÄtam darbÄ«bas modelim (2. dienas operÄcijas).
KatrÄ OpenShift 4 klasterÄ« tiek izmantoti operatori no iebÅ«vÄtÄ OperatorHub, lai publicÄtu instalÄÅ”anai pieejamo operatoru katalogu un nodroÅ”inÄtu jau instalÄto operatoru atjauninÄjumus. Pieaugot OpenShift 4 popularitÄtei, ir palielinÄjies arÄ« klasteru skaits tajÄ visÄ pasaulÄ. Katrs no Å”iem klasteriem lejupielÄdÄ operatora saturu, lai palaistu iebÅ«vÄto OperatorHub, kÄ aizmugursistÄmu izmantojot lietotÅu reÄ£istru, kas atrodas quay.io. MeklÄjot problÄmas avotu, mÄs palaidÄm garÄm faktu, ka, OpenShift pakÄpeniski augot popularitÄtei, palielinÄjÄs arÄ« vienas no reti izmantotajÄm quay.io funkcijÄm slodze..
MÄs veicÄm lietotÅu reÄ£istra pieprasÄ«jumu trafika analÄ«zi un apskatÄ«jÄm reÄ£istra kodu. TÅ«lÄ«t tika atklÄtas nepilnÄ«bas, kuru dÄļ vaicÄjumi datu bÄzei netika veidoti optimÄli. Kad slodze bija zema, tie nesagÄdÄja nekÄdas nepatikÅ”anas, bet, slodzei palielinoties, kļuva par problÄmu avotu. Lietojumprogrammu reÄ£istram izrÄdÄ«jÄs divi problemÄtiski galapunkti, kas slikti reaÄ£Äja uz pieaugoÅ”o slodzi: pirmais sniedza visu repozitorijÄ esoÅ”o pakotÅu sarakstu, otrais atgrieza visus pakotnes blokus.
CÄloÅu likvidÄÅ”ana
NÄkamÄs nedÄļas laikÄ mÄs optimizÄjÄm paÅ”a lietotÅu reÄ£istra kodu un tÄ vidi. AcÄ«mredzami neefektÄ«vie SQL vaicÄjumi tika pÄrstrÄdÄti un nevajadzÄ«gi komandu izsaukumi tika novÄrsti tar (tas tika palaists katru reizi, kad tika izgÅ«ti blobi), keÅ”atmiÅa tika pievienota, kur vien iespÄjams. PÄc tam mÄs veicÄm plaÅ”u veiktspÄjas pÄrbaudi un salÄ«dzinÄjÄm lietotÅu reÄ£istra Ätrumu pirms un pÄc izmaiÅÄm.
API pieprasÄ«jumi, kas iepriekÅ” ilga lÄ«dz pusminÅ«tei, tagad tiek izpildÄ«ti milisekundÄs. NÄkamajÄ nedÄÄ¼Ä mÄs izvietojÄm izmaiÅas ražoÅ”anÄ, un kopÅ” tÄ laika quay.io darbojas stabili. Å ajÄ laikÄ lietotÅu reÄ£istra galapunktÄ bija vairÄki krasi trafika pieaugumi, taÄu veiktie uzlabojumi novÄrsa datu bÄzes pÄrtraukumus.
Ko mÄs esam iemÄcÄ«juÅ”ies?
Ir skaidrs, ka jebkurÅ” pakalpojums cenÅ”as izvairÄ«ties no dÄ«kstÄves. MÅ«su gadÄ«jumÄ mÄs uzskatÄm, ka nesenie pÄrtraukumi ir palÄ«dzÄjuÅ”i uzlabot vietni quay.io. MÄs esam guvuÅ”i dažas galvenÄs atziÅas, ar kurÄm vÄlamies dalÄ«ties:
Dati par to, kas un kÄ izmanto jÅ«su pakalpojumu, nekad nav lieki. TÄ kÄ Quay ātikai strÄdÄjaā, mums nekad nebija jÄtÄrÄ laiks satiksmes optimizÄÅ”anai un slodzes pÄrvaldÄ«bai. Tas viss radÄ«ja maldÄ«gu droŔības sajÅ«tu, ko pakalpojums varÄja mÄrogot bezgalÄ«gi.
Kad pakalpojums pazÅ«d, tÄ atjaunoÅ”ana un darbÄ«ba ir galvenÄ prioritÄte.. TÄ kÄ pirmÄ pÄrtraukuma laikÄ Quay turpinÄja ciest no bloÄ·Ätas datu bÄzes, mÅ«su standarta procedÅ«rÄm nebija paredzÄtÄ efekta, un mÄs nevarÄjÄm atjaunot pakalpojumu, izmantojot tÄs. Tas noveda pie situÄcijas, kad laiks bija jÄpavada, analizÄjot un apkopojot datus, cerot atrast galveno cÄloni, nevis koncentrÄt visus spÄkus uz funkcionalitÄtes atjaunoÅ”anu.
NovÄrtÄjiet katra pakalpojuma funkcijas ietekmi. Klienti reti izmantoja App Registry, tÄpÄc tÄ nebija mÅ«su komandas prioritÄte. Ja dažas produkta funkcijas tiek tik tikko izmantotas, to kļūdas parÄdÄs reti, un izstrÄdÄtÄji pÄrtrauc koda uzraudzÄ«bu. Ir viegli kļūt par upuri maldÄ«gam priekÅ”statam, ka tÄ tam vajadzÄtu bÅ«t, lÄ«dz pÄkÅ”Åi Ŕī funkcija nonÄk liela incidenta centrÄ.
Ko tÄlÄk?
Darbs, lai nodroÅ”inÄtu pakalpojuma stabilitÄti, neapstÄjas, un mÄs to pastÄvÄ«gi pilnveidojam. TÄ kÄ satiksmes apjoms vietnÄ quay.io turpina pieaugt, mÄs atzÄ«stam, ka esam atbildÄ«gi par visu iespÄjamo, lai attaisnotu mÅ«su klientu uzticÄ«bu. TÄpÄc Å”obrÄ«d strÄdÄjam pie Å”Ädiem uzdevumiem:
Izvietojiet tikai lasÄmas datu bÄzes replikas, lai palÄ«dzÄtu pakalpojumam apstrÄdÄt atbilstoÅ”u trafiku, ja rodas problÄmas ar primÄro RDS gadÄ«jumu.
RDS instances atjauninÄÅ”ana. PaÅ”reizÄjÄ versija pati par sevi nav problÄma. DrÄ«zÄk mÄs vienkÄrÅ”i vÄlamies noÅemt viltus pÄdas (kurai mÄs sekojÄm neveiksmes laikÄ); ProgrammatÅ«ras atjauninÄÅ”ana nÄkotnÄ novÄrsÄ«s citu faktoru.
Papildu keÅ”atmiÅa visÄ klasterÄ«. MÄs turpinÄm meklÄt apgabalus, kur keÅ”atmiÅa var samazinÄt datu bÄzes slodzi.
TÄ«mekļa lietojumprogrammu ugunsmÅ«ra (WAF) pievienoÅ”ana, lai redzÄtu, kurÅ” un kÄpÄc izveido savienojumu ar quay.io.
SÄkot ar nÄkamo laidienu, Red Hat OpenShift kopas atteiksies no lietotÅu reÄ£istra par labu operatoru katalogiem, pamatojoties uz konteineru attÄliem, kas pieejami vietnÄ quay.io.
IlgtermiÅa lietotÅu reÄ£istra aizstÄjÄjs varÄtu bÅ«t Open Container Initiative (OCI) artefaktu specifikÄciju atbalsts. PaÅ”laik tÄ ir ieviesta kÄ vietÄjÄ Quay funkcionalitÄte un bÅ«s pieejama lietotÄjiem, kad pati specifikÄcija bÅ«s pabeigta.
Viss iepriekÅ” minÄtais ir daļa no Red Hat pastÄvÄ«gajiem ieguldÄ«jumiem quay.io, jo mÄs pÄrejam no nelielas "startÄÅ”anas stila" komandas uz nobrieduÅ”u SRE virzÄ«tu platformu. MÄs zinÄm, ka daudzi mÅ«su klienti savÄ ikdienas darbÄ (tostarp Red Hat!) paļaujas uz quay.io, un mÄs cenÅ”amies pÄc iespÄjas pÄrskatÄmÄk runÄt par nesenajiem pÄrtraukumiem un paÅ”reizÄjiem centieniem uzlabot.