እኛ በሲአይኤን ቴራባይት የምዝግብ ማስታወሻዎችን እንዴት እንደገራን።

እኛ በሲአይኤን ቴራባይት የምዝግብ ማስታወሻዎችን እንዴት እንደገራን።

ሰላም ለሁላችሁም፣ ስሜ አሌክሳንደር እባላለሁ፣ እኔ በCIAN እንደ መሐንዲስ እሰራለሁ እና በስርዓት አስተዳደር እና በመሠረተ ልማት ሂደቶች አውቶማቲክ ላይ እሳተፋለሁ። ካለፉት አንቀጾች በአንዱ ላይ በሰጡት አስተያየቶች በቀን 4 ቴባ ሎግ የት እንደምናገኝ እና ምን እንደምናደርግ እንድንነግራቸው ተጠየቅን። አዎን, ብዙ የምዝግብ ማስታወሻዎች አሉን, እና እነሱን ለማስኬድ የተለየ የመሠረተ ልማት ክላስተር ተፈጥሯል, ይህም ችግሮችን በፍጥነት ለመፍታት ያስችለናል. በዚህ ጽሑፍ ውስጥ ከጊዜ ወደ ጊዜ እያደገ ከመጣው የውሂብ ፍሰት ጋር ለመስራት በአንድ አመት ውስጥ እንዴት እንዳስተካከለው እናገራለሁ.

ከየት ጀመርን።

እኛ በሲአይኤን ቴራባይት የምዝግብ ማስታወሻዎችን እንዴት እንደገራን።

ባለፉት ጥቂት አመታት በ cian.ru ላይ ያለው ጭነት በጣም በፍጥነት አድጓል, እና በ 2018 ሶስተኛው ሩብ, የንብረት ትራፊክ በወር 11.2 ሚሊዮን ልዩ ተጠቃሚዎች ደርሷል. በዚያን ጊዜ፣ በአስቸጋሪ ጊዜያት እስከ 40% የሚሆነውን የምዝግብ ማስታወሻዎች አጥተናል፣ ለዚህም ነው ክስተቶችን በፍጥነት ማስተናገድ ያልቻልነው እና እነሱን ለመፍታት ብዙ ጊዜ እና ጥረት የምናጠፋበት። ብዙውን ጊዜ የችግሩን መንስኤ ማግኘት አልቻልንም, እና ከተወሰነ ጊዜ በኋላ እንደገና ይከሰታል. ገሃነም ነበር እና የሆነ ነገር መደረግ ነበረበት.

በዛን ጊዜ፣ ምዝግብ ማስታወሻዎችን ለማከማቸት የ10 ዳታ ኖዶች ክላስተር ከElasticSearch ስሪት 5.5.2 ጋር ከመደበኛ የመረጃ ጠቋሚ ቅንጅቶች ጋር ተጠቀምን። ከአንድ አመት በፊት እንደ ታዋቂ እና ተመጣጣኝ መፍትሄ አስተዋውቋል: ከዚያም የምዝግብ ማስታወሻዎች ፍሰት በጣም ትልቅ አልነበረም, መደበኛ ያልሆኑ አወቃቀሮችን ለማምጣት ምንም ፋይዳ አልነበረውም. 

የገቢ ምዝግብ ማስታወሻዎችን ማቀነባበር በሎግስታሽ በተለያዩ ወደቦች በአምስት የላስቲክ ፍለጋ አስተባባሪዎች ላይ ቀርቧል። አንድ ኢንዴክስ, ምንም እንኳን መጠኑ ምንም ይሁን ምን, አምስት ጥራጊዎችን ያካትታል. በየሰዓቱ እና በየእለቱ ማሽከርከር የተደራጀ ሲሆን በዚህም ምክንያት በየሰዓቱ ወደ 100 የሚጠጉ አዳዲስ ሻርዶች በክላስተር ውስጥ ታይተዋል። በጣም ብዙ ምዝግብ ማስታወሻዎች ባይኖሩም, ክላስተር በደንብ ተቋቁሟል እና ማንም ለቅንብሮቹ ትኩረት አልሰጠም. 

የፈጣን እድገት ፈተናዎች

ሁለት ሂደቶች እርስ በርስ ሲደራረቡ የተፈጠሩት የምዝግብ ማስታወሻዎች መጠን በጣም በፍጥነት አደገ። በአንድ በኩል የአገልግሎቱ ተጠቃሚዎች ቁጥር አድጓል። በሌላ በኩል፣ የድሮ ሞኖሊቶችን በC# እና በፓይዘን እያየን ወደ ማይክሮ ሰርቪስ አርክቴክቸር በንቃት መቀየር ጀመርን። የሞኖሊት ክፍሎችን የተተኩ በርካታ ደርዘን አዳዲስ ማይክሮ አገልግሎቶች ለመሠረተ ልማት ክላስተር ብዙ ምዝግብ ማስታወሻዎችን አፍርተዋል። 

ክላስተር በተግባር ሊተዳደር የማይችልበት ደረጃ ላይ እንድንደርስ ያደረሰን መጠነ ሰፊ ነው። ምዝግብ ማስታወሻዎቹ በሰከንድ 20 ሺህ መልእክቶች መድረስ ሲጀምሩ ተደጋጋሚ ጥቅም የሌለው ሽክርክሪት የሻርዶቹን ቁጥር ወደ 6 ሺህ ጨምሯል እና በአንድ መስቀለኛ መንገድ ከ 600 በላይ ሻርዶች ነበሩ. 

ይህም ራም አመዳደብ ላይ ችግር አስከትሏል፣ እና አንድ መስቀለኛ መንገድ ሲጋጭ ሁሉም ሸርጣኖች በአንድ ጊዜ መንቀሳቀስ ጀመሩ፣ ትራፊክ በማባዛት እና ሌሎች ኖዶችን በመጫን፣ ይህም መረጃን ወደ ክላስተር ለመፃፍ ፈጽሞ የማይቻል አድርጎታል። እናም በዚህ ጊዜ ውስጥ ያለ እንጨት ቀረን. እና በአገልጋዩ ላይ ችግር ከተፈጠረ፣በመሰረቱ ከጥቅሉ 1/10 አጥተናል። ብዛት ያላቸው ትናንሽ ኢንዴክሶች ውስብስብነትን ጨምረዋል።

ያለ ምዝግብ ማስታወሻዎች ለክስተቱ ምክንያት አልገባንም እና ይዋል ይደር እንጂ እንደገና ተመሳሳይ መሰቅሰቂያ ልንረግጥ እንችላለን ፣ እና በቡድናችን ርዕዮተ ዓለም ውስጥ ይህ ተቀባይነት የለውም ፣ ምክንያቱም ሁሉም የሥራ ስልቶቻችን ተቃራኒውን ለማድረግ የተነደፉ ናቸው - በጭራሽ አይድገሙ። ተመሳሳይ ችግሮች. በሥራ ላይ ያሉ መሐንዲሶች ቡድን ከሜትሪዎች ብቻ ሳይሆን ከሎግ ጭምር ማንቂያዎችን ስለሚከታተል ይህንን ለማድረግ ሙሉውን የምዝግብ ማስታወሻዎች እና አቅርቦታቸው በእውነተኛ ጊዜ እንፈልጋለን። የችግሩን መጠን ለመረዳት በዚያን ጊዜ አጠቃላይ የምዝግብ ማስታወሻዎች መጠን በቀን 2 ቴባ ያህል ነበር። 

የምዝግብ ማስታወሻዎችን መጥፋት ሙሉ በሙሉ ለማስወገድ ግብ አውጥተናል እና ወደ ELK ክላስተር የሚላኩበትን ጊዜ በኃይል ከአቅም በላይ በሆነ ጊዜ ወደ 15 ደቂቃዎች ለመቀነስ (በኋላ በዚህ አሃዝ እንደ ውስጣዊ KPI ተመርተናል)።

አዲስ የማዞሪያ ዘዴ እና ሙቅ-ሙቅ አንጓዎች

እኛ በሲአይኤን ቴራባይት የምዝግብ ማስታወሻዎችን እንዴት እንደገራን።

የ ElasticSearch ሥሪትን ከ5.5.2 ወደ 6.4.3 በማዘመን የክላስተር ልወጣን ጀመርን። እንደገና የእኛ ስሪት 5 ክላስተር ሞተ፣ እና እሱን ለማጥፋት እና ሙሉ ለሙሉ ለማዘመን ወሰንን - አሁንም ምንም ምዝግብ ማስታወሻዎች የሉም። ስለዚህ ይህንን ሽግግር ያደረግነው በጥቂት ሰዓታት ውስጥ ነው።

በዚህ ደረጃ በጣም ትልቅ ለውጥ የአፓቼ ካፍካ በሶስት ኖዶች ላይ ከአስተባባሪ ጋር እንደ መካከለኛ ቋት መተግበር ነበር። የመልእክት ደላላው ElasticSearch ላይ ባሉ ችግሮች ወቅት ምዝግብ ማስታወሻዎችን ከማጣት አዳነን። በተመሳሳይ ጊዜ 2 ኖዶችን ወደ ክላስተር ጨምረናል እና በመረጃ ማእከሉ ውስጥ በተለያዩ መደርደሪያዎች ውስጥ በሚገኙ ሶስት "ሙቅ" ኖዶች ወደ ሞቃት ሞቃት አርክቴክቸር ቀይረናል። በማንኛውም ሁኔታ ሊጠፋ የማይገባውን ጭንብል በመጠቀም የምዝግብ ማስታወሻዎችን አዙረናል - nginx እና እንዲሁም የመተግበሪያ ስህተት ምዝግብ ማስታወሻዎች። ጥቃቅን ምዝግብ ማስታወሻዎች ወደ ቀሪዎቹ አንጓዎች ተልከዋል - ማረም, ማስጠንቀቂያ, ወዘተ, እና ከ 24 ሰዓታት በኋላ, ከ "ሙቅ" አንጓዎች "አስፈላጊ" ምዝግቦች ተላልፈዋል.

የትናንሽ ኢንዴክሶችን ቁጥር ላለመጨመር, ከግዜ ማሽከርከር ወደ ማዞሪያ ዘዴ ቀይረናል. በፎረሞቹ ላይ ብዙ መረጃዎች ነበሩ በመረጃ ጠቋሚ መጠን መዞር በጣም አስተማማኝ አይደለም, ስለዚህ በመረጃ ጠቋሚው ውስጥ ባሉ ሰነዶች ብዛት መዞርን ለመጠቀም ወስነናል. እያንዳንዱን ኢንዴክስ ተንትነን እና ማሽከርከር መሥራት ያለበትን የሰነዶች ብዛት መዝግበናል. ስለዚህ, በጣም ጥሩውን የሻርድ መጠን ደርሰናል - ከ 50 ጂቢ አይበልጥም. 

የክላስተር ማመቻቸት

እኛ በሲአይኤን ቴራባይት የምዝግብ ማስታወሻዎችን እንዴት እንደገራን።

ሆኖም ችግሮቹን ሙሉ በሙሉ አላስወገድንም። እንደ አለመታደል ሆኖ ትናንሽ ኢንዴክሶች አሁንም ታይተዋል-የተጠቀሰውን መጠን አልደረሱም ፣ አልተሽከረከሩም እና ከሦስት ቀናት በላይ የቆዩ ኢንዴክሶችን በዓለም አቀፍ ደረጃ በማጽዳት ተሰርዘዋል ፣ ምክንያቱም ማሽከርከርን በቀን ስላስወገድን። ይህ ከክላስተር የሚገኘው መረጃ ጠቋሚ ሙሉ በሙሉ በመጥፋቱ እና በሌለው ኢንዴክስ ለመፃፍ የተደረገ ሙከራ ለማኔጅመንት የተጠቀምነውን የኩራቴር አመክንዮ ሰበረ። ለመጻፍ ተለዋጭ ስም ወደ ኢንዴክስ ተቀይሮ ሮሎቨር አመክንዮ ሰበረ፣ ይህም ከቁጥጥር ውጭ የሆነ የአንዳንድ ኢንዴክሶች እስከ 600 ጂቢ እድገት አስከትሏል። 

ለምሳሌ፣ ለማሽከርከር ውቅር፡-

сurator-elk-rollover.yaml

---
actions:
  1:
    action: rollover
    options:
      name: "nginx_write"
      conditions:
        max_docs: 100000000
  2:
    action: rollover
    options:
      name: "python_error_write"
      conditions:
        max_docs: 10000000

ሮልቨር ተለዋጭ ስም ከሌለ አንድ ስህተት ተከስቷል፡-

ERROR     alias "nginx_write" not found.
ERROR     Failed to complete action: rollover.  <type 'exceptions.ValueError'>: Unable to perform index rollover with alias "nginx_write".

ለዚህ ችግር መፍትሄውን ለቀጣዩ ድግግሞሽ ትተን ሌላ ጉዳይ አነሳን፡ ወደ Logstash መሳብ አመክንዮ ቀይረናል፣ ገቢ ምዝግብ ማስታወሻዎችን (አላስፈላጊ መረጃዎችን በማስወገድ እና በማበልጸግ)። ዶከር ውስጥ አስቀመጥነው፣ ይህም በዶክተር-ኮምፖስ በኩል አስጀምረናል፣ እና ሎግስታሽ-ላኪን እዚያ ላይ አስቀመጥን፣ ይህም የሎግ ዥረቱን ተግባራዊ ለማድረግ መለኪያዎችን ወደ ፕሮሜቴየስ ይልካል። በዚህ መንገድ እያንዳንዱን አይነት ሎግስታሽ የማዘጋጀት ኃላፊነት ያለባቸውን የሎግስታሽ አብነቶችን ቁጥር በተቀላጠፈ ለመቀየር እድል ሰጥተናል።

ክላስተርን እያሻሻልን ሳለ የ cian.ru ትራፊክ በየወሩ ወደ 12,8 ሚሊዮን ልዩ ተጠቃሚዎች ጨምሯል። በውጤቱም, የእኛ ትራንስፎርሜሽን በአምራችነት ላይ ከተደረጉ ለውጦች በጥቂቱ እንደነበሩ እና "ሞቃታማ" አንጓዎች ጭነቱን መቋቋም ባለመቻላቸው እና ሙሉውን የምዝግብ ማስታወሻዎች እንዲዘገዩ ያደርጉ ነበር. እኛ "ትኩስ" ውሂብ ያለ ውድቀቶች ተቀብለዋል, ነገር ግን እኛ የቀረውን አሰጣጥ ላይ ጣልቃ መግባት እና ኢንዴክሶች በእኩል ለማሰራጨት አንድ በእጅ rollover ማድረግ ነበር. 

በተመሳሳይ ጊዜ በክላስተር ውስጥ የሎግስታሽ ምሳሌዎችን ማመጣጠን እና መለወጥ ውስብስብ የሆነው የአካባቢያዊ ዶከር-አቀናባሪ በመሆኑ እና ሁሉም ድርጊቶች በእጅ የተከናወኑ ናቸው (አዲስ ጫፎችን ለመጨመር ሁሉንም በእጅ ማለፍ አስፈላጊ ነበር) አገልጋዮቹ እና ዶከር-አቀናጅተው -d በየቦታው)።

የምዝግብ ማስታወሻ እንደገና ማሰራጨት

በዚህ አመት መስከረም ላይ አሁንም ሞኖሊትን እየቆረጥን ነበር, በክላስተር ላይ ያለው ሸክም እየጨመረ ነበር, እና የምዝግብ ማስታወሻዎች ፍሰት በሴኮንድ ወደ 30 ሺህ መልእክቶች እየቀረበ ነበር. 

እኛ በሲአይኤን ቴራባይት የምዝግብ ማስታወሻዎችን እንዴት እንደገራን።

የሚቀጥለውን ድግግሞሽ በሃርድዌር ማሻሻያ ጀመርን። ከአምስት አስተባባሪዎች ወደ ሶስት ቀይረን የመረጃ ኖዶችን ቀይረን በገንዘብ እና በማከማቻ ቦታ አሸነፍን። ለአንጓዎች ሁለት አወቃቀሮችን እንጠቀማለን- 

  • ለ “ትኩስ” አንጓዎች፡ E3-1270 v6/960Gb SSD/32 Gb x 3 x 2 (3 ለሆት1 እና 3 ለሆት2)።
  • ለ “ሞቃት” አንጓዎች፡- E3-1230 v6/4Tb SSD/32 Gb x 4።

በዚህ ድግግሞሹ ኢንዴክስን ከማይክሮ ሰርቪስ የመዳረሻ ምዝግብ ማስታወሻዎች ጋር አንቀሳቅሰናል፣ ይህም ከፊት መሾመር የ nginx ምዝግብ ማስታወሻዎች ጋር ተመሳሳይ ቦታ የሚይዘው ወደ ሶስት “ትኩስ” አንጓዎች ሁለተኛ ቡድን ነው። አሁን ለ 20 ሰአታት በ "ሙቅ" ኖዶች ላይ መረጃን እናከማቻለን, ከዚያም ወደ "ሙቅ" አንጓዎች ወደ ቀሪው ምዝግብ ማስታወሻዎች እናስተላልፋለን. 

ሽክርክራቸውን በማስተካከል የጠፉትን ትናንሽ ኢንዴክሶች ችግር ፈታን። አሁን ኢንዴክሶች በየ 23 ሰዓቱ በማንኛውም ሁኔታ ይሽከረከራሉ, ምንም እንኳን እዚያ ትንሽ ውሂብ ቢኖርም. ይህ የሻርዶችን ቁጥር በትንሹ ጨምሯል (ከነሱ ውስጥ 800 ያህሉ ነበሩ) ነገር ግን ከክላስተር አፈፃፀም አንጻር ሲታይ ይታገሣል። 

በውጤቱም, በክላስተር ውስጥ ስድስት "ሙቅ" እና አራት "ሙቅ" አንጓዎች ብቻ ነበሩ. ይህ ለረዥም ጊዜ በጥያቄዎች ላይ ትንሽ መዘግየትን ያመጣል, ነገር ግን ለወደፊቱ የአንጓዎችን ቁጥር መጨመር ይህንን ችግር ይፈታል.

ይህ ድግግሞሹም በከፊል አውቶማቲክ የመለጠጥ እጥረት ችግርን አስተካክሏል። ይህንን ለማድረግ የመሠረተ ልማት አውታሮችን አሰማርተናል Nomad cluster - ቀደም ሲል በምርት ላይ ካሰማራነው ጋር ተመሳሳይ ነው። ለአሁን, Logstash መጠን እንደ ጭነቱ በራስ-ሰር አይለወጥም, ነገር ግን ወደዚህ እንመጣለን.

እኛ በሲአይኤን ቴራባይት የምዝግብ ማስታወሻዎችን እንዴት እንደገራን።

ለወደፊቱ እቅድ

የተተገበረው ውቅር ሚዛን በትክክል ነው, እና አሁን 13,3 ቴባ ውሂብ እናከማቻለን - ሁሉም ምዝግብ ማስታወሻዎች ለ 4 ቀናት, ይህም ለአደጋ ጊዜ ማንቂያዎች አስፈላጊ ነው. አንዳንዶቹን ምዝግብ ማስታወሻዎች ወደ መለኪያዎች እንለውጣቸዋለን፣ ይህም ወደ ግራፋይት እንጨምራለን። የኢንጂነሮችን ሾል ቀላል ለማድረግ ለመሠረተ ልማት ክላስተር መለኪያዎች እና ስክሪፕቶች በከፊል አውቶማቲክ የጋራ ችግሮች መጠገን አሉን። ለቀጣዩ አመት የታቀደውን የውሂብ ኖዶች ቁጥር ከጨመርን በኋላ, ከ 4 እስከ 7 ቀናት ወደ የውሂብ ማከማቻ እንቀይራለን. ሁሌም በተቻለ ፍጥነት ክስተቶችን ለመመርመር ስለምንሞክር እና ለረጅም ጊዜ ምርመራዎች የቴሌሜትሪ መረጃ ስላለ ይህ ለትክንያት ሾል በቂ ይሆናል. 

በጥቅምት 2019 የ cian.ru ትራፊክ በወር ወደ 15,3 ሚሊዮን ልዩ ተጠቃሚዎች አድጓል። ይህ የምዝግብ ማስታወሻዎችን ለማድረስ የስነ-ህንፃው መፍትሄ ከባድ ፈተና ሆነ። 

አሁን ElasticSearchን ወደ ስሪት 7 ለማዘመን በዝግጅት ላይ ነን።ነገር ግን ለዚህ በElasticSearch ውስጥ የብዙ ኢንዴክሶችን ካርታ ማዘመን አለብን ምክንያቱም ከስሪት 5.5 ተንቀሳቅሰዋል እና በስሪት 6 ላይ እንደተቋረጡ ስለታወጁ (በቀላሉ በስሪት ውስጥ የሉም) 7) ይህ ማለት በዝማኔው ሂደት ውስጥ በእርግጠኝነት አንድ ዓይነት የኃይል ማጅራት ይሆናል ፣ ይህም ችግሩ በሚፈታበት ጊዜ ያለ ምዝግብ ማስታወሻዎች ይተወናል። የስሪት 7፣ የተሻሻለ በይነገጽ እና አዲስ ማጣሪያዎች ያለው ኪባናን በጣም እየጠበቅን ነው። 

ዋናውን አላማችንን አሳክተናል፡ የምዝግብ ማስታወሻዎችን ማጣት አቁመናል እና የመሠረተ ልማት ክላስተር የሚቆይበትን ጊዜ በሳምንት ከ2-3 ብልሽቶች ወደ ሁለት ሰዓታት የጥገና ሥራ በወር። ይህ ሁሉ በምርት ውስጥ ያለው ሥራ የማይታይ ነው. ሆኖም ግን, አሁን በአገልግሎታችን ላይ ምን እየተፈጠረ እንዳለ በትክክል መወሰን እንችላለን, በፍጥነት በፀጥታ ሁነታ ልናደርገው እንችላለን እና ምዝግብ ማስታወሻዎቹ እንደሚጠፉ አይጨነቁ. በአጠቃላይ, ረክተናል, ደስተኛ እና ለአዲስ ብዝበዛዎች እየተዘጋጀን ነው, ይህም በኋላ ላይ እንነጋገራለን.

ምንጭ: hab.com

አስተያየት ያክሉ