በElasticSearch በከፍተኛ ጭነት ፕሮጀክት ላይ የመጫን ማመቻቸት

ሃይ ሀብር! ስሜ Maxim Vasiliev እባላለሁ፣ በ FINCH እንደ ተንታኝ እና የፕሮጀክት ስራ አስኪያጅ እሰራለሁ። ዛሬ ElasticSearchን በመጠቀም 15 ሚሊዮን ጥያቄዎችን በ6 ደቂቃ ውስጥ ማስተናገድ እና በአንድ ደንበኞቻችን ጣቢያ ላይ ያለውን የዕለት ተዕለት ጭነት እንዴት ማሻሻል እንደቻልን ልነግርዎ እፈልጋለሁ። እንደ አለመታደል ሆኖ ፣ ያለስሞች ማድረግ አለብን ፣ NDA ስላለን ፣ የጽሁፉ ይዘት ከዚህ እንደማይጎዳ ተስፋ እናደርጋለን። እንሂድ.

ፕሮጀክቱ እንዴት እንደሚሰራ

ከጀርባችን፣ የደንበኞቻችንን ድረ-ገጾች እና የሞባይል መተግበሪያን አፈጻጸም የሚያረጋግጡ አገልግሎቶችን እንፈጥራለን። አጠቃላይ መዋቅሩ በሥዕላዊ መግለጫው ላይ ሊታይ ይችላል-

በElasticSearch በከፍተኛ ጭነት ፕሮጀክት ላይ የመጫን ማመቻቸት

በስራ ሂደት ውስጥ ብዙ ግብይቶችን እንሰራለን-ግዢዎች, ክፍያዎች, ክዋኔዎች ከተጠቃሚዎች ቀሪ ሂሳብ ጋር, ለዚህም ብዙ ምዝግብ ማስታወሻዎችን እናከማቻለን, እንዲሁም ይህን ውሂብ ወደ ውጫዊ ስርዓቶች አስመጣ እና ወደ ውጪ መላክ.

ከደንበኛው መረጃን ስንቀበል እና ወደ ተጠቃሚው ስናስተላልፍ የተገላቢጦሽ ሂደቶችም አሉ. በተጨማሪም, ከክፍያ እና ከጉርሻ ፕሮግራሞች ጋር ለመስራት አሁንም ሂደቶች አሉ.

አጭር ዳራ

መጀመሪያ ላይ PostgreSQLን እንደ ብቸኛው የውሂብ ማከማቻ ተጠቀምን። ለዲቢኤምኤስ መደበኛ ጥቅሞቹ፡ የግብይቶች መኖር፣ የዳበረ የውሂብ ናሙና ቋንቋ፣ ሰፊ የመዋሃድ መሳሪያዎች፣ ከጥሩ አፈፃፀም ጋር ተዳምሮ ፍላጎታችንን ለረጅም ጊዜ አሟልቷል ።

በ Postgres ውስጥ ሁሉንም ውሂብ አከማችተናል፡ ከግብይቶች እስከ ዜና። ነገር ግን የተጠቃሚዎች ቁጥር አድጓል፣ እና ከእሱ ጋር የጥያቄዎች ብዛት።

ለግንዛቤ ያህል በ 2017 በዴስክቶፕ ጣቢያው ላይ ብቻ ዓመታዊ የክፍለ ጊዜዎች ብዛት 131 ሚሊዮን በ 2018 - 125 ሚሊዮን 2019 እንደገና 130 ሚሊዮን. ከጣቢያው የሞባይል ስሪት እና የሞባይል መተግበሪያ ሌላ 100-200 ሚሊዮን ይጨምሩ እና እርስዎ በጣም ብዙ ጥያቄዎችን ያገኛሉ።

በፕሮጀክቱ እድገት ፖስትግሬስ ሸክሙን መቋቋም አቁሟል, ጊዜ አልነበረንም - ብዙ ቁጥር ያላቸው የተለያዩ መጠይቆች ታዩ, ለዚህም በቂ ቁጥር ያላቸው ኢንዴክሶች መፍጠር አልቻልንም.

ፍላጎታችንን የሚያቀርቡ እና ሸክሙን ከPostgreSQL የሚያነሱ ሌሎች የውሂብ ማከማቻዎች እንደሚያስፈልጉ ተረድተናል። Elasticsearch እና MongoDB በተቻለ አማራጮች ተወስደዋል። የኋለኛው በሚከተሉት ነጥቦች ተሸንፏል።

  1. በመረጃ ጠቋሚዎች ውስጥ ያለው የውሂብ መጠን ሲያድግ ቀርፋፋ የመረጃ ጠቋሚ ፍጥነት። በ Elastic, ፍጥነቱ በመረጃው መጠን ላይ የተመካ አይደለም.
  2. ምንም ሙሉ የጽሑፍ ፍለጋ የለም።

ስለዚህ ላስቲክን ለራሳችን መርጠን ለሽግግሩ ተዘጋጅተናል።

ወደ ላስቲክ ሽግግር

1. ሽግግሩን ከሽያጭ የፍለጋ አገልግሎት ነጥብ ጀምረናል. የእኛ ደንበኛ በድምሩ ወደ 70 የሚጠጉ የሽያጭ ነጥቦች አሉት፣ እና ይሄ በጣቢያው ላይ እና በመተግበሪያው ውስጥ ብዙ አይነት ፍለጋዎችን ይፈልጋል።

  • የጽሑፍ ፍለጋ በከተማ ስም
  • በተወሰነ ራዲየስ ውስጥ ጂኦሰርች ከተወሰነ ቦታ። ለምሳሌ ተጠቃሚው የትኛዎቹ የሽያጭ ቦታዎች ለቤቱ ቅርብ እንደሆኑ ማየት ከፈለገ።
  • በተሰጠው ካሬ ይፈልጉ - ተጠቃሚው በካርታው ላይ አንድ ካሬ ይሳሉ, እና በዚህ ራዲየስ ውስጥ ያሉት ሁሉም ነጥቦች ለእሱ ይታያሉ.
  • ተጨማሪ ማጣሪያዎችን ይፈልጉ። የመሸጫ ቦታዎች እርስ በእርሳቸው በመደብ ልዩነት ይለያያሉ

ስለ ድርጅቱ ከተነጋገርን, በ Postgres ውስጥ ለካርታውም ሆነ ለዜና የውሂብ ምንጭ አለን, እና በ Elastic Snapshots ውስጥ ከዋናው ውሂብ የተወሰዱ ናቸው. እውነታው ግን መጀመሪያ ላይ ፖስትግሬስ በሁሉም መስፈርቶች ፍለጋውን መቋቋም አልቻለም. ብዙ ኢንዴክሶች ብቻ ሳይሆኑ መደራረብም ስለሚችሉ የፖስትግሬስ መርሐግብር ጠፋ እና የትኛውን ኢንዴክስ መጠቀም እንዳለበት አልገባውም።

2. ቀጥሎ የዜና ክፍል ነበር። ተጠቃሚው በመረጃ ፍሰት ውስጥ እንዳይጠፋ ህትመቶች በየቀኑ በጣቢያው ላይ ይታያሉ, መረጃው ከመውጣቱ በፊት መደርደር አለበት. ፍለጋው ለዚህ ነው፡ ጣቢያውን በጽሁፍ ግጥሚያ መፈለግ እና በተመሳሳይ ጊዜ ተጨማሪ ማጣሪያዎችን ማገናኘት ይችላሉ ምክንያቱም እነሱ በ Elastic በኩል የተሰሩ ናቸው.

3. ከዚያም የግብይቱን ሂደት አንቀሳቅሰናል. ተጠቃሚዎች በጣቢያው ላይ የተወሰነ ምርት መግዛት እና ለሽልማት መሣተፍ መሳተፍ ይችላሉ። ከእንደዚህ አይነት ግዢዎች በኋላ, በተለይም በሳምንቱ መጨረሻ እና በበዓላት ላይ ከፍተኛ መጠን ያለው ውሂብን እናስኬዳለን. ለማነፃፀር ፣ በመደበኛ ቀናት የግዢዎች ብዛት በ 1,5-2 ሚሊዮን መካከል ከሆነ ፣ ከዚያ በበዓላት ላይ አኃዙ 53 ሚሊዮን ሊደርስ ይችላል።

በተመሳሳይ ጊዜ, ውሂቡ በተቻለ መጠን በአጭር ጊዜ ውስጥ መከናወን አለበት - ተጠቃሚዎች ውጤቱን ለብዙ ቀናት መጠበቅ አይወዱም. በፖስትግሬስ እንደዚህ አይነት ቀነ-ገደቦችን ለማግኘት ምንም መንገድ የለም - ብዙ ጊዜ መቆለፊያዎችን እንቀበላለን፣ እና ሁሉንም ጥያቄዎችን እያስተናገድን ሳለ ተጠቃሚዎች ሽልማቶችን ማግኘታቸውን ወይም እንዳልተቀበሉ ማረጋገጥ አልቻሉም። ይህ ለንግድ ስራ በጣም ደስ የሚል አይደለም፣ ስለዚህ ሂደቱን ወደ Elasticsearch አዛውረነዋል።

ወቅታዊነት

አሁን ዝማኔዎች በሚከተሉት ሁኔታዎች መሰረት በክስተት ላይ ተመስርተው ተዋቅረዋል፡

  1. የሽያጭ ነጥቦች. ከውጭ ምንጭ መረጃ እንደደረሰን ወዲያውኑ ማሻሻያውን እንጀምራለን.
  2. ዜና. ማንኛውም ዜና በጣቢያው ላይ እንደተስተካከለ ወዲያውኑ ወደ ላስቲክ ይላካል።

እዚህ እንደገና የላስቲክ ጥቅሞችን መጥቀስ ተገቢ ነው. በ Postgres ውስጥ፣ ጥያቄ ሲልኩ፣ ሁሉንም መዝገቦች በሐቀኝነት እስኪያጠናቅቅ ድረስ መጠበቅ አለብዎት። 10 መዝገቦችን ወደ ላስቲክ መላክ እና መዝገቦቹ በሁሉም Shards ላይ እስኪሰራጭ ድረስ ሳይጠብቁ ወዲያውኑ መስራት መጀመር ይችላሉ። በእርግጥ አንዳንድ Shard ወይም Replica ውሂቡን ወዲያውኑ ላያዩ ይችላሉ፣ነገር ግን ሁሉም ነገር በቅርቡ ይገኛል።

የመዋሃድ ዘዴዎች

ከላስቲክ ጋር ለማዋሃድ 2 መንገዶች አሉ-

  1. በTCP ላይ ባለው ቤተኛ ደንበኛ በኩል። የአገሬው አሽከርካሪ ቀስ በቀስ እየሞተ ነው: ከአሁን በኋላ አይደገፍም, በጣም የማይመች አገባብ አለው. ስለዚህ እኛ በተግባር አንጠቀምበትም እና ሙሉ በሙሉ ለመተው እንሞክራለን.
  2. ሁለቱንም የJSON ጥያቄዎችን እና የሉሴን አገባብ መጠቀም በሚችል በኤችቲቲፒ በይነገጽ በኩል። የመጨረሻው ላስቲክ የሚጠቀም የጽሑፍ ሞተር ነው. በዚህ ስሪት፣ በJSON ጥያቄዎች በ HTTP በኩል ባች የማድረግ ችሎታ እናገኛለን። ልንጠቀምበት የምንሞክረው ይህ አማራጭ ነው።

ለኤችቲቲፒ በይነገጽ ምስጋና ይግባውና የኤችቲቲፒ ደንበኛ ያልተመሳሰለ አተገባበር የሚሰጡ ቤተ-መጽሐፍቶችን መጠቀም እንችላለን። በትልቁ ማስተዋወቂያ ጊዜ ብዙ የረዳውን ባች እና ያልተመሳሰለ ኤፒአይ መጠቀም እንችላለን፣ ይህም ከፍተኛ አፈጻጸም ያስገኛል

ለማነጻጸር ጥቂት ቁጥሮች፡-

  • የ Postgres ጉርሻ ተጠቃሚዎችን ያለ ቡድን በ20 ክሮች ማስቀመጥ፡ 460713 ሪከርዶች በ42 ሰከንድ ውስጥ
  • ላስቲክ + ምላሽ ሰጪ ደንበኛ ለ 10 ክሮች + ባች ለ 1000 ኤለመንቶች፡ 596749 መዝገቦች በ11 ሰከንድ ውስጥ
  • ላስቲክ + ምላሽ ሰጪ ደንበኛ ለ 10 ክሮች + ባች ለ 1000 ኤለመንቶች፡ በ 23801684 ደቂቃዎች ውስጥ 4 ግቤቶች

አሁን JSON ን እንደ ባች/ባች ሳይሆን በማንኛውም የኤችቲቲፒ ደንበኛ የሚልክ የኤችቲቲፒ ጥያቄ አስተዳዳሪ ጽፈናል። እንዲሁም ጥያቄዎችን በተመሳሰለ ወይም በማይመሳሰል መልኩ ለመላክ መምረጥ ይችላሉ።

በአንዳንድ ውህደቶች ውስጥ, አሁንም ኦፊሴላዊውን የትራንስፖርት ደንበኛን እንጠቀማለን, ነገር ግን ይህ የሚቀጥለው የመልሶ ማቋቋም ጉዳይ ብቻ ነው. በዚህ አጋጣሚ በስፕሪንግ ዌብክሊንት መሰረት የተሰራ ብጁ ደንበኛ ለማቀነባበር ስራ ላይ ይውላል።

በElasticSearch በከፍተኛ ጭነት ፕሮጀክት ላይ የመጫን ማመቻቸት

ትልቅ ማስተዋወቂያ

በዓመት አንድ ጊዜ ፕሮጀክቱ ለተጠቃሚዎች ትልቅ ማስተዋወቂያ ያስተናግዳል - ይህ ተመሳሳይ Highload ነው, ምክንያቱም በዚህ ጊዜ በአስር ሚሊዮኖች ከሚቆጠሩ ተጠቃሚዎች ጋር በተመሳሳይ ጊዜ እንሰራለን.

ብዙውን ጊዜ የጭነቶች ቁንጮዎች በበዓላት ወቅት ይከሰታሉ, ነገር ግን ይህ ማስተዋወቂያ ፍጹም በተለየ ደረጃ ላይ ነው. ባለፈው ዓመት፣ በማስተዋወቂያው ቀን 27 ዕቃዎችን ሸጥን። መረጃው ከግማሽ ሰዓት በላይ ተሰራ፣ ይህም ለተጠቃሚዎች ችግር አስከትሏል። ተጠቃሚዎች ለተሳትፎ ሽልማቶችን ተቀብለዋል፣ ነገር ግን ሂደቱ መፋጠን እንዳለበት ግልጽ ሆነ።

በ2019 መጀመሪያ ላይ ElasticSearch እንደሚያስፈልገን ወስነናል። ለአንድ አመት ሙሉ፣ የተቀበለውን መረጃ በ Elastic እና በተንቀሳቃሽ ስልክ መተግበሪያ እና ድህረ ገጽ ኤፒአይ ውስጥ መልቀቃቸውን አደራጅተናል። በውጤቱም, በዘመቻው ውስጥ በሚቀጥለው ዓመት, እኛ አቀናጅተናል በ15 ደቂቃ ውስጥ 131 ግቤቶች።

ሸቀጦችን ለመግዛት እና በማስተዋወቂያዎች ውስጥ ሽልማቶችን ለመሳል የሚሳተፉ ብዙ ሰዎች ስላሉን ይህ ጊዜያዊ መለኪያ ነው. አሁን ወቅታዊ መረጃን ወደ ላስቲክ እየላክን ነው ነገርግን ወደፊት ላለፉት ወራት በማህደር የተቀመጡ መረጃዎችን እንደ ቋሚ ማከማቻ ወደ Postgres ለማስተላለፍ አቅደናል። የ Elastic ኢንዴክስን ላለመዝጋት, እሱም ገደቦችም አሉት.

ማጠቃለያ/ማጠቃለያ

በአሁኑ ጊዜ፣ የምንፈልጋቸውን አገልግሎቶች በሙሉ ወደ ላስቲክ አስተላልፈናል እና በዚህ ላይ ለጊዜው አቁመናል። አሁን የተጠቃሚውን ጭነት በሚወስደው በፖስትግሬስ ዋና ቋሚ ማከማቻ ላይ በላስቲክ ውስጥ ኢንዴክስ እየገነባን ነው።

ለወደፊቱ፣ የውሂብ ጥያቄው በጣም የተለያየ እንደሚሆን እና ያልተገደበ የአምዶች ብዛት እንደሚፈለግ ከተረዳን አገልግሎቶችን ለማስተላለፍ አቅደናል። ይህ ከአሁን በኋላ ለ Postgres ተግባር አይደለም።

በተግባራዊነት የሙሉ ጽሑፍ ፍለጋ ከፈለግን ወይም ብዙ የተለያዩ የፍለጋ መመዘኛዎች ካሉን ይህ ወደ ላስቲክ መተርጎም እንዳለበት አስቀድመን እናውቃለን።

⌘⌘⌘

ስላነበቡ እናመሰግናለን። ኩባንያዎ ElasticSearchን የሚጠቀም ከሆነ እና የራሱ የማስፈጸሚያ ጉዳዮች ካሉት፣ ይንገሩን። ሌሎች እንዴት እንደሆኑ ማወቅ አስደሳች ይሆናል 🙂

ምንጭ: hab.com

አስተያየት ያክሉ