Tovuti Tuli Sasa Zinabaki Hewani Zinapochapishwa Upya
Kuchapisha upya tovuti tuli kwenye Mythex kulikuwa kunafuta faili za moja kwa moja kwanza kisha kupakia build mpya, kwa hiyo wakati wa upakiaji baadhi ya wageni walipata ukurasa wa 404 au ukurasa ambao scripts zake zilikosekana. Upakiaji ulioshindwa ungeweza kuacha tovuti tupu au nusu mpya. Sasa build mpya inaandikwa juu ya ile ya zamani, kurasa zikiwa za mwisho, na mabaki yanaondolewa dakika chache baadaye. Marekebisho ya pili yanafanya uchapishaji upya uonekane ndani ya sekunde badala ya dakika moja — au, kwa faili kama nembo, hadi siku nzima.
Tovuti tuli inavyotolewa
Tovuti tuli ni ile inayojumuisha faili tu: kurasa za HTML, JavaScript, CSS, picha. Unapoichapisha kwenye Mythex, tunaijenga, tunapakia matokeo kwenye hifadhi ya vitu chini ya folda ya tovuti yako, na kuitoa kupitia mtandao wa edge — seva zilizo karibu na wageni wako ambazo huchukua faili kutoka hifadhini na kuhifadhi nakala zake kwa muda. (Ikiwa ni mpya kwako, mwongozo wetu wa CDN ni nini unaeleza wazo hilo.)
Mambo mawili yalikuwa na makosa: mpangilio ambao uchapishaji upya ulibadilisha faili, na muda ambao nakala za zamani ziliwekwa.
Tatizo 1: upakiaji ulifuta tovuti kwanza
Uchapishaji upya ulifuta kila kitu kwenye folda ya tovuti, kisha kupakia build mpya. Kwa muda wote upakiaji ulichukua — sekunde 12 kwa tovuti ya faili 250 kwenye jaribio letu la ndani — mgeni ambaye ombi lake halikuwa tayari kwenye edge alipata 404, au ukurasa wa HTML ambao scripts zake zilirudisha 404.
Upakiaji ulioshindwa ulikuwa mbaya zaidi. Folda ilikuwa tayari tupu, na kwenye mojawapo ya njia mbili za upakiaji index.html mpya inaweza kutua kabla ya faili lililoshindwa. Uchapishaji ulioripotiwa kama umeshindwa unaweza kuacha tovuti nusu mpya ikiwa hewani.
Suluhisho: andika juu, kurasa za mwisho, futa baadaye
- Usifute kwanza. Build mpya inapakiwa juu ya ile ya zamani.
- Assets kabla ya kurasa. Ukurasa unataja scripts na styles unazozihitaji, kwa hiyo kurasa zinapakiwa za mwisho. Hadi kurasa mpya zifike, wageni wanapata ukurasa wa zamani, unaotaja assets za zamani, ambazo bado zipo. Zikifika, assets mpya zinazotajwa tayari ziko mahali pake.
- Ondoa mabaki baadaye. Kabla ya upakiaji, tunaorodhesha vitu vinavyounda tovuti. Dakika tatu baada ya upakiaji kufanikiwa, chochote kwenye orodha hiyo ambacho build mpya haikukiandika upya kinafutwa. Dakika tatu ni zaidi ya sekunde 60 ambazo ukurasa unaweza kuhifadhiwa kwenye edge na kivinjari, kwa hiyo mgeni bado ameshikilia ukurasa wa zamani anaweza kupata assets zinazotajwa nao.
- Ukiwa na shaka, usifute chochote. Ikiwa orodha ya kabla ya upakiaji itashindwa, hakuna kinachosafishwa. Faili zilizobaki hazina madhara, na uchapishaji unaofuata unazisafisha. Kufuta bila kujua kilichokuwepo ndiyo njia ambayo tovuti huishia tupu.
Upakiaji ulioshindwa sasa unaacha tovuti ya awali kama ilivyokuwa.
Tulijaribu hili mwisho hadi mwisho kwa ndani, tukitumia script halisi ya upakiaji, route halisi ya upakiaji na utoaji halisi wa hifadhi, na wageni waliofika na cache baridi ya edge. Kwa msimbo wa zamani, 55 kati ya 91 ya ziara zilivunjika wakati wa uchapishaji upya, na 61 kati ya 92 wakati wa uchapishaji ulioshindwa. Kwa msimbo mpya, 0 zilivunjika katika takriban ziara 3,500 zikifunika njia zote mbili za upakiaji, upakiaji ulioshindwa, na uchapishaji uliofuata — na mabaki hasa ndiyo yaliyofutwa.
Tatizo 2: uchapishaji upya ulichukua muda mrefu kuonekana
Hata upakiaji ulipokwenda vizuri, mabadiliko yalichelewa kuonekana. Edge ilihifadhi nakala ya ukurasa kwa sekunde 60 na ya faili nyingine zote kwa siku moja, na kuiambia vivinjari vifanye hivyo hivyo. Faili zenye jina lisilobadilika — logo.png, font, chochote kutoka folda ya public/ — zingeweza kuonyesha toleo la zamani kwa hadi siku moja baada ya uchapishaji upya.
Suluhisho: nakala za faili chini ya build
Edge inapouliza API yetu mahali tovuti ilipo, jibu sasa linajumuisha alama ya build inayobadilika kila uchapishaji unapotua. Edge inahifadhi nakala zake chini ya alama hiyo. Kwa hiyo uchapishaji unakuwa seti mpya kabisa ya funguo za cache mara tu utafutaji wa dakika 30 wa edge unapoisha. Nakala za zamani hazipatikani tena, kwa hiyo edge inaweza kuhifadhi nakala kwa siku moja bila kutoa kamwe ile iliyobadilishwa na uchapishaji uliofuata.
Vivinjari vinapata sheria mbili tofauti:
- Matokeo ya build yenye hash — faili kama
assets/index-CzLcxDO8.js, ambayo jina lake hubadilika kila maudhui yanapobadilika — yanahifadhiwa kwa mwaka mmoja na kuwekewa alama ya immutable. Haiwezi kuwa ya zamani chini ya jina hilo. - Kila kitu kingine — kurasa na faili za jina lisilobadilika kama nembo — kinawekewa
no-cache, yaani “angalia kabla ya kutumia”. Ikiwa hakuna kilichobadilika, jibu ni304 Not Modifiedndogo bila mwili, sasa kwa kuwa tunaheshimu ukaguzi waIf-None-Matchwa kivinjari.
Kuzitofautisha hizi kunahitaji umakini: faili lililonakiliwa kutoka public/assets/ linabaki na jina lake, na kuhifadhi assets/logo.png kwa mwaka kungeshikilia nembo ya zamani kwa mwaka. Kwa hiyo faili linahesabiwa kuwa lenye hash tu ikiwa liko kwenye folda ya matokeo ya build na jina lake lina sehemu inayofanana na hash, si neno la kawaida.
Kwa ndani, ukurasa mpya na nembo mpya vilionekana sekunde 6 baada ya uchapishaji kwenda hewani. Kabla ya hapo ilikuwa sekunde 60 kwa ukurasa na siku moja kwa nembo.
Marekebisho mawili madogo njiani
- Kurasa tupu kutoka kwa maombi ya HEAD. Ombi la
HEADlinauliza headers za ukurasa bila mwili wake. Tulikuwa tukihifadhi majibu hayo matupu, kwa hiyo mgeni aliyefuata wa ukurasa huo alipata ukurasa tupu. Majibu yaHEADhayahifadhiwi tena. - Ukurasa halisi wa “hakuna kitu hapa”. Anwani isiyo na app ilikuwa ikirudisha maandishi wazi “This published app is offline or the link was not found” pamoja na msimbo wa hitilafu 502. Sasa inapata ukurasa halisi, “There's no app here”, wenye hali ya 404 na njia ya kurudi Mythex kwa mmiliki. Domain maalum zisizojulikana zinapata ukurasa uleule.
Tulichojifunza
- Mpangilio ni sehemu ya usahihi. Faili zilezile zikipakiwa kwa mpangilio tofauti ndizo tofauti kati ya tovuti iliyovunjika na inayofanya kazi.
- Futa kwa kuchelewa, na kile tu unachokijua. Kufuta kwa kutumia orodha iliyochukuliwa kabla ya upakiaji ni salama; kutoa folda yote na kutumaini upakiaji utamaliza si salama.
- Hifadhi kwa toleo, si kwa muda. Muda wa kuisha ni makisio ya lini maudhui hubadilika. Funguo inayobadilika na build ni ukweli.
Inayohusiana: app yako iliyochapishwa sasa inabaki hewani unapoichapisha upya. Zaidi kuhusu kuchapisha kwenye nyaraka.