வெளியிட்ட உடனே செயலிழக்கும் ஆப்புகளைப் பிடித்தல்
செப்டம்பர் 25 அன்று, மூன்று வெளியீடுகள் வெற்றிகரமானவை எனக் குறிக்கப்பட்டன; ஆனால் ஒவ்வொரு துவக்கத்திலும் ஆப்பின் API சில வினாடிகளில் செயலிழந்தது. அவை “வெற்றி பெற்றதால்”, எந்த rollback-உம் இயங்கவில்லை; சில நிமிடங்கள் கழித்து ஒரு பின்னணிச் சோதனை அவற்றைத் தோல்வியடையச் செய்தது, முழுத் தளமும் 404-ஐக் காட்டியது. ஆரோக்கியச் சோதனை, ஹோஸ்டிங் தளத்தின் நிகழ்வுப் பட்டியலில் செயலிழப்புகளை எண்ணிக்கொண்டிருந்தது — அது ஒவ்வொரு இயந்திரத்திற்கும் கடைசி ஐந்து நிகழ்வுகளை மட்டுமே வைத்திருக்கும்; அதனால் ஒரு செயலிழப்பு சுழற்சி அதை எப்போதும் நிரப்பி வைத்திருக்கும், எண்ணிக்கை ஒருபோதும் வளராது. இப்போது அது சமீபத்திய செயலிழப்பின் நேரத்தை ஒப்பிடுகிறது; செயலிழப்பு சுழற்சியில் சிக்கிய ஒரு வெளியீடு தோல்வியடைந்து முந்தைய பதிப்பை மீட்டெடுக்கிறது.
ஒரு வெளியீடு எதற்காகக் காத்திருக்கிறது
பின்தளம் உள்ள ஒரு ஆப்பை Mythex-இல் வெளியிடும்போது, புதிய பதிப்பு எங்கள் ஹோஸ்டிங் தளத்தின் இயந்திரங்களில் உருட்டி ஏற்றப்படுகிறது; வெளியீடு நேரலைக்கு வந்ததா அல்லது தோல்வியடைந்ததா என்பதை ஒரு ஆரோக்கியச் சோதனை தீர்மானிக்கிறது. அது தோல்வியடைந்தால், முந்தைய பதிப்பை மீண்டும் வைக்க ஒரு rollback இயங்குகிறது.
கடினமான பகுதி என்னவென்றால், “தொடங்கியது” என்பதும் “சேவை செய்கிறது” என்பதும் ஒன்றல்ல. ஓர் இயந்திரம் எழுந்தவுடனேயே தளம் அதைத் தொடங்கியதாக அறிவிக்கிறது. துவக்கத்தில் ஒரு வினாடியில் செயலிழக்கும் ஆப் உடனே மறுதொடங்கப்படுகிறது, சிறிது நேரத்தில் மீண்டும் தொடங்கியதாகவே தெரிகிறது. அதனால் ஆரோக்கியச் சோதனை காலப்போக்கில் சில அடுக்குகளாக வளர்ந்திருந்தது:
- இருமுறை பார்க்கவும். ஓர் இயந்திரம் தொடங்கியதாகக் காட்டிய பிறகு, சிறிது நேரம் காத்து மீண்டும் பார்க்கவும். துவக்கத்தில் ஏற்படும் செயலிழப்பு பெரும்பாலும் இரண்டாவது பார்வையில் தோல்வியடையும்.
- செயலிழப்புச் சுழற்சிகளைக் கவனிக்கவும். தளம் ஓர் இயந்திரம் தொடர்ந்து செயலிழந்ததாகவும், அதை மறுதொடக்கம் செய்வதை நிறுத்திவிட்டதாகவும் அறிவித்தால், தோல்வியடையவும்.
- வெளியீடு தொடங்கியதிலிருந்து நிகழ்ந்த செயலிழப்புகளை எண்ணவும். இரண்டு “தொடங்கியது” பார்வைகள் ஒரு மறுதொடக்கத்தின் இடையில் விழலாம். அதனால் இந்த வெளியீடு தொடங்கியதிலிருந்து ஏதேனும் செயலிழப்பு நேர்ந்திருந்தால், மூன்றாவது முறையாகப் பார்க்கவும்; மூன்றாவது பார்வையில் முந்தைய பார்வையை விட அதிக செயலிழப்புகள் இருந்தால், ஆப் நிலைக்கவில்லை.
இங்கே தோல்வியடைந்தது மூன்றாவது சோதனைதான்.
எண்ணிக்கை ஏன் மாறாமல் இருந்தது
செயலிழப்புத் தகவல் ஒவ்வோர் இயந்திரத்தின் நிகழ்வுப் பட்டியலிலிருந்து வருகிறது: தொடக்கங்கள், வெளியேற்றங்கள், மறுதொடக்கங்கள். தளம் ஒவ்வோர் இயந்திரத்திற்கும் கடைசி ஐந்து நிகழ்வுகளை மட்டுமே வைத்திருக்கிறது.
ஒவ்வொரு துவக்கத்திலும் 2.5 வினாடிகளில் செயலிழக்கும் ஓர் ஆப்பை கற்பனை செய்யுங்கள், அவற்றில் ஒன்று அப்படித்தான் செய்தது. ஒவ்வொரு சுழற்சியும் ஒரு செயலிழப்பையும் ஒரு தொடக்கத்தையும் சேர்க்கிறது. இரண்டு சுழற்சிகளுக்குப் பிறகு பட்டியல் நிரம்பிவிடும். அங்கிருந்து, ஒவ்வொரு புதிய நிகழ்வும் ஒரு பழையதைத் தள்ளிவிடும். பட்டியல் முன்னோக்கி நகரும், ஆனால் எப்போதும் தோராயமாக அதே கலவையையே கொண்டிருக்கும்: இரண்டு செயலிழப்புகள், இரண்டு தொடக்கங்கள்.
அதனால் “வெளியீடு தொடங்கியதிலிருந்து எத்தனை செயலிழப்புகள்” என்பது ஒவ்வொரு முறையும் ஒரே எண்ணையே திருப்பியது. இரண்டாவது பார்வையில் ஒருவேளை இரண்டு செயலிழப்புகள் தெரிந்தன. மூன்றாவது பார்வையிலும் இரண்டு — வேறு செயலிழப்புகள், ஆனால் அதே எண்ணிக்கை. செயலிழப்பு நின்றுவிட்டது என்று சோதனை முடிவு செய்து வெளியீட்டைக் கடத்தியது.
செப்டம்பர் 25 அன்று இது மூன்று முறை நடந்தது, இரண்டு ஆப்புகளில். ஒவ்வொரு முறையும்:
- வெளியீடு நேரலை எனக் குறிக்கப்பட்டது,
- எதுவும் தோல்வியடையாததால் rollback இயங்கவில்லை,
- வெளியீடுகளை பின்னர் சரிபார்க்கும் ஒரு பின்னணி வேலையான எங்கள் reconciler, சில நிமிடங்கள் கழித்து அந்த deployment-ஐத் தோல்வியடையச் செய்தது,
- முழுத் தளமும் 404-ஐத் திருப்பியது.
நேரத்தில் தோல்வியடையும் வெளியீடு மீட்கப்படக்கூடியது: rollback முந்தைய பதிப்பை மீட்டெடுக்கும். வெற்றி என அறிவிக்கப்பட்ட பிறகு சில நிமிடங்கள் கழித்துத் தோல்வியடையும் வெளியீடு, அதன் rollback-ஐ ஏற்கனவே தவிர்த்துவிட்டது.
நாங்கள் அதை எப்படிக் கண்டறிந்தோம்
உள்ளூரில் மீண்டும் உருவாக்கினோம்: வேலை செய்த ஒரு API-ஐ எடுத்து, அது உறங்கும்படி விட்டு, பின்னர் துவக்கத்தில் செயலிழக்கும் ஒரு மாற்றத்துடன் மீண்டும் வெளியிட்டோம். ஆரோக்கியச் சோதனை அதை நேரலை எனக் குறித்தது.
அது உற்பத்தியுடன் பொருந்தியது: மூன்று வெளியீடுகளிலும், ஆப் ஒவ்வொரு துவக்கத்திலும் சில வினாடிகளில் இறந்தது; ஆனாலும் சோதனை ஒப்பிட்ட செயலிழப்பு எண்ணிக்கை இரண்டு பார்வைகளுக்கு இடையே ஒருபோதும் அதிகரிக்கவில்லை.
திருத்தம்: எண்ணிக்கையை அல்ல, சமீபத்திய செயலிழப்பை ஒப்பிடுங்கள்
செயலிழப்புகளை எண்ணுவதற்குப் பதிலாக, சோதனை இப்போது வெளியீடு தொடங்கியதிலிருந்து மிகச் சமீபத்திய செயலிழப்பின் நேரத்தைப் பார்க்கிறது.
இரண்டாவது பார்வை வெளியீடு தொடங்கியதிலிருந்து ஏதேனும் செயலிழப்பைக் காட்டினால், சோதனை காத்து மூன்றாவது முறை பார்க்கிறது. மூன்றாவது பார்வையில் சமீபத்திய செயலிழப்பு இரண்டாவது பார்வையின் சமீபத்தியதைவிட பின்னர் இருந்தால், இடைப்பட்ட நேரத்தில் இயந்திரம் மீண்டும் செயலிழந்துள்ளது என்று பொருள். அது நிலைக்கவில்லை; வெளியீடு தோல்வியடைகிறது, இயந்திரம் திரும்பத் திரும்ப செயலிழந்ததாகவும் இன்னும் மறுதொடங்கிக்கொண்டிருப்பதாகவும் ஒரு செய்தி சொல்கிறது.
நிகழ்வுப் பட்டியல் எவ்வளவு குறுகியதாக இருந்தாலும் இது வேலை செய்கிறது. ஐந்து நிகழ்வுகளின் நகரும் சாளரம் எத்தனை செயலிழப்புகள் நேர்ந்தன என்பதை மறைக்கலாம், ஆனால் ஒரு புதிய செயலிழப்பு இப்போதுதான் நிகழ்ந்தது என்பதை மறைக்க முடியாது — கடைசி நிகழ்வு எப்போதும் வைக்கப்படுகிறது.
இந்த மாற்றத்துடன், உள்ளூர் மீண்டும் உருவாக்குதல் சரியாக நடக்கிறது: வெளியீடு தோல்வியடைகிறது, முந்தைய படிமம் மீட்டெடுக்கப்படுகிறது. தளத்தின் நடத்தையை உருவகப்படுத்தும் ஒரு சோதனையும் உண்டு — ஒவ்வொரு பார்வையும் ஒரு செயலிழப்பையும் ஒரு தொடக்கத்தையும் சேர்த்து பட்டியலை ஐந்தாகக் குறைக்கும் — தீர்ப்பு தோல்வி, தேர்ச்சி அல்ல என்பதைச் சரிபார்க்கிறது.
இதிலிருந்து நாங்கள் கற்றது
- நீங்கள் எண்ணும் தரவின் வடிவத்தை அறியுங்கள். ஒரு வரம்புள்ள பட்டியலின் மீதான எண்ணிக்கை, பட்டியல் நிரம்பியதும் எந்த அர்த்தமும் இழக்கிறது. அந்த வரம்பு மறைக்கப்படவில்லை; சோதனையை அதைச் சுற்றி வடிவமைக்கவில்லை, அவ்வளவுதான்.
- “எத்தனை நடந்தன?” என்பதைவிட “ஏதாவது புதிதாக நடந்ததா?” என்பதை விரும்புங்கள். சமீபத்திய நேர முத்திரை துண்டிக்கப்படுவதில் தப்பிப் பிழைக்கிறது. மொத்தம் அப்படியல்ல.
- தாமதமான தோல்வி முன்கூட்டிய தோல்வியைவிட மோசமானது. அதே உடைந்த கட்டமைப்பு வெளியீடு தோல்வியடைந்து rollback ஆனால் பாதிப்பில்லாதது; முதலில் வெற்றி என அறிவிக்கப்பட்டால், தளத்தையே முடக்கும்.
- நிஜமான நிலைமைகளுடன் மீண்டும் உருவாக்குங்கள். பிழைக்கு ஏற்கனவே நிகழ்வுப் பட்டியலை நிரப்பும் அளவுக்குப் பலமுறை செயலிழந்த ஓர் இயந்திரம் தேவைப்பட்டது. சோதனையில் ஒரே ஒரு விரைவான செயலிழப்பு அதைக் காட்டியிருக்காது.
இந்தத் திருத்தம் அதே நாளின் மற்றொரு திருத்தத்துடன் இணைகிறது; அது rollback பழைய பதிப்பை மீண்டும் வைக்கிறது, அழிப்பதில்லை என்பதை உறுதிசெய்தது: தோல்வியடைந்த மறுவெளியீடு ஒருபோதும் வேலை செய்யும் பின்தளத்தை நீக்காது. துவக்கத்தில் செயலிழப்பதால் உங்கள் ஆப் வெளியிட முடியாவிட்டால், வெளியீட்டுச் சிக்கல் தீர்வு ஆவணங்களும் AI-ஆல் கட்டிய ஆப்பை debug செய்வது பற்றிய எங்கள் வழிகாட்டியும் தொடங்க நல்ல இடங்கள்.