ከፍተኛ fakapov ሲያን

ከፍተኛ fakapov ሲያን

ለሁሉም መልካም! 

ስሜ ኒኪታ እባላለሁ፣ እኔ የሲያን ኢንጂነሪንግ ቡድን ቡድን መሪ ነኝ። በኩባንያው ውስጥ ካሉኝ ኃላፊነቶች አንዱ በምርት ውስጥ ከመሠረተ ልማት ጋር የተያያዙ አደጋዎችን ወደ ዜሮ መቀነስ ነው.
ከዚህ በታች የሚብራራው ብዙ ሥቃይ አምጥቶልናል, የዚህ ጽሑፍ ዓላማ ሌሎች ሰዎች ስህተታችንን እንዳይደግሙ ወይም ቢያንስ የእነሱን ተፅእኖ እንዳይቀንሱ ማድረግ ነው. 

መግቢያ

ከረጅም ጊዜ በፊት, Cian monoliths ሲይዝ እና እስካሁን ምንም የማይክሮ አገልግሎት ፍንጭ የለም, ከ3-5 ገጾችን በማጣራት የንብረቱን ተገኝነት ለካን። 

እነሱ መልስ ይሰጣሉ - ሁሉም ነገር ጥሩ ነው, ለረጅም ጊዜ የማይመልሱ ከሆነ - ንቁ. እንደ አንድ ክስተት ለመቆጠር ከስራ ውጪ ለምን ያህል ጊዜ መቆየት እንዳለባቸው በስብሰባ ላይ ሰዎች ተወስነዋል። በክስተቱ ምርመራ ውስጥ የኢንጂነሮች ቡድን ሁል ጊዜ ይሳተፋል። ምርመራው ሲጠናቀቅ የድህረ ሞት ጽፈዋል - በቅርጸት ውስጥ በኢሜል የተላለፈ ሪፖርት ዓይነት: ምን እንደተፈጠረ, ለምን ያህል ጊዜ እንደቆየ, በአሁኑ ጊዜ ምን እንዳደረግን, ወደፊት ምን እናደርጋለን. 

የጣቢያው ዋና ገፆች ወይም እኛ ከታች እንደደረስን እንዴት እንደምንረዳ

 
በሆነ መንገድ የስህተቱን ቅድሚያ ለመረዳት ለንግድ ተግባር በጣም ወሳኝ የሆኑትን የጣቢያ ገጾችን ለይተናል። እነሱን በመጠቀም፣ የተሳካ/ያልተሳካላቸው ጥያቄዎች እና የጊዜ ማብቂያዎች ብዛት እንቆጥራለን። የስራ ሰዓትን የምንለካው በዚህ መንገድ ነው። 

ለዋናው አገልግሎት - ማስታወቂያዎችን መፈለግ እና ማስገባት - ለዋናው አገልግሎት ኃላፊነት ያላቸው በርካታ እጅግ በጣም አስፈላጊ የጣቢያው ክፍሎች እንዳሉ አግኝተናል እንበል። ያልተሳካላቸው የጥያቄዎች ብዛት ከ1% በላይ ከሆነ ይህ ወሳኝ ክስተት ነው። በዋና ሰአት ውስጥ በ 15 ደቂቃዎች ውስጥ የስህተቱ መጠን ከ 0,1% በላይ ከሆነ, ይህ እንደ ወሳኝ ክስተትም ይቆጠራል. እነዚህ መመዘኛዎች አብዛኞቹን ክስተቶች ይሸፍናሉ፤ የተቀሩት ከዚህ አንቀጽ ወሰን በላይ ናቸው።

ከፍተኛ fakapov ሲያን

ከፍተኛ ምርጥ ክስተቶች ሲያን

ስለዚህ አንድ ክስተት መከሰቱን በእርግጠኝነት ለማወቅ ተምረናል። 

አሁን እያንዳንዱ ክስተት በዝርዝር ተብራርቷል እና በጂራ ኢፒክ ውስጥ ተንፀባርቋል። በነገራችን ላይ: ለዚህ የተለየ ፕሮጀክት ጀመርን, FAIL ተብሎ የሚጠራው - በውስጡ ኢፒኮች ብቻ ሊፈጠሩ ይችላሉ. 

ባለፉት ጥቂት ዓመታት ውስጥ ሁሉንም ውድቀቶች ከሰበሰቡ መሪዎቹ የሚከተሉት ናቸው፡- 

  • ከ mssql ጋር የተዛመዱ ክስተቶች;
  • በውጫዊ ሁኔታዎች ምክንያት የተከሰቱ ክስተቶች;
  • የአስተዳዳሪ ስህተቶች.

የአስተዳዳሪዎችን ስህተቶች እና ሌሎች አንዳንድ አስደሳች ውድቀቶችን በበለጠ ዝርዝር እንመልከት ።

አምስተኛው ቦታ - "በዲ ኤን ኤስ ውስጥ ነገሮችን በቅደም ተከተል ማስቀመጥ"

አውሎ ነፋሱ ማክሰኞ ነበር። በዲ ኤን ኤስ ክላስተር ውስጥ ትዕዛዝ ወደነበረበት ለመመለስ ወስነናል። 

የውስጥ ዲ ኤን ኤስ አገልጋዮችን ከቢንዲ ወደ powerdns ማስተላለፍ ፈልጌ ነበር፣ ለዚህም ሙሉ ለሙሉ የተለዩ አገልጋዮችን በመመደብ፣ ከዲ ኤን ኤስ በስተቀር ምንም በሌለበት። 

በእያንዳንዱ የዲሲችን ቦታ አንድ የዲኤንኤስ አገልጋይ አስቀመጥን እና ዞኖችን ከቢንድ ወደ ፓወርዲንስ ለማንቀሳቀስ እና መሠረተ ልማትን ወደ አዲስ ሰርቨሮች ለመቀየር ጊዜው ደረሰ። 

በእንቅስቃሴው መካከል ፣ በሁሉም አገልጋዮች ላይ በአካባቢያዊ መሸጎጫ ውስጥ ከተገለጹት ሁሉም አገልጋዮች ፣ አንድ ብቻ የቀረው ፣ በሴንት ፒተርስበርግ ውስጥ ባለው የመረጃ ማእከል ውስጥ ነበር። ይህ ዲሲ መጀመሪያ ላይ ለእኛ ወሳኝ እንዳልሆነ ታውጇል፣ነገር ግን በድንገት አንድ የውድቀት ነጥብ ሆነ።
በሞስኮ እና በሴንት ፒተርስበርግ መካከል ያለው ቦይ የወደቀው በዚህ የመዛወር ወቅት ነበር። በእርግጥ ለአምስት ደቂቃዎች ያለ ኤን ኤስ ተተወን እና አስተናጋጁ ችግሩን ሲያስተካክለው ተመልሰናል። 

መደምደሚያ-

ቀደም ሲል ለሥራ በሚዘጋጅበት ጊዜ ውጫዊ ሁኔታዎችን ችላ ካልን, አሁን እኛ በምንዘጋጅበት ዝርዝር ውስጥም ተካትተዋል. እና አሁን ሁሉም ክፍሎች የተያዙ መሆናቸውን ለማረጋገጥ እንጥራለን n-2, እና በስራው ወቅት ይህንን ደረጃ ወደ n-1 ዝቅ ማድረግ እንችላለን.

  • የድርጊት መርሃ ግብር በሚዘጋጁበት ጊዜ አገልግሎቱ የማይሳካባቸውን ነጥቦች ምልክት ያድርጉ እና ሁሉም ነገር “ከክፉ ወደ መጥፎ” የሄደበትን ሁኔታ አስቀድመው ያስቡ።
  • የውስጥ ዲ ኤን ኤስ አገልጋዮችን በተለያዩ የጂኦግራፊያዊ አካባቢዎች/የውሂብ ማዕከሎች/መደርደሪያዎች/መቀየሪያዎች/ግብዓቶች ላይ ያሰራጩ።
  • በእያንዳንዱ አገልጋይ ላይ የአካባቢያዊ መሸጎጫ ዲ ኤን ኤስ አገልጋይ ይጫኑ ፣ ይህም ጥያቄዎችን ወደ ዋናዎቹ የዲ ኤን ኤስ አገልጋዮች ያዞራል ፣ እና የማይገኝ ከሆነ ፣ ከመሸጎጫው ምላሽ ይሰጣል። 

አራተኛው ቦታ - "ነገሮችን በ Nginx ውስጥ ማቀናጀት"

አንድ ጥሩ ቀን፣ ቡድናችን "ይህ በቂ ሆኖልናል" ብሎ ወሰነ እና የ nginx ውቅሮችን እንደገና የማደስ ሂደት ተጀመረ። ዋናው ግብ አወቃቀሮችን ወደ አንድ ሊታወቅ የሚችል መዋቅር ማምጣት ነው. ቀደም ሲል ሁሉም ነገር "በታሪክ የተመሰረተ" እና ምንም ዓይነት ሎጂክ አልያዘም. አሁን እያንዳንዱ አገልጋይ_ስም ወደ ተመሳሳይ ስም ፋይል ተወስዷል እና ሁሉም ውቅሮች ወደ አቃፊዎች ተሰራጭተዋል። በነገራችን ላይ ውቅሩ 253949 መስመሮችን ወይም 7836520 ቁምፊዎችን ይይዛል እና ወደ 7 ሜጋ ባይት ይወስዳል። ከፍተኛ የመዋቅር ደረጃ; 

Nginx መዋቅር

├── access
│   ├── allow.list
...
│   └── whitelist.conf
├── geobase
│   ├── exclude.conf
...
│   └── geo_ip_to_region_id.conf
├── geodb
│   ├── GeoIP.dat
│   ├── GeoIP2-Country.mmdb
│   └── GeoLiteCity.dat
├── inc
│   ├── error.inc
...
│   └── proxy.inc
├── lists.d
│   ├── bot.conf
...
│   ├── dynamic
│   └── geo.conf
├── lua
│   ├── cookie.lua
│   ├── log
│   │   └── log.lua
│   ├── logics
│   │   ├── include.lua
│   │   ├── ...
│   │   └── utils.lua
│   └── prom
│       ├── stats.lua
│       └── stats_prometheus.lua
├── map.d
│   ├── access.conf
│   ├── .. 
│   └── zones.conf
├── nginx.conf
├── robots.txt
├── server.d
│   ├── cian.ru
│   │   ├── cian.ru.conf
│   │   ├── ...
│   │   └── my.cian.ru.conf
├── service.d
│   ├── ...
│   └── status.conf
└── upstream.d
    ├── cian-mcs.conf
    ├── ...
    └── wafserver.conf

በጣም የተሻለ ነበር, ነገር ግን ውቅሮችን በመሰየም እና በማሰራጨት ሂደት ውስጥ, አንዳንዶቹ የተሳሳተ ቅጥያ ነበራቸው እና በ * .conf መመሪያ ውስጥ አልተካተቱም. በዚህ ምክንያት አንዳንድ አስተናጋጆች የማይገኙ ሆኑ እና 301 ወደ ዋናው ገጽ ተመልሰዋል። የምላሽ ኮድ 5xx/4xx ባለመሆኑ ይህ ወዲያውኑ አልታወቀም, ግን ጠዋት ላይ ብቻ. ከዚያ በኋላ የመሠረተ ልማት ክፍሎችን ለመፈተሽ ፈተናዎችን መጻፍ ጀመርን.

መደምደሚያ- 

  • የእርስዎን ውቅሮች በትክክል ያዋቅሩ (nginx ብቻ ሳይሆን) እና በፕሮጀክቱ የመጀመሪያ ደረጃ ላይ መዋቅሩን ያስቡ። በዚህ መንገድ ለቡድኑ የበለጠ እንዲረዱዋቸው ያደርጋቸዋል, ይህም በተራው ደግሞ TTM ን ይቀንሳል.
  • ለአንዳንድ የመሠረተ ልማት ክፍሎች ፈተናዎችን ይጻፉ. ለምሳሌ፡- ሁሉም ቁልፍ የአገልጋይ_ስሞች ትክክለኛውን ሁኔታ + ምላሽ አካል እንደሚሰጡ ማረጋገጥ። ከጠዋቱ 3 ሰዓት ላይ በድፍረት ላለማስታወስ የክፍሉን መሰረታዊ ተግባራት የሚፈትሹ ጥቂት ስክሪፕቶች በእጃቸው ብቻ በቂ ይሆናል። 

ሦስተኛው ቦታ - “በድንገት በካሳንድራ ውስጥ ቦታ አለቀ”

መረጃው ያለማቋረጥ አደገ፣ እና በካሳንድራ ክላስተር ውስጥ ትላልቅ የጉዳይ ቦታዎች መጠገን መበላሸት እስከጀመረበት ጊዜ ድረስ ሁሉም ነገር ጥሩ ነበር። 

አንድ ቀን አውሎ ነፋሱ ክላስተር ወደ ዱባነት ሊቀየር ትንሽ ቀርቧል።

  • በክላስተር ውስጥ ከቀረው አጠቃላይ ቦታ 20% ያህሉ ነበሩ ።
  • አንጓዎችን ሙሉ በሙሉ ለመጨመር የማይቻል ነው, ምክንያቱም በክፍልፋዮች ላይ ክፍተት ባለመኖሩ ምክንያት ማጽዳቱ አንድ መስቀለኛ መንገድ ከጨመረ በኋላ አያልፍም;
  • መጠቅለል ስለማይሰራ ምርታማነት ቀስ በቀስ ይቀንሳል; 
  • ክላስተር በድንገተኛ ሁነታ ላይ ነው።

ከፍተኛ fakapov ሲያን

ውጣ - ያለምንም ማጽዳት 5 ተጨማሪ አንጓዎችን ጨምረናል, ከዚያ በኋላ በስርዓት ከክላስተር ውስጥ አውጥተን እንደገና ማስገባት ጀመርን, ልክ እንደ ባዶ ኖዶች ባዶ ቦታዎች. ከምንፈልገው በላይ ብዙ ጊዜ አሳልፏል። ክላስተር ከፊል ወይም ሙሉ በሙሉ አለመገኘት አደጋ ነበር። 

መደምደሚያ-

  • በሁሉም የካሳንድራ አገልጋዮች ላይ በእያንዳንዱ ክፍልፋይ ላይ ያለው ቦታ ከ 60% በላይ መያዝ የለበትም. 
  • ከ 50% በማይበልጥ ሲፒዩ መጫን አለባቸው.
  • ስለ አቅም ማቀድ መርሳት የለብዎትም እና በልዩ ሁኔታ ላይ በመመርኮዝ ለእያንዳንዱ አካል ማሰብ ያስፈልግዎታል።
  • በክላስተር ውስጥ ያሉ ብዙ አንጓዎች, የተሻለ ይሆናል. አነስተኛ መጠን ያለው መረጃን የያዙ አገልጋዮች ከመጠን በላይ ይጫናሉ፣ እና እንደዚህ አይነት ክላስተር ለማደስ ቀላል ነው። 

ሁለተኛ ቦታ - "ውሂቡ ከቆንስላ ቁልፍ እሴት ማከማቻ ጠፋ"

ለአገልግሎት ግኝት እኛ ልክ እንደ ብዙዎቹ ቆንስል እንጠቀማለን። ግን ለሞኖሊት ሰማያዊ-አረንጓዴ አቀማመጥ ቁልፍ-እሴቱን እንጠቀማለን። ስለ ንቁ እና የቦዘኑ የላይ ዥረቶች መረጃ ያከማቻል፣ ይህም በሚሰማራበት ጊዜ ቦታዎችን ይቀይራል። ለዚሁ ዓላማ፣ ከKV ጋር መስተጋብር ያለው የማሰማራት አገልግሎት ተጽፏል። በአንድ ወቅት፣ ከKV የተገኘው መረጃ ጠፋ። ከማህደረ ትውስታ ወደነበረበት ተመልሷል፣ ግን ከብዙ ስህተቶች ጋር። በውጤቱም፣ በሰቀላው ወቅት፣ ወደ ላይ ያሉት ሸክሞች ፍትሃዊ ባልሆነ መልኩ ተሰራጭተዋል፣ እና በሲፒዩ ላይ ከመጠን በላይ በመጫናቸው ምክንያት ብዙ 502 ስህተቶች ደርሰውናል። በውጤቱም፣ ከቆንስል ኬቪ ወደ ፖስትግሬስ ተዛውረናል፣ ከአሁን በኋላ እነሱን ማስወገድ በጣም ቀላል ካልሆነ።  

መደምደሚያ-

  • ምንም ፍቃድ የሌላቸው አገልግሎቶች ለጣቢያው አሠራር ወሳኝ የሆኑ መረጃዎችን መያዝ የለባቸውም. ለምሳሌ፣ በ ES ውስጥ ፍቃድ ከሌልዎት፣ ከማያስፈልግበት ቦታ ሁሉ በኔትወርኩ ደረጃ መድረስን መከልከል፣ አስፈላጊ የሆኑትን ብቻ መተው እና እንዲሁም action.destructive_requires_name፡ እውነት ነው።
  • የመጠባበቂያ እና የማገገሚያ ዘዴዎን አስቀድመው ይለማመዱ. ለምሳሌ፣ ባክአፕ እና እነበረበት መመለስ የሚችል ስክሪፕት አስቀድመህ (ለምሳሌ በpython) ስራ።

የመጀመሪያ ቦታ - "ካፒቴን ግልጽ ያልሆነ" 

በአንድ ወቅት፣ በኋለኛ ክፍል 10+ አገልጋዮች ባሉበት በ nginx upstreams ላይ ያልተስተካከለ የጭነት ስርጭት አስተውለናል። ዙር-ሮቢን ከ 1 ኛ እስከ መጨረሻው የላይ ዥረት በቅደም ተከተል ጥያቄዎችን በመላኩ እና እያንዳንዱ nginx እንደገና መጫን በመጀመሩ ፣የመጀመሪያዎቹ ጅረቶች ሁልጊዜ ከቀሪው የበለጠ ብዙ ጥያቄዎችን ይቀበሉ ነበር።በዚህም ምክንያት ቀስ ብለው ሠርተዋል እና ጣቢያው በሙሉ ተጎድቷል። የትራፊክ መጠኑ እየጨመረ በሄደ ቁጥር ይህ በጣም ጎልቶ የሚታይ ሆነ። በዘፈቀደ ለማንቃት nginx ን ማዘመን ብቻ አልሰራም - ከስሪት 1.15 (በዚያን ጊዜ) ላይ ያልጀመረ የሉአ ኮድ ስብስብ እንደገና መስራት አለብን። የዘፈቀደ ድጋፍን ወደ እሱ በማስተዋወቅ የእኛን nginx 1.14.2 መለጠፍ ነበረብን። ይህም ችግሩን ፈታው። ይህ ስህተት የ"ካፒቴን ግልጽ ያልሆነ" ምድብ ያሸንፋል።

መደምደሚያ-

ይህንን ስህተት ማሰስ በጣም አስደሳች እና አስደሳች ነበር)። 

  • እንደዚህ አይነት መወዛወዝ በፍጥነት እንዲያገኙ እንዲረዳዎት ክትትልዎን ያደራጁ። ለምሳሌ፣ በእያንዳንዱ የላይ ዥረት ጀርባ ላይ rpsን ለመከታተል ELK ን መጠቀም ትችላለህ፣ የምላሽ ጊዜያቸውን ከ nginx እይታ አንጻር መከታተል ትችላለህ። በዚህ ሁኔታ, ይህ ችግሩን ለመለየት ረድቶናል. 

በውጤቱም፣ ለምታደርጉት ነገር በጣም ጥንቃቄ በተሞላበት አቀራረብ አብዛኛዎቹን ውድቀቶች ማስቀረት ይቻል ነበር። የመርፊን ህግ ሁል ጊዜ ማስታወስ አለብን፡- ሊሳሳት የሚችል ማንኛውም ነገር ይሳሳታል, እና በእሱ ላይ ተመስርተው ክፍሎችን ይገንቡ. 

ምንጭ: hab.com

አስተያየት ያክሉ