Misheppnuð endurbirting eyðir aldrei virkum bakenda
Þann 25. september eyddi misheppnuð endurbirting bakenda forrits sem hafði verið í gangi og virkaði í um tvo og hálfan tíma. Kóðinn sem afturkallar misheppnaða birtingu fjarlægði hvern einasta netþjónsforrit sem birtingin hafði snert, þar á meðal þau sem þegar þjónuðu notendum áður en hún hófst. Nú eru einungis forrit sem birting bjó til eytt, og forrit sem þegar var til er sett aftur á nákvæmlega þá útgáfu sem það keyrði áður. Tvær framhaldslagfæringar sama dag tryggðu að afturköllunin keyrir líka þegar keyrslutól hýsingaraðilans sjálfs bilar, og að heilbrigt forrit er ekki sagt bilað bara af því það var sofandi.
Hvernig bakendi er birtur
Þegar Mythex forritið þitt er með bakenda, það er API eða netþjónn en ekki bara kyrrstæðar skrár, byggir birting hann úr Dockerfile (uppskrift að því að pakka forritinu í mynd) og setur myndina út á vélar hjá hýsingaraðila okkar. Síðan bíður heilsuprófun eftir því að nýja útgáfan komist upp og haldist uppi áður en birtingin er merkt sem lifandi.
Ef eitthvað bilar á leiðinni keyrir afturköllun til að snúa því við. Það skiptir meira máli en nánast allt annað í birtingu að hún virki rétt, því hún keyrir einmitt þegar eitthvað er þegar að fara úrskeiðis.
Vandamál 1: afturköllun eyddi því sem hún átti að endurheimta
Afturköllunin hélt lista yfir netþjónsforritin sem birting hafði sett út á, og við bilun eyddi hún þeim öllum. Það er rétt við fyrstu birtingu: forritið var búið til fyrir augnabliki, ekkert reiðir sig á það, og eyðing skilur allt eftir eins og það var.
Það er einmitt rangt við endurbirtingu. Forritið var þegar til og þjónaði raunverulegum notendum. Þann 25. september var API forrits, sem hafði verið í gangi í um tvo og hálfan tíma, eytt af misheppnaðri endurbirtingu.
Á sama stað í kóðanum leyndist önnur bilunarleið. Þegar eyðingin fór ekki í gegn var bilaða nýja myndin eftir á vélunum, á meðan við sögðum eigandanum að núverandi síða væri enn í loftinu. Þegar heilsuprófunin getur fallið er nýja myndin þegar búin að fara út á allar vélarnar. Að gera ekkert er ekki það sama og að afturkalla.
Lagfæringin: eyða aðeins því sem þú bjóst til, endurheimta hitt
Hver birting skráir nú fyrir sérhvert netþjónsforrit sem hún snertir:
- hvort þessi birting bjó það til, og
- ef ekki, hvaða mynd það keyrði rétt áður.
Við bilun fær hvert forrit eina af þremur meðhöndlunum:
- Búið til af þessari birtingu: eyða því, eins og áður.
- Var til fyrir, fyrri mynd þekkt: setja fyrri myndina út aftur með sömu stillingum. Engin smíði, aðeins myndin færist til baka.
- Var til fyrir, fyrri mynd óþekkt: láta það í friði. Forrit sem var til er aldrei eytt, jafnvel þegar ekki tekst að endurheimta það.
Reglurnar eru lítil hrein aðgerð með eigin prófum, þannig að ákvörðunin getur ekki hrokkið aftur í „eyða öllu“ án þess að próf falli.
Vandamál 2: keyrslutól hýsingaraðilans gat brugðist áður en við höfðum skráð hvernig átti að afturkalla
Skömmu eftir þessa lagfæringu fundum við gat á henni. Keyrslutól hýsingaraðilans keyrir eigin reykprófanir: ef nýju vélarnar hrynja hættir það með villu. En það gerir það eftir að nýja myndin er þegar komin út á vélarnar.
Kóðinn okkar skráði forrit til afturköllunar fyrst þegar tólið skilaði árangri. Þegar tólið sjálft felldi birtinguna var forritið ekki komið á afturköllunarlistann, þannig að ekkert var endurheimt. Á staging-umhverfinu okkar hélt bilaða myndin áfram að þjóna þegar endurbirting mistókst.
Lagfæringin: skrá afturköllunina áður en byrjað er
Forritið er nú skráð til afturköllunar, með því hvort það var búið til og hvaða mynd það keyrði, um leið og það er undirbúið og áður en nokkuð er sett út á það. Hvað sem bregst eftir það veit afturköllunin hvað á að setja til baka. Við staðfestum þetta staðbundið: bilaða endurbirtingin féll í reykprófunum sjálfs keyrslutólsins, og fyrri útgáfan hélt áfram að svara.
Vandamál 3: sofandi forrit var fellt sem „fór aldrei í gang“
Birt forrit á Mythex sofa þegar þau eru aðgerðalaus til að spara inneignir þínar. Endurbirting skilur sofandi vél eftir stöðvaða, þannig að heilsuprófunin þarf að vekja hana. Hún bað hýsingaraðilann um að ræsa vélina einu sinni og hunsaði svarið.
Þann 25. september fór þessi eina ræsingarbeiðni út í loftið. Heilbrigt API lá stöðvað allan fimm mínútna gluggann í heilsuprófuninni og var fellt með „1 vél fór aldrei í gang (síðasta staða: stopped)“.
Hýsingaraðilinn hafnar stundum ræsingu. Þegar við prófuðum þetta skilaði hann „lease currently held“ árekstri án þess að við kölluðum hann fram, og hann hafnar ræsingum meðan vél er í uppfærslu.
Lagfæringin: halda áfram að biðja og banka á dyrnar
Heilsuprófunin:
- biður aftur um að ræsa stoppaða vél á 20 sekúndna fresti meðan hún bíður,
- skráir hvað hýsingaraðilinn svaraði þegar hann hafnar, og
- sendir eina venjulega beiðni á forritið, eins og gestur myndi gera. Proxy hýsingaraðilans vekur sofandi vél þegar beiðni kemur.
Við prófuðum þetta á raunverulegum hýsingaraðila með einnota forriti þar sem fyrsta ræsing var hafnað. Fyrir lagfæringuna mistókst birtingin eftir 91 sekúndu. Eftir hana var hún birt á 20 sekúndum. Forrit sem hrynur raunverulega við ræsingu mistekst enn, eins og það á að gera.
Það sem við lærðum
- Afturköllun verður að greina á milli nýs og þess sem var til fyrir. „Afturkalla“ á því sem þú bjóst til þýðir eyða. „Afturkalla“ á því sem var þegar til staðar þýðir endurheimta. Að meðhöndla þetta eins er sú leið sem öryggisbúnaður eyðir virku forriti.
- Skráðu hvernig á að afturkalla áður en þú aðhefst. Ef afturköllunin er aðeins skráð eftir að skref heppnast, skilur skref sem mistekst á miðri leið ekkert eftir til að afturkalla með.
- Hunsaðu aldrei svar við beiðni sem þú treystir á. Eitt hunsað „nei“ breytti heilbrigðu forriti í misheppnaða birtingu.
Ein tengd lagfæring frá sama degi: þegar forrit hrynja strax eftir birtingu. Um það sem gerist þegar birting mistekst hjá þér sjálfum, sjá úrræðaleit birtinga í skjölunum.