ብሎግ

አንድ ከባድ ውይይት ኤፒአይያችንን ሊያቆም ይችል ነበር

በሴፕቴምበር 28፣ ከመልቀቅ ጥቂት ደቂቃዎች በኋላ፣ ሁለቱም የምርት ኤፒአይ አገልጋዮቻችን በተመሳሳይ ጊዜ ማህደረ ትውስታ አለቀባቸው፣ ዳግም ተነሱ፣ እና ለአምስት ደቂቃ ገደማ ጭነት ሚዛኑ ትራፊክ የሚልክበት ጤናማ አገልጋይ አልነበረውም። የመጀመሪያው ማስተካከያችን ኤፒአይው ሁለት እጥፍ ማህደረ ትውስታ ሰጠው። እውነተኛው ምክንያት በዚያው ቀን ቆይቶ ተገኘ፦ አንድ የተለየ ውይይት ሲከፈት ኤፒአይው በአንድ ጥያቄ 53 MB መልዕክቶችን እንዲጭን ይጠይቅ ነበር። አሁን የውይይት ታሪክ በመጠንም በቁጥርም በተገደቡ ገጾች ይጫናል፣ እና ያ ውይይት ከመበላሸት ይልቅ በ5 MB የመጀመሪያ ገጽ ይከፈታል።

ምን ወደቀ

ኤፒአይያችን በሎድ ባላንሰር ጀርባ ባለ በእያንዳንዱ ከሁለት አገልጋዮች ላይ እንደ ኮንቴይነር ይሠራል። እያንዳንዱ ኮንቴይነር 384 MiB የማህደረ ትውስታ ገደብ ነበረው። ሲረፍ 130–140 MiB ይጠቀማል፣ ስለዚህ ገደቡ ብዙ ቦታ የሚተው ይመስል ነበር።

ሁለቱም ኮንቴይነሮች በአንድ ጊዜ ገደቡን መቱ እና «JavaScript heap out of memory» በሚል ተበላሹ። heap የNode.js ሂደት ከሚሠራባቸው ነገሮች የሚያስቀምጠው ማህደረ ትውስታ ነው። ሁለቱም አገልጋዮች በአንድ ጊዜ ስለወደቁ፣ ጥያቄዎችን የሚልክበት ቦታ አልቀረም። ለሁለት አገልጋይ ማዋቀር ይህ በጣም መጥፎው ውድቀት ነው፦ ድግግሞሽ የሚጠቅመው አገልጋዮቹ በተለያየ ጊዜ ሲወድቁ ብቻ ነው።

የመጀመሪያው ማስተካከያ፦ ተጨማሪ ቦታ

ጊዜው ወደ መልቀቁ ይጠቁም ነበር። ከመልቀቁ በኋላ፣ በመልቀቁ የተቋረጡ የወኪል ዙሮች ይቀጥላሉ እና ግልባጫቸውን እንደገና ያስቀምጣሉ፣ እና ያ የሥራ ጎርፍ የማህደረ ትውስታ ጭማሪ ምንጭ ይመስል ነበር።

ስለዚህ የመጀመሪያው ለውጥ የኤፒአይውን ገደብ ከ384 MiB ወደ 768 MiB ከፍ አደረገ። በዚያው ቀን በሁለቱም አገልጋዮች በቀጥታ ተግባራዊ አድርገነዋል፣ እና ቀጣዩ መልቀቅ 384ን በጸጥታ እንዳይመልሰው በመልቀቂያ ማዋቀሩ ውስጥ አስገብተነዋል። በአገልጋዩ ላይ በእጅ የተደረገ ማስተካከያ ቀጣዩ መልቀቅ ሲቀለብሰው ተመሳሳዩ መቆራረጥ ተመልሶ እንዲመጣ የሚያደርግ የተለመደ መንገድ ነው።

ተጨማሪ ማህደረትውስታ ተገቢ የደህንነት ህዳግ ነበር። ግን ማብራሪያ አልነበረም።

እውነተኛው ምክንያት፦ አንድ ጥያቄ፣ 71 MB

በዚያው ቀን ቆይቶ አንድ ውይይት ቅጂ ላይ ብልሽቱን ደገምነው፣ የምርቱን የድሮ የማህደረ ትውስታ ገደብ በመጠቀም። ቅጂው ኤፒአይውን ብቻውን አበላሸው፣ ከመልቀቅ ምንም ተሳትፎ ሳይኖር።

ፕሮጀክት ስትከፍት የድር መተግበሪያው የውይይቱን ታሪክ ከኤፒአይ ይጠይቃል። የመጨረሻዎቹን 30 መልዕክቶች ሙሉ በሙሉ ይመልስ ነበር። ለአብዛኛዎቹ ውይይቶች 30 መልዕክቶች ትንሽ ናቸው። ለዚህ ውይይት፣ የመጨረሻዎቹ 30 መልዕክቶች በዳታቤዙ 53 MB፣ በምላሹ ደግሞ 71 MB ነበሩ። ከወኪሉ መልሶች ጥቂቶቹ እያንዳንዳቸው 4–10 MB ነበሩ፣ በአብዛኛው የንዑስ ወኪሎች ግልባጮች — ዋናው ወኪል የሥራውን ክፍል በትይዩ እንዲሠሩ የሚጀምራቸው ረዳት ወኪሎች፣ ሙሉ ሥራቸው ከመልሱ ጋር ይቀመጣል።

ያን አንድ ምላሽ መገንባት ኤፒአይው ከነበረው በላይ heap ወሰደ። እና ፕሮጀክቱን በከፈትክ ወይም ባደስክ ቁጥር ጥያቄው ዳግም ይላካል። አንድ ውይይት በደረሰበት አገልጋይ ላይ ሁሉ ሊያስቆም ይችል ነበር፣ ገጹ ዳግም ሊጫን ስለሚችል ደግሞ ሁለቱንም ሊደርስ ይችል ነበር።

«30 መልዕክቶች» በመጠን ላይ ትክክለኛ ገደብ ሆኖ አያውቅም። በቁጥር ላይ ያለ ገደብ ነበር፣ ለተለመዱ ውይይቶች ትንሽ ሆኖ የተገኘ።

መፍትሄው፦ በመጠንም በቁጥርም የተገደቡ ገጾች

የታሪክ ገጽ አሁን 30 መልዕክቶች ወይም ወደ 4 MB ገደማ የሆነ፣ የትኛው ቀድሞ እንደሚመጣ ነው።

በሁለት ደረጃዎች ይሠራል፦

  1. መጀመሪያ መጠኖችን ጠይቅ። ኤፒአይው የቅርብ ጊዜ መልዕክቶችን መለያዎችና የተቀመጡ መጠኖች ከዳታቤዙ ይጠይቃል፣ ይዘታቸውን ሳይጨምር። ይህ ጥያቄ መልዕክቶቹ ምንም ያህል ትልቅ ቢሆኑ ርካሽ ነው።
  2. የሚገባውን ብቻ ጫን። ከአዲሱ ወደ አሮጌው ሲሄድ፣ ቀጣዩ መልዕክት ገጹን ከ4 MB በላይ እስኪያደርገው ድረስ መልዕክቶችን ይጨምራል። ከዚያ ያ ረድፎች ብቻ በሙሉ ይጫናሉ።

ሁለት ህጎች ይህንን ደህንነቱን ይጠብቃሉ፦

  • አዲሱ መልዕክት ሁልጊዜ ወደ ገጹ ይገባል፣ መጠኑ ምንም ቢሆን። ምንም የማይመልስ ገጽ ውይይቱን ተጣብቆ ይተዋል፣ ወደ ኋላ ለመሸብለል መንገድ ሳይኖር።
  • ምንም አይቆረጥም። ምንም መልዕክት አይቆረጥም ወይም አይጣልም። የቀረው ውይይት ቀድሞም ለነበሩት መልዕክቶች በሚያገለግለው «ለቀድሞ መልዕክቶች ወደ ላይ ሸብልል» አማራጭ በኩል፣ በአንድ ገጽ በአንድ ጊዜ ይጫናል።

ተመሳሳይ ቅርጽ ያለው ሌላ ቦታም አገኘን። ዙርን ስታቆም፣ ኤፒአይው የመጨረሻዎቹን ጥቂት ምላሾች ባዶ ናቸው ወይም አለመሆናቸውን ይፈትሻል፣ ባዶ ከሆኑ ማጽዳት እንዳለባቸው ለማወቅ። ይህንንም ሙሉ ስምንት መልዕክቶችን በመጫን ያደርግ ነበር። በብዙ ሜጋባይት ምላሾች ያለ ውይይት ላይ ይህ ያው ችግር በትንሽ መልክ ነበር። አሁን ዳታቤዙን ቀላል አዎ-ወይም-አይ ጥያቄ ይጠይቃል — ይህ መልዕክት ማንኛውም ይዘት አለው? — ይዘቱን ራሱ ሳይጭን።

እንዴት እንደፈተንነው

በቅጂው ውይይት ላይ፣ በድሮው 384 MiB ገደብ ሲሠራ፦

  • የመጀመሪያው ገጽ 5 MB ነው። ከዚህ በፊት ያው ጥያቄ ኤፒአይውን ያበላሽ ነበር።
  • ውይይቱን በአንድ ጊዜ የሚከፍቱ አምስት የአሳሽ ትሮች ከፍተኛ 154 MB ማህደረ ትውስታ ይደርሳሉ።
  • ሙሉውን ውይይት ወደ ኋላ ሲሸብልሉ 190 መልዕክቶች ሁሉም አንድ ጊዜ፣ በቅደም ተከተል ይመለሳሉ።

የገጽ ምርጫው ሎጂክ የራሱ የክፍል ፈተናዎችም አሉት፣ ከዚያ ውይይት የቅርብ መልዕክቶች እውነተኛ መጠኖች የተገነባውን አንድን ጨምሮ። የመጀመሪያው ገጽ አንድ መልዕክት ይዞ ይመጣል፣ ተጨማሪ እንዳሉ ይናገራል፣ እና ቀጣዩ ገጽ ከርሱ በኋላ ያለውን ይጀምራል።

ከዚህ የወሰድነው

  • ቁጥር የመጠን ገደብ አይደለም። «አዲሶቹን N» ማናቸውንም ነገር የሚመልስ ማንኛውም ኤንድፖይንት — ያለ ገደብ ሊያድግ የሚችል — የባይት በጀትም ያስፈልገዋል። ዳታው ክፍተቱን ይደርስበታል።
  • ግልጽው ተጠርጣሪ ሁልጊዜ መንስኤው አይደለም። መልቀቁ ተጨማሪ ስራ ያስነሳ እውነተኛ ቀስቅሴ ነበር፣ እና ተጨማሪ ማህደረ ትውስታ ዋጋ ነበረው። ነገር ግን ብልሽቱ ያለ መልቀቅ ተደግሞ፣ ሳንደግመው ወደ ማህደረ ትውስታ ጭማሪው ብቻ እንቆም ነበር።
  • አንድ ጥያቄ አገልጋዮችን ሁሉ የሚገድል ከሆነ፣ ሁለቱም አገልጋዮች አንድ ጊዜ ይወድቃሉ። ድግግሞሽ አንድ አገልጋይ መሞትን ይከላከላል። ተጠቃሚ በማደስ በቀላሉ የሚደግመውን፣ ያንን የሚነካ ጥያቄ ግን አይከላከልም።
  • በማዋቀሩ ውስጥ አስተካክለው፣ በሣጥኑ ላይ ብቻ አይደለም። የማህደረ ትውስታ ጭማሪው በዚያው ቀን ወደ መልቀቂያ ማዋቀሩ ገብቷል፣ ስለዚህ ቀጣዩ መልቀቅ ያዘው።

ይህ በወኪሉ ውጤት ላይ ያለን ሁለተኛው የቅርብ ጊዜ የማህደረ ትውስታ ታሪካችን ነው። የመጀመሪያው 690 MB ሕብረቁምፊዎችን ወረፋ ያስገባ የሂደት መለያ ነበር። በMythex ላይ ንዑስ ወኪሎችን የምትጠቀም ከሆነ፣ እንዴት እንደሚሠሩ በሰነዶቹ ውስጥ ማንበብ ትችላለህ።

Mythex · Pricing · በAI ማንኛውንም ነገር ይገንቡ · የድር ጣቢያ እና የመተግበሪያ ቴምፕሌቶች · Mythex ከሌሎች ጋር ሲነጻጸር · የAI መተግበሪያ ግንባታ የቃላት መዝገበ-ቃላት · ነፃ የAI መተግበሪያ መገንቢያ መሳሪያዎች · 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 简体中文 繁體中文(香港) 繁體中文(台灣)