Blogu

Faili la Swap Lililokosekana Lililoganda Seva Zetu

Tarehe 24 Septemba, mojawapo ya seva zetu za uzalishaji ilisimama kujibu. Load balancer iliiweka kama haina afya na zana yetu ya amri za mbali haikuweza kuifikia — lakini hakuna kilichoanguka na hakuna kilichouawa kwa kutumia kumbukumbu kupita kiasi. Seva ilikuwa ikizunguka bila kusonga mbele: bila nafasi ya swap na containers zikiruhusiwa kutumia kumbukumbu zaidi ya mashine ilivyokuwa nayo, Linux ilitumia muda wake kuondoa na kusoma tena faili zilizohitajika kuendesha, bila maendeleo yoyote. Kuongeza faili la swap la GB 2 kwenye kila seva kulirekebisha. Somo la kuvutia zaidi lilihusu ukaguzi wa afya.

“Imeganda” ilionekanaje

  • Ukaguzi wa afya wa load balancer uliisha muda kwenye seva hiyo.
  • Amri zilizotumwa kupitia AWS Systems Manager zilikaa kwenye “Pending” na hazikuendeshwa kamwe.
  • Hakukuwa na kuuawa kwa out-of-memory kwenye kumbukumbu. Hakuna mchakato uliokufa.

Wiki moja kabla, tulikuwa tumehamisha uzalishaji kwenda seva ndogo za ARM zenye GB 2 za RAM kila moja. Seva yetu ya staging — ndogo zaidi — ilikuwa imeganda kwa namna hiyo hiyo ilipokuwa ikifungua picha ya container wakati wa deploy.

Kwa nini hakuna hitilafu ya kumbukumbu?

Linux huua mchakato pale tu inapoishiwa kabisa na kumbukumbu inayoweza kurudishwa. Kabla ya hapo, inarudisha kumbukumbu kutoka kwenye page cache — nakala za faili inazozihifadhi kwenye RAM, ikiwemo msimbo wa kila programu inayoendeshwa.

Kwenye seva zetu, mipaka ya kumbukumbu ya containers ilijumlisha takriban GB 3.3 kwenye mashine yenye takriban GB 1.8 zinazotumika. Kwa kawaida hazitumii mipaka yote kwa pamoja. Zilipofanya hivyo, kernel iliendelea kuondoa msimbo wa programu kutoka kwenye cache ili kupata nafasi, kisha ililazimika kuusoma tena kutoka diski mara msimbo huo ulipoendeshwa tena. Mzunguko huo — kuzunguka bila kusonga — unaweza kufanya mashine isijibu kabisa huku ikiwa kiufundi haijaishiwa kumbukumbu kamwe. Kwa hiyo hakuna kinachouawa, na hakuna kinachopona.

Bila swap, kernel haina pa kuweka kumbukumbu iliyotengwa lakini isiyotumika mara kwa mara, kwa hiyo inalazimika kuichukua kutoka kwenye cache.

Marekebisho

Script ya bootstrap ya seva sasa inaunda faili la swap la GB 2 lenye mpangilio wa swappiness wa chini (10) kila seva inapowashwa au kurekebishwa. Swappiness ya chini inamaanisha kernel bado inapendelea kuweka kumbukumbu ya kazi kwenye RAM, lakini kurasa zisizoguswa mara kwa mara zinaweza kuhamia diskini badala ya kulazimisha msimbo wa programu utoke kwenye cache. Tuliitumia moja kwa moja kwenye seva zote mbili za uzalishaji na staging, na pipeline ya deploy inachapisha tena script ya bootstrap kila deploy ya uzalishaji ili seva iliyobadilishwa nayo ipate.

Sehemu iliyotutia wasiwasi zaidi: seva isiyo na afya ilibaki

Kundi letu la seva lilitumia ukaguzi wa afya wa EC2 — “je, mashine inaendeshwa?” — badala ya ukaguzi wa afya wa load balancer — “je, inajibu maombi?”. Kwa hiyo seva ambayo load balancer ilikuwa imeikata tamaa bado ilionekana yenye afya kwa kundi. Haikuwahi kubadilishwa. Uzalishaji ungeendelea kwa kimya kwenye seva moja hadi mtu aligundue na kuanzisha upya nyingine.

Kubadilisha kundi kutumia ukaguzi wa afya wa load balancer kunaonekana kama suluhisho dhahiri, lakini kwetu si moja kwa moja: wakati wa deploy, seva kwa makusudi hujibu endpoint yao ya afya kwa hitilafu ili balancer iziondoe kwenye trafiki (angalia jinsi tulivyofikia 502 sifuri wakati wa deploy). Kundi linalobadilisha seva kwa ishara hiyo lingezibadilisha katikati ya kila deploy.

Kwa hiyo kwa sasa tuliongeza hatua kwenye orodha yetu ya deploy: baada ya kila deploy, angalia afya ya kila lengo kwenye load balancer, si tu kama kazi ya deploy ilipita. Ikiwa amri kwenda seva zinakaa “Pending”, inazunguka — iwashe upya; tayari imeondolewa kwenye mzunguko.

Tulichojifunza

  • “Haianguki” si “yenye afya”. Kuzunguka bila kusonga hakuzalishi hitilafu, ni kasi tu kiasi cha kwamba mashine inaacha kujibu.
  • Seva ndogo zinahitaji swap. Hata kidogo, pamoja na swappiness ya chini, inampa kernel mahali pa kuweka kumbukumbu baridi.
  • Mipaka ya kumbukumbu inayojumlisha zaidi ya mashine ni kamari. Wakati mwingine unapoteza. Jua wakati umeweka dau.
  • Jua ukaguzi gani wa afya ambao autoscaling yako inauamini. Ukaguzi wa afya unaouliza tu “je, VM imewashwa?” hautabadilisha seva ambayo imeacha kufanya kazi.

Mythex · Pricing · Jenga chochote kwa AI · Violezo vya tovuti na programu · Mythex ikilinganishwa · Kamusi ya istilahi za kujenga programu kwa AI · Zana za bure za kujenga programu kwa 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 தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)