Блог

Жариялаудан кейін бірден құлайтын қолданбаларды ұстау

25 қыркүйекте үш жариялау сәтті деп белгіленді, ал қолданбаның API-і әр іске қосылғанда бірнеше секундта құлап жатты. Олар "сәтті" болғандықтан, кері қайтару іске қосылмады; фондық тексеру бірнеше минуттан кейін оларды сәтсіз деп белгіледі, ал бүкіл сайт 404-ке түсті. Денсаулық тексеруі құлауларды хостинг платформасының оқиғалар тізімінде санап отырды — ол машинаға тек соңғы бес оқиғаны сақтайды, ал құлау циклі оны толтырып тастайды, сондықтан санақ ешқашан өспейді. Енді ол соңғы құлаудың уақытын салыстырады, және құлау циклі бар жариялау сәтсіз аяқталады да, алдыңғы нұсқаны қайтарады.

Жариялау нені күтеді

Mythex-те бэкенді бар қолданбаны жариялағанда, жаңа нұсқа хостинг платформасының машиналарына жайғастырылады, ал денсаулық тексеруі жариялаудың тірі болғанын немесе сәтсіз болғанын шешеді. Сәтсіз болса, кері қайтару алдыңғы нұсқаны қайтарады.

Қиыны — "іске қосылды" деген "қызмет көрсетіп тұр" дегенмен бірдей емес. Платформа машина жоғары тұрған бойда оны іске қосылған деп хабарлайды. Іске қосылғаннан бір секунд кейін құлайтын қолданба бірден қайта іске қосылады, және бір сәттен кейін ол қайтадан іске қосылған болып көрінеді. Сондықтан денсаулық тексеруі уақыт өте келе бірнеше қабатқа ие болды:

  1. Екі рет қара. Машина іске қосылған деп көрінгеннен кейін қысқа күтіп, қайтадан қара. Іске қосылғанда құлау көбіне екінші қарауда сәтсіз болады.
  2. Құлау циклдерін қада. Егер платформа машинаның қайта іске қосылуды тоқтатқанын хабарласа, сәтсіз болу.
  3. Жариялау басталғаннан бері құлауларды санау. Екі "іске қосылды" қарау қайта іске қосылудың арасында болуы мүмкін. Сондықтан бұл жариялау басталғаннан бері кез келген құлау болса, үшінші рет қара; үшінші қарауда құлаулар екінші қараудағыдан көп болса, қолданба тұрақты жұмыс істемейді.

Үшінші тексеру осы жағдайда сәтсіз болды.

Санақ неліктен тұрақты қалды

Құлау туралы ақпарат әр машинаның оқиғалар тізімінен келеді: іске қосулар, шығулар, қайта іске қосулар. Платформа әр машина үшін тек соңғы бес оқиғаны сақтайды.

Бір қолданба әр іске қосылуда 2,5 секундта құлайтын жағдайды елестетіңіз, сол сияқты біреуі құлады. Әр цикл бір құлау және бір іске қосылуды қосады. Бірнеше циклден кейін тізім толады. Одан кейін әр жаңа оқиға ескі бірін ығыстырады. Тізім алға жылжиды, бірақ әрқашан шамамен бірдей қоспаны ұстайды: бірнеше құлау, бірнеше іске қосу.

Сондықтан "жариялау басталғаннан бері неше құлау болды" деген сұраққа әр қарауда бір сан шықты. Екінші қарауда, айталық, екі құлау көрінді. Үшінші қарауда да екі құлау көрінді — басқа құлаулар, бірақ сол сан. Тексеру құлаулар тоқтағанын түйді де, жариялауды өткізді.

Бұл 25 қыркүйекте екі қолданбада үш рет болды. Әр жағдайда:

  • жариялау тірі деп белгіленді,
  • кері қайтару іске қосылмады, өйткені ештеңе сәтсіз болмады,
  • біздің қайта салыстырушы, яғни деплойларды кейін тексеретін фондық жұмыс, бірнеше минуттан кейін деплойды сәтсіз деп белгіледі,
  • және бүкіл сайт 404 қайтарды.

Уақытында сәтсіз болған жариялау қалпына келтіріледі: кері қайтару алдыңғы нұсқаны қайтарады. Ал бірнеше минут кешігіп, сәтті деп жарияланғаннан кейін сәтсіз болған жариялау кері қайтаруды өткізіп алған болады.

Оны қалай таптық

Оны жергілікті түрде қайталадық: жұмыс істеп тұрған API-ді алып, оны ұйықтатып, содан кейін іске қосылғанда құлайтын өзгерісмен қайта жариялай бастадық. Денсаулық тексеруі оны тірі деп белгіледі.

Бұл өндірістегімен сәйкес келді: үш жариялаудың әрқайсысында қолданба әр іске қосылғанда бірнеше секундта өліп жатты, бірақ тексеру салыстырған құлаулар санағы бір қараудан екіншісіне өспеді.

Түзету: санамай, соңғы құлауды салыстыру

Құлауларды санаудың орнына, тексеру енді жариялау басталғаннан бері соңғы құлаудың уақытына қарайды.

Егер екінші қарауда жариялау басталғаннан бері кез келген құлау көрінсе, тексеру күтіп, үшінші рет қарайды. Үшінші қарауда соңғы құлау екінші қарауда көрінгеннен кешірек болса, машина аралық уақытта қайтадан құлаған. Ол тұрақты емес, ал жариялау машина бірнеше рет құлап, әлі қайта іске қосылып жатыр деген хабармен сәтсіз аяқталады.

Бұл оқиғалар тізімінің қаншалықты қысқа екеніне қарамай жұмыс істейді. Бес оқиғадан тұратын жылжымалы терезе құлаулардың санын жасыра алады, бірақ жаңа құлаудың болғанын жасыра алмайды — ең соңғы оқиға әрқашан сақталады.

Осы өзгерістен кейін жергілікті қайталау дұрыс жұмыс істеді: жариялау сәтсіз болды және алдыңғы образ қайтарылды. Сонымен бірге платформаның мінез-құлқын имитациялайтын тест бар — әр қарауда бір құлау және бір іске қосылу қосылады, тізім бесеуге дейін қысқартылады — және үкімнің сәтсіздік екенін, өтуі емес екенін тексереді.

Осыдан не үйрендік

  • Санайтын деректің пішінін біл. Шектелген тізімдегі санау толған кезде мағынасын жоғалтады. Шек жасырын болған жоқ; біз тексеруді оған қарай жобаламаған едік.
  • "Жаңа бірдеңе болды ма?" деген сұрақты "неше болды?" деген сұрақтан артық ойла. Соңғы уақыт белгісі кесілуден аман қалады. Жалпы сан қалмайды.
  • Кеш сәтсіздік ерте сәтсіздіктен нашар. Бірдей бұзылған құрастыру, егер жариялау сәтсіз болып, кері қайтарылса, зиян келтірмейді; ал алдымен сәтті деп жарияланса, сайтты өшіреді.
  • Нақты жағдайда қайтала. Ақау құлаған сайын құлаған машинаны қажет етті және оның оқиғалар тізімі толды. Тестте бір жылдам құлау ешқашан көрінбеген болар еді.

Бұл түзету сол күні жасалған тағы бір түзетумен бірге жүреді: кері қайтару ескі нұсқаны қалпына келтіретінін, жоюмайтынын қамтамасыз еткен сәтсіз қайта жариялау жұмыс істеп тұрған бэкендті ешқашан өшірмейді. Егер сіздің қолданбаңыз іске қосылғанда құлағандықтан жарияланбаса, жариялау ақаулықтарын түзету құжаттары мен AI арқылы жасалған қолданбаны түзету нұсқаулығы жақсы бастапқы нүкте.

Mythex · Pricing · ЖИ көмегімен кез келген нәрсені жасаңыз · Сайттар мен қосымшаларға арналған үлгілер · Mythex салыстыруда · ЖИ-мен қосымша жасау сөздігі · ЖИ-мен қосымша жасауға арналған тегін құралдар · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)