የእይታ ቆጣሪው ካታሎግን ወደ 502 የቀየረው
ማሰራጨት
የምንሸጣቸውን ሁሉንም ሶፍትዌር ጥቅሎች የሚዘርዝረው ገጽ ከተከፈተ በኋላ ለወደ 41 ሰዓታት ሁሉንም ጎብኚዎች በ502 Bad Gateway መልሶቸዋል። እያንዳንዱ ሶፍትዌር ጥቅል የራሱ ገጽ ሠርቷል፣ ዋናው ገጽ ሠርቷል፣ ክፍያ መስጠት ሠርቷል። የተበላሸው ክፍል የገጽ እይታዎችን የሚቆጥሩ ጥቂት መስመሮች ነበሩ።
ስህተቱ
የሱቅ ሰርቨራችን የሶፍትዌር ጥቅል ገጾችን ጉብኝቶች ይቆጥራል። አንድ ጥያቄ ለየትኛው ሶፍትዌር ጥቅል እንደሆነ ለማወቅ፣ የመንገዱን ሁለተኛ ክፍል ወስዷል፡
self._count_view(path.strip("/").split("/")[1] if path.count("/") >= 2 else "")
ለ/kits/studio/ ይህ studio ነው። ለካታሎጉ ራሱ /kits/፣ መንገዱ ሁለት ስላሾች ስላሉት የደህንነት ገደቡ አስታልፎታል፣ ነገር ግን ስላሾቹን ካስወገድን በኋላ አንድ ክፍል ብቻ ስለሚቀር [1] IndexError አስነስቷል። አያያዡ (handler) የPython መደበኛ http.server ነው፡ በdo_GET ውስጥ የሚመጣ ስህተት መስተጋብሩን ያጠፋል ወደ ገጹም መልስ አይሰጥም፣ Cloudflare ጎብኚውን 502 አሳይቷል።
መፍትሄው ክፍሉ ሲጎድል ባዶ ገጽታ (empty string) የሚመልስ አንድ ትንሽ ፈንክሽን ነው። የእይታ ቆጠራው የሶፍትዌር ጥቅሉን ስም ብቻ ነበር የፈለገው፤ የሚቆጥረውን ገጽ የሚያበላሽበት ምክንያት ፈጽሞ አልነበረበትም።
ምንም አይነት ምርመራችን ለምን አላየው
- የአገልግሎት ጊዜ ክትትል ዋና ገጾችን ብቻ ነበር የከፈተው። ዋናው ገጽ ጥሩ ነበር።
- የመልቀቂያ ደረጃው የላከውን እያንዳንዱን ሶፍትዌር ጥቅል ሞክሮ ነበር፡ ገጹን፣ የክፍያ አቅጣጫውን፣ የክፍያ መስመሩን ከመጀመሪያ እስከ መጨረሻ። የሁሉንም ሶፍትዌር ጥቅሎች ዝርዝር ግን ፈጽሞ አልከፈተውም።
- የትንተና መረጃው ማሳየት አልቻለም። የካታሎጉን ጎብኚዎች ሊቆጥር የሚገባው ኮድ የተበላሸው ኮድ ነበር። የሰርቨር ሎጉ መልሱን ሁልጊዜ ይዞ ነበር፡ በእነዚያ 41 ሰዓታት ውስጥ 17 tracebacks፣ እያንዳንዱ ስህተት ከሰው ወይም ከcrawler የመጣ ጥያቄ ሲሆን ገጹን ከማየት ይልቅ ስህተት ተመልሷል።
የተቀየረው
- እያንዳንዱ ገጽ፣ ከውጭ፣ በየሰዓቱ። ትንሽ ስራ የገጽ ዝርዝርን (sitemap) ያነባል እና እያንዳንዱን የእንግሊዝኛ ገጽ እና በተራው ከሌሎቹ 42 ቋንቋዎች አንዱን ገጽ እንደ ጎብኚ በCloudflare ያከፍታል። በተከታታይ ሁለት ስራዎች ከተሳሳቱ ኢሜይል ይላካል፤ መልሶ ሲመለስ ሌላ ኢሜይል ይላካል።
- የመልቀቂያ ደረጃው ጣቢያውን ከገነባ በኋላ እያንዳንዱን የእንግሊዝኛ ገጽ ይከፍታል እና አንዱ 200 ካልመለሰ ማጠናቀቅ ይከለክላል።
- የመረጃ ገጾች እንደ ገጾች ይቆጠራሉ። ሌሎችን ገጾች የሚዘርዝሩት ገጾች ጎብኚዎች በመጀመሪያ የሚደርሱባቸው ሲሆኑ እነሱን ማንም ሰው አልፈተነም።
ዋናው ማስተዋል
በአንድ የጥያቄ አያያዣ ውስጥ የሚደረጉ ጎን ለጎን ስራዎች (ለምሳሌ መቁጠር፣ መመዝገብ ወይም መከታተል) ጥያቄውን ሊያስፈሹ አይገባም፤ እንዲሁም አዲስ የቀየራቸውን ገጾች ብቻ የሚሸፍን የገጽ ማረጋገጫ ወደ እነሱ የሚያገናኙትን ገጾች ያመልጣል። በNight Watch ውስጥ ያለው የክትትል ስርዓት እያንዳንዱ ገጽ ሊኖረው የሚገባውን ጽሑፍ ያካተተ የገጾችን ማንኛውንም ዝርዝር ይወስዳል፣ የመነሻ ገጾችን ብቻ አይደለም።