ዴፕሎዮቻችንን ወደ ዜሮ 502 ስህተቶች እንዴት እንዳወረድን
የMythex የኋላ ክፍልን ባሰማራን ቁጥር፣ ጥቂት ጥያቄዎች በ502 Bad Gateway ይወድቁ ነበር። ብዙ አይደሉም፤ ግን በዴፕሎይ ጊዜ 502 ማለት የአንድ ሰው ጠቅታ ምንም አላደረገም ወይም የሚመለከቱት ግንባታ ለአፍታ ቆመ ማለት ነው። ሁለት የተለዩ ችግሮችን ፈለግን፦ ከዴፕሎዮቻችን ጋር የሚጋጭ በራሱ የሚያስተካክል ዋችዶግ፣ እና ሰርቨር ማዳመጥ ባቆመበትና ሎድ ባላንሰሩ ትራፊክ መላክ ባቆመበት መካከል ያለ ክፍተት። ከማስተካከያዎቹ በኋላ በሶስት ተከታታይ የምርት ዴፕሎዮዎች ቁጥሩ ከ10 ወደ 6 ወደ 0 ወረደ።
ዝግጅቱ
ኤፒአይያችንና ኦርኬስትሬተሩ በAWS Application Load Balancer (ALB) ጀርባ በትንሽ የሰርቨሮች ቡድን ላይ እንደ ኮንቴይነሮች ይሰራሉ። ዴፕሎይ በአንድ ጊዜ አንድ ሰርቨር ያዘምናል፦ የድሮ ኮንቴይነሮችን ያፈሳል፣ አዲሶቹን ይጀምራል፣ ወደሚቀጥለው ይሄዳል። በእያንዳንዱ ሰርቨር ላይ ያለ ዋችዶግ ኮንቴይነሮቹ መሮጣቸውን ይፈትሻል፣ የማይሮጠውን እንደገና ይጀምራል፤ ይህም በሌሊት 3 ሰዓት የተበላሸ ሂደት ማንም ሳይነቃ እንዲመለስ ነው።
ሁለቱም በራሳቸው ምክንያታዊ ናቸው። አንድ ላይ ግን አይስማሙም ነበር።
ችግር 1፦ ዋችዶጉ ከዴፕሎዩ ጋር ይሯሯጥ ነበር
ዋችዶጉ በየደቂቃው ይሮጥና በአንድ ያልተሳካ የጤና ፍተሻ ላይ “ይጠግናል”። ዴፕሎይ ግን አገልግሎቶችን ሆን ብሎ እስከ 150 ሰከንድ ያፈሳል፤ በዚያ ጊዜ የጤና ፍተሻ እንዲወድቅ ይጠበቃል። ስለዚህ ዋችዶጉ በእያንዳንዱ ዴፕሎይ ጊዜ ይነሳ ነበር።
አብዛኛውን ጊዜ ውድድሩን ጉዳት በሌለው መንገድ ይሸነፍ ነበር። አንድ ጊዜ ግን አሸነፈ፦ በዴፕሎዩ መካከል የ compose ፋይሉን (የትኞቹ ኮንቴይነሮች መሮጥ እንዳለባቸው መግለጫ) እንደገና ጻፈ፤ ሰርቨሩን ያለ ምንም የጌትዌይ ኮንቴይነር ተወው — የዴፕሎይ ስራው ስኬት ቢልም።
ማስተካከያዎቹ፦
- አንድ መቆለፊያ። ዴፕሎዩ አሁን ከሰርቨሩ ቡትስትራፕ ስክሪፕት ጋር የሚጋራውን የፋይል መቆለፊያ ይወስዳል፤ ስለዚህ ዋችዶጉና ዴፕሎይ ፈጽሞ በአንድ ጊዜ ሊሮጡ አይችሉም።
- አራት ምቶች፣ አንድ አይደለም። ዋችዶጉ እርምጃ ከመውሰዱ በፊት አራት ተከታታይ የጤና ፍተሻ ውድቀቶች ያስፈልገዋል። የሚፈሰው አገልግሎት ከአሁን በኋላ የሞተ አይመስልም።
- አንድ ትርጉም። የcompose ፋይሉ አሁን አንድ ምንጭ አለው፤ ለሰርቨሮች የሚታተም፣ ከመቀየር የሚችሉ ቅጂዎች ይልቅ።
- ማረጋገጥ፣ ማመን አይደለም። የዴፕሎይ ስራው ትዕዛዝ ስለተመለሰ ብቻ አያልፍም። ከመሳካቱ በፊት የእያንዳንዱ ሰርቨር ኤፒአይ፣ ኦርኬስትሬተር፣ ጌትዌይና የማተሚያ ሰራተኛ ይፈትሻል።
ችግር 2፦ ሰርቨሩ ከትራፊኩ በፊት ወጣ
ሁለተኛው ችግር ጸጥ ያለ ነበር። ዴፕሎይ ሰርቨርን ሲያፈስ፣ ሰርቨሩ የጤና መጨረሻ ነጥቡ ላይ 503 ይመልሳል፤ ባላንሰሩ ከመዞሪያው እንዲያወጣው። የእኛ ለ5 ሰከንድ ይህን አደረገ፣ ከዚያ ተዘጋ።
ነገር ግን ALB የጤና ፍተሻውን አልፎ አልፎ ብቻ ይፈትሻል፤ ዒላማን ማዞር ከማቆሙ በፊት ተከታታይ ብዙ ውድቀቶች ያስፈልጉታል — እስከ 60 ሰከንድ ድረስ ከጫፍ እስከ ጫፍ። ስለዚህ ለወደ 55 ሰከንድ ሎድ ባላንሰሩ ማዳመጥ ያቆመውን ሰርቨር አሁንም እውነተኛ ጥያቄዎችን ይልክለት ነበር። እነዚያ የእኛ 502ዎች ነበሩ።
መፍትሄው ሁለቱን የጊዜ መስመሮች እንዲስማሙ ማድረግ ነበር፦
- የዒላማ ቡድኑ አሁን በ5 ሰከንድ ይፈትሻል፤ ዒላማውን ያልተዘጋጀ የሚያደርገው ከ2 ውድቀቶች በኋላ ነው — ለማስተዋል 10 ሰከንድ ገደማ።
- ፍሳሹ የጤና ፍተሻዎች መውደቅ ከጀመሩ በኋላ ለ15 ሰከንድ እውነተኛ ትራፊክ ማገልገሉን ይቀጥላል፤ ስለዚህ ሁልጊዜ መደራረብ አለ።
- እነዚህ ቅንብሮች የሚኖሩት መሠረተ ልማቱን በሚያዘጋጀው ስክሪፕት ውስጥ ነው፤ አንድ ሰው አንድ ጊዜ ጠቅ ባደረገው ኮንሶል ውስጥ አይደለም።
ቁጥሮቹ እርስ በርስ እንዲይዙ ማድረግ
እንዲህ ያሉ ጊዜ ገደቦች እርስ በርስ ይመካከታሉ። ፍሳሹ ባላንሰሩ ለማስተዋል የሚፈልገውን ጊዜ መብለጥ አለበት፤ ፍሳሹና መዘጋቱ ኮንቴይነሩ በግዳጅ ከመገደሉ በፊት መጠናቀቅ አለባቸው። አንድ ሰው በስድስት ወር ውስጥ አንዱን ቁጥር ቀይሮ ስህተቱን በጸጥታ እንደገና ማስገባቱ ቀላል ነው።
ስለዚህ እነዚያን ግንኙነቶች እንደ ፈተናዎች ጻፍናቸው፦ ፍሳሹ ከጤና ፍተሻ ክፍተቱ ከውድቀት ገደብ ጋር ተባዝቶ መብለጥ አለበት፤ ዳግም ጤናማ ተብሎ የመቆጠሪያው ጊዜ አጭር መቆየት አለበት፤ ሙሉው ፍሳሽ ከኮንቴይነሩ የማቆሚያ የጸጋ ጊዜ ውስጥ መግባት አለበት። አንዱን ቁጥር ያለ ሌሎቹ ብትቀይሩ CI ይወድቃል። ፈተናዎቹ ራሳቸውን ሙታንት-ሙከራ አድርገናል — እያንዳንዱን ቁጥር ወደ የተሳሳተ እሴት ቀይረን ፈተና መያዙን አረጋግጠናል።
ዴፕሎይን መለካት በቀላሉ ይሳሳታል
የመጀመሪያ መለኪያችን ንጹህ ዴፕሎይ ወደ 3% የተበላሸ ይል ነበር። አልነበረም። እያንዳንዱን የ200 ያልሆነ ምላሽ እንቆጥር ነበር፤ በፍሳሽ ጊዜ ከጤና መጨረሻ ነጥብ የመጣ 503 ግን ውድቀት አይደለም — ፍሳሹ ስራውን እየሰራ ነው፤ ባላንሰሩ ያንን ሰርቨር ሲያገለግል ሳለ እውነተኛ ጥያቄዎችን ማገልገሉን እንዲቀጥል ሳያዘው ነው።
ተጠቃሚዎች የሚሰማቸው 502 ነው፤ ጥያቄው የደረሰበት ምንም አልነበረም። እነዚህን ብቻ መቁጠር ትክክለኛውን ስዕል ሰጠን — በሶስት የምርት ዴፕሎዮዎች 10፣ ከዚያ 6፣ ከዚያ 0።
ከዚህ የወሰድነው
- የራስ-ፈውስ ስርዓት ስለታቀደ የስራ ጊዜ መቋረጥ ማወቅ አለበት። ዴፕሎይን ከብልሽት መለየት የማይችል ዋችዶግ በመጨረሻ ከዴፕሎዩ ጋር ይጣላል።
- ፍሳሽ የእጅ መጨባበጥ ነው። ሰርቨሩ ሎድ ባላንሰሩ ትራፊክ መላክ ማቆሙን በግልጽ እስኪያረጋግጥ ድረስ ማገልገሉን መቀጠል አለበት፤ ያ ጊዜ በሰርቨሩ ላይ ሳይሆን በባላንሰሩ ላይ ይዘጋጃል።
- ግንኙነቶችን እንደ ፈተናዎች ጻፉ። የክዋኔ ቁጥሮች ይንሸራተታሉ። እርስ በርስ የሚያዛምዷቸው ፈተናዎች ግን አይንሸራተቱም።
- ከመለካትዎ በፊት የሚለኩትን ይወስኑ። “ስህተቶች” የተሳሳተ መለኪያ ነበር፤ “ምንም ያልደረሰባቸው ጥያቄዎች” ትክክለኛው ነበር።
የMythex ቀጥታ መተግበሪያ ካተሙ፣ ይህ ምንም አይታይዎትም — ያ ነጥቡ ነው። ተዛማጅ፦ የታተመ መተግበሪያችሁ እንደገና ሲያትሙት እንዴት ሥራ ላይ እንደሚቆይ።