Að ná forritum sem hrynja strax eftir birtingu
Þann 25. september voru þrjár birtingar merktar sem vel heppnaðar þótt API forritsins hrundi sekúndum inn í hverja ræsingu. Þar sem þær „heppnuðust“ keyrði engin afturköllun, og bakgrunnsathugun felldi þær nokkrum mínútum síðar, og öll síðan fór í 404. Heilsuprófunin taldi hrun í atburðalista hýsingarvettvangsins, sem geymir aðeins síðustu fimm atburði á hverja vél, þannig að hrunlykkja heldur listanum fullum og talan vex aldrei. Nú ber hún saman tímann á nýjasta hruninu í staðinn, og birting sem hrynur í lykkju mistekst og endurheimtir fyrri útgáfuna.
Það sem birting bíður eftir
Þegar þú birtir forrit með bakenda á Mythex er nýja útgáfan sett út á vélar hjá hýsingarvettvangi okkar, og heilsuprófun ákveður hvort birtingin fór í loftið eða mistókst. Ef hún mistókst keyrir afturköllun og setur fyrri útgáfuna aftur.
Erfiði hlutinn er að „ræst“ er ekki það sama og „þjónar“. Vettvangurinn skráir vél sem ræsta um leið og hún er upp. Forrit sem hrynur sekúndu inn í ræsingu er endurræst samstundis, og augnabliki síðar skráist það aftur sem ræst. Heilsuprófunin hafði því vaxið í nokkur lög í áranna rás:
- Líttu tvisvar. Eftir að vél skráist sem ræst er beðið stutta stund og litið aftur. Hrun við ræsingu fellur oft í annarri skoðuninni.
- Fylgstu með hrunlykkjum. Ef vettvangurinn segir að vél hafi hrunið aftur og aftur og hann hafi gefist upp á að endurræsa hana, mistekst birtingin.
- Teldu hrun frá því birtingin hófst. Tvær „ræst“-skoðanir geta spannað endurræsingu. Ef eitthvert hrun hefur orðið síðan þessi birting hófst er litið í þriðja sinn; ef hrunum er fleiri en í síðustu skoðun er forritið ekki að halda sér uppi.
Þriðja athugunin er sú sem brást hér.
Af hverju talan breyttist ekki
Upplýsingarnar um hrun koma úr atburðalista hverrar vélar: ræsingar, útgöngur og endurræsingar. Vettvangurinn geymir aðeins síðustu fimm atburði á hverja vél.
Ímyndaðu þér forrit sem hrynur 2,5 sekúndum inn í hverja ræsingu, eins og eitt þeirra gerði. Hver lota bætir við hruni og ræsingu. Eftir nokkrar lotur er listinn fullur. Frá þeim tímapunkti þrýstir hver nýr atburður gömlum út. Listinn rennur áfram en hefur alltaf um það bil sömu blöndu: nokkur hrun, nokkrar ræsingar.
Þannig að „hversu mörg hrun frá því birtingin hófst“ skilaði sömu tölu í hverri skoðun. Önnur skoðunin sá til dæmis tvö hrun. Þriðja skoðunin sá líka tvö, þó önnur hrun, en sama fjölda. Athugunin ályktaði að hruninu væri hætt og samþykkti birtinguna.
Það gerðist þrisvar sinnum 25. september, á tveimur forritum. Í hvert skipti:
- var birtingin merkt sem lifandi,
- keyrði engin afturköllun, því ekkert hafði mistekist,
- felldi afstemmingarmaðurinn okkar, bakgrunnsverk sem athugar birtingar eftir á, birtinguna nokkrum mínútum síðar,
- og öll síðan skilaði 404.
Birting sem mistekst á réttum tíma er hægt að endurheimta: afturköllunin setur fyrri útgáfuna aftur. Birting sem mistekst nokkrum mínútum of seint, eftir að hafa verið lýst vel heppnuð, hefur þegar sleppt afturköllun sinni.
Hvernig við fundum þetta
Við endurgerðum þetta staðbundið: tókum virkt API, leyfðum því að fara að sofa og birtum það síðan aftur með breytingu sem hrundi við ræsingu. Heilsuprófunin merkti það sem lifandi.
Það passaði við framleiðsluna: í hverri af þremur birtingunum hrundi forritið sekúndum inn í hverja ræsingu, en hrunatalan sem athugunin bar saman hækkaði aldrei milli skoðana.
Lagfæringin: berðu saman nýjasta hrunið, ekki töluna
Í stað þess að telja hrun skoðar athugunin nú tímann á nýjasta hruninu frá því birtingin hófst.
Ef önnur skoðunin sýnir hrun eftir að birtingin hófst er beðið og litið í þriðja sinn. Ef nýjasta hrunið í þriðju skoðuninni er síðar en nýjasta hrunið í annarri skoðun, hefur vélin hrunið aftur á milli. Hún er ekki að halda sér uppi, og birtingin mistekst með skilaboðum um að vélin hafi hrunið endurtekið frá birtingu og sé enn að endurræsast.
Þetta virkar sama hversu stuttur atburðalistinn er. Rennandi gluggi af fimm atburðum getur falið hversu mörg hrunin voru, en hann getur ekki falið að nýtt hrun varð rétt í þessu: nýjasti atburðurinn er alltaf sá sem er geymdur.
Með þessari breytingu hegðar staðbundna endurgerðin sér rétt: birtingin mistekst og fyrri myndin er endurheimt. Það er líka próf sem hermir eftir hegðun vettvangsins — hver skoðun bætir við hruni og ræsingu og klippir listann niður í fimm — og athugar að niðurstaðan sé bilun, ekki staðist.
Það sem við lærðum
- Þekktu lögun gagnanna sem þú ert að telja. Talning yfir lista með þaki hættir að þýða nokkuð þegar listinn er fullur. Þakið var ekki falið; við höfðum bara ekki hannað athugunina með tilliti til þess.
- Frekar „gerðist eitthvað nýtt?“ en „hversu mörg gerðust?“ Nýjasti tímastimpillinn lifir af afklippingu. Heildartala gerir það ekki.
- Seint bilun er verri en snemma. Sama bilaða smíðin er hættulaus ef birtingin mistekst og rúllar til baka, en tekur síðuna niður ef hún er fyrst lýst vel heppnuð.
- Endurgerðu við raunverulegar aðstæður. Gallinn þurfti vél sem var þegar búin að hrynja nógu oft til að fylla atburðalistann sinn. Ein stutt hrun í prófi hefði ekki sýnt hann.
Þessi lagfæring tengist annarri frá sama degi, sem tryggði að afturköllunin setur gömlu útgáfuna aftur í stað þess að eyða henni: misheppnuð endurbirting eyðir aldrei virkum bakenda. Ef þitt eigið forrit mistekst að birtast af því það hrynur við ræsingu, eru úrræðaleit birtinga í skjölunum og leiðbeiningin okkar um villuleit á forriti sem gervigreind smíðaði góðir staðir til að byrja.