Netramesh - ቀላል ክብደት ያለው አገልግሎት ጥልፍልፍ መፍትሄ

ከአንድ ነጠላ አፕሊኬሽን ወደ ማይክሮ ሰርቪስ አርክቴክቸር ስንሸጋገር አዳዲስ ፈተናዎች ያጋጥሙናል።

በአንድ ነጠላ አፕሊኬሽን ውስጥ ስህተቱ በየትኛው የስርአቱ ክፍል እንደተፈጠረ ለማወቅ ብዙ ጊዜ ቀላል ነው። ምናልባትም ችግሩ በራሱ በሞኖሊት ኮድ ውስጥ ወይም በመረጃ ቋቱ ውስጥ ነው። ነገር ግን በማይክሮ ሰርቪስ አርክቴክቸር ውስጥ ችግር መፈለግ ስንጀምር, ሁሉም ነገር አሁን በጣም ግልጽ አይደለም. ጥያቄው ከመጀመሪያው እስከ መጨረሻው የወሰደውን አጠቃላይ መንገድ ፈልገን በመቶዎች ከሚቆጠሩ ማይክሮ ሰርቪስ ውስጥ መምረጥ አለብን። ከዚህም በላይ ብዙዎቹ የራሳቸው የማጠራቀሚያ መሳሪያዎች አሏቸው, ይህ ደግሞ አመክንዮአዊ ስህተቶችን, እንዲሁም በአፈፃፀም እና በስህተት መቻቻል ላይ ችግሮች ሊያስከትሉ ይችላሉ.

Netramesh - ቀላል ክብደት ያለው አገልግሎት ጥልፍልፍ መፍትሄ

እንደነዚህ ያሉትን ችግሮች ለመቋቋም የሚረዳ መሣሪያ ለማግኘት ለረጅም ጊዜ ፈልጌ ነበር (ስለዚህ ሐበሬ ላይ ጽፌ ነበር፡- 1, 2), ግን በመጨረሻ የራሴን ክፍት ምንጭ መፍትሄ አዘጋጅቻለሁ. በዚህ ጽሑፍ ውስጥ ስለ የአገልግሎት ሜሽ አቀራረብ ጥቅሞች እናገራለሁ እና ለትግበራው አዲስ መሣሪያ እጋራለሁ።

የተከፋፈለ ፍለጋ በተከፋፈሉ ስርዓቶች ውስጥ ስህተቶችን የማግኘት ችግር የተለመደ መፍትሄ ነው. ግን ይህ ስለ አውታረ መረብ ግንኙነቶች መረጃን የመሰብሰብ ዘዴ በስርዓቱ ውስጥ እስካሁን ካልተተገበረ ፣ ወይም ፣ በከፋ መልኩ ፣ በስርዓቱ ውስጥ በከፊል በትክክል ቢሰራ ፣ ግን በከፊል ወደ አሮጌ አገልግሎቶች ስላልተጨመረ ምን አይሰራም። ? የችግሩን ትክክለኛ መንስኤ ለማወቅ በስርዓቱ ውስጥ ምን እየተከሰተ እንዳለ ሙሉ ምስል ማግኘት ያስፈልጋል. በተለይም በቁልፍ ንግድ-ወሳኝ መንገዶች ውስጥ የትኞቹ ጥቃቅን አገልግሎቶች እንደሚሳተፉ መረዳት በጣም አስፈላጊ ነው.

እዚህ የአገልግሎት ሜሽ አቀራረብ ወደእኛ እርዳታ ሊመጣ ይችላል, ይህም ሁሉንም የኔትወርክ መረጃዎችን ለመሰብሰብ ከሚሰጡት አገልግሎቶች በታች በሆነ ደረጃ ሁሉንም ማሽነሪዎችን ይመለከታል. ይህ አቀራረብ ሁሉንም ትራፊክ ለመጥለፍ እና በበረራ ላይ ለመተንተን ያስችለናል. ከዚህም በላይ ትግበራዎች ስለ እሱ ምንም እንኳን ማወቅ አያስፈልጋቸውም.

የአገልግሎት መረብ አቀራረብ

የአገልግሎቱ ሜሽ አቀራረብ ዋና ሀሳብ በአውታረ መረቡ ላይ ሌላ የመሠረተ ልማት ሽፋን ማከል ነው ፣ ይህም ማንኛውንም ነገር በአገልግሎት-አገልግሎቶች መስተጋብር ለማድረግ ያስችለናል። አብዛኛዎቹ አተገባበርዎች እንደሚከተለው ይሰራሉ-ግልጽ ተኪ ያለው ተጨማሪ የጎን መኪና ኮንቴይነር በእያንዳንዱ ማይክሮ ሰርቪስ ውስጥ ተጨምሯል ፣ በዚህም ሁሉም የአገልግሎቱ ገቢ እና ወጪ ትራፊክ ያልፋል። እና ይህ የደንበኛ ማመጣጠን የምንሰራበት፣ የደህንነት ፖሊሲዎችን የምንተገብርበት፣ በጥያቄዎች ብዛት ላይ ገደብ የምንጥልበት እና በምርት ውስጥ ባሉ አገልግሎቶች መስተጋብር ላይ ጠቃሚ መረጃ የምንሰበስብበት ቦታ ነው።

Netramesh - ቀላል ክብደት ያለው አገልግሎት ጥልፍልፍ መፍትሄ

መፍትሔዎች

የዚህ አቀራረብ በርካታ ትግበራዎች ቀድሞውኑ አሉ- Istio и linkerd2. ከሳጥኑ ውስጥ ብዙ ባህሪያትን ይሰጣሉ. ግን በተመሳሳይ ጊዜ በሀብቶች ላይ ትልቅ ወጪ ይመጣል። ከዚህም በላይ እንዲህ ዓይነቱ አሠራር የሚሠራበት ክላስተር በጨመረ ቁጥር አዲሱን መሠረተ ልማት ለመጠበቅ ብዙ ሀብቶች ያስፈልጋሉ. በአቪቶ በሺዎች የሚቆጠሩ የአገልግሎት አጋጣሚዎችን የያዙ የ kubernetes ስብስቦችን እንሰራለን (እና ቁጥራቸው በፍጥነት ማደጉን ይቀጥላል)። አሁን ባለው አተገባበር፣ ኢስቲዮ በአንድ የአገልግሎት ምሳሌ ~ 300Mb ራም ይጠቀማል። በብዙ እድሎች ምክንያት፣ ግልጽነት ያለው ሚዛን የአገልግሎቶቹን አጠቃላይ ምላሽ ጊዜ (እስከ 10ሚሴ) ይነካል።

በውጤቱም, አሁን ምን አይነት ችሎታዎች እንደሚያስፈልጉን በትክክል ተመልክተናል, እና እንደዚህ አይነት መፍትሄዎችን ተግባራዊ ማድረግ የጀመርንበት ዋናው ምክንያት የመከታተያ መረጃን ከመላው ስርዓቱ በግልፅ መሰብሰብ መቻል እንደሆነ ወስነናል. እንዲሁም የአገልግሎቶችን መስተጋብር ለመቆጣጠር እና በአገልግሎቶች መካከል በሚተላለፉ ራስጌዎች ላይ የተለያዩ ማጭበርበሮችን ለማድረግ እንፈልጋለን።

በዚህም ምክንያት ወደ ውሳኔያችን ደርሰናል፡-  ኔትራሜሽ.

ኔትራሜሽ

ኔትራሜሽ በሲስተሙ ውስጥ ያሉ የአገልግሎቶች ብዛት ምንም ይሁን ምን ወሰን በሌለው የመጠን ችሎታ ያለው ቀላል ክብደት ያለው የአገልግሎት መረብ መፍትሄ ነው።

የአዲሱ መፍትሔ ዋና ግቦች ዝቅተኛ የሃብት ወጪዎች እና ከፍተኛ አፈፃፀም ነበሩ. ከዋናዎቹ ባህሪያት መካከል፣ ወዲያውኑ ወደ ጃገር ስርዓታችን የመከታተያ ክፍተቶችን በግልፅ መላክ እንድንችል እንፈልጋለን።

ዛሬ, አብዛኛዎቹ የደመና መፍትሄዎች በጎላንግ ውስጥ ይተገበራሉ. እና በእርግጥ, ለዚህ ምክንያቶች አሉ. በጎላንግ ውስጥ ከአይ/ኦ ጋር በማይመሳሰል መልኩ የሚሰሩ የኔትወርክ አፕሊኬሽኖችን መፃፍ እና እንደ አስፈላጊነቱ በኮሮች ላይ መመዘን ምቹ እና ቀላል ነው። እና, በጣም አስፈላጊ የሆነው, ይህንን ችግር ለመፍታት አፈፃፀሙ በቂ ነው. ጎላንግንም የመረጥነው ለዚህ ነው።

ምርታማነት

ጥረታችንን ከፍተኛውን ምርታማነት በማሳካት ላይ አተኩረናል። ከእያንዳንዱ የአገልግሎቱ ምሳሌ ቀጥሎ ለተዘረጋው መፍትሄ ትንሽ የ RAM እና የሲፒዩ ፍጆታ ያስፈልጋል። እና በእርግጥ, የምላሽ መዘግየት እንዲሁ ትንሽ መሆን አለበት.

ምን ውጤት እንዳገኘን እንይ።

ራንደም አክሰስ ሜሞሪ

Netramesh ~ 10Mb ያለ ትራፊክ እና 50Mb ቢበዛ በአንድ ምሳሌ እስከ 10000 RPS ጭነት ይበላል።

የኢስቲዮ መልእክተኛ ፕሮክሲ ሁል ጊዜ ~300Mb በቡድናችን በሺዎች ከሚቆጠሩ አጋጣሚዎች ጋር ይበላል። ይህ ወደ አጠቃላይ ክላስተር እንዲመጠን አይፈቅድም።

Netramesh - ቀላል ክብደት ያለው አገልግሎት ጥልፍልፍ መፍትሄ

Netramesh - ቀላል ክብደት ያለው አገልግሎት ጥልፍልፍ መፍትሄ

በ Netramesh የ ~ 10x የማህደረ ትውስታ ፍጆታ ቅነሳ አግኝተናል።

ሲፒዩ

የሲፒዩ አጠቃቀም በአንፃራዊነት በጭነት እኩል ነው። ወደ ጎን መኪናው በአንድ ጊዜ በጥያቄዎች ብዛት ላይ የተመሠረተ ነው። በሴኮንድ 3000 ጥያቄዎች በከፍተኛ ደረጃ ላይ ያሉ እሴቶች፡-

Netramesh - ቀላል ክብደት ያለው አገልግሎት ጥልፍልፍ መፍትሄ

Netramesh - ቀላል ክብደት ያለው አገልግሎት ጥልፍልፍ መፍትሄ

አንድ ተጨማሪ አስፈላጊ ነጥብ አለ Netramesh - ያለ መቆጣጠሪያ አውሮፕላን መፍትሄ እና ያለ ጭነት የሲፒዩ ጊዜ አይፈጅም. ከኢስቲዮ ጋር፣ የጎን መኪናዎች ሁልጊዜ የአገልግሎት ማብቂያ ነጥቦችን ያዘምኑ። በውጤቱም, ይህንን ምስል ያለ ጭነት ማየት እንችላለን-

Netramesh - ቀላል ክብደት ያለው አገልግሎት ጥልፍልፍ መፍትሄ

በአገልግሎቶች መካከል ግንኙነት ለማድረግ HTTP/1 እንጠቀማለን። ለኢስቲዮ በተወካዮች በኩል ሲደረግ የምላሽ ጊዜ መጨመር እስከ 5-10 ሚ. በ Netramesh ይህ ጊዜ ወደ 0.5-2 ሚሴ ቀንሷል።

የመጠን አቅም

በእያንዳንዱ ፕሮክሲ የሚፈጀው አነስተኛ መጠን ያለው ሃብት ከእያንዳንዱ አገልግሎት አጠገብ ማስቀመጥ ያስችላል። እያንዳንዱ የጎን መኪና ቀላል ክብደት እንዲኖረው ኔትራሜሽ ሆን ተብሎ የተፈጠረ ያለ መቆጣጠሪያ አውሮፕላን አካል ነው። ብዙ ጊዜ በአገልግሎት መረብ መፍትሄዎች ውስጥ፣ የመቆጣጠሪያው አውሮፕላኑ የአገልግሎት ግኝት መረጃን ለእያንዳንዱ የጎን መኪና ያሰራጫል። ከሱ ጋር ስለ ጊዜ ማብቂያዎች እና ስለ ማመጣጠን ቅንጅቶች መረጃ ይመጣል። ይህ ሁሉ ብዙ ጠቃሚ ነገሮችን እንዲያደርጉ ያስችልዎታል, ግን በሚያሳዝን ሁኔታ, በመጠን የጎን መኪኖችን ያብባል.

የአገልግሎት ግኝት

Netramesh - ቀላል ክብደት ያለው አገልግሎት ጥልፍልፍ መፍትሄ

Netramesh ለአገልግሎት ፍለጋ ምንም ተጨማሪ ዘዴዎችን አይጨምርም። ሁሉም ትራፊክ በኔትራ የጎን መኪና በኩል በግልጥነት ተኪ ነው።

Netramesh HTTP/1 መተግበሪያ ፕሮቶኮልን ይደግፋል። እሱን ለመግለጽ፣ ሊዋቀር የሚችል የወደብ ዝርዝር ጥቅም ላይ ይውላል። በተለምዶ ስርዓቱ የኤችቲቲፒ ግንኙነት የሚፈጠርባቸው በርካታ ወደቦች አሉት። ለምሳሌ በአገልግሎቶች እና በውጫዊ ጥያቄዎች መካከል መስተጋብር ለመፍጠር 80, 8890, 8080 እንጠቀማለን.በዚህ ሁኔታ የአካባቢን ተለዋዋጭ በመጠቀም ሊዘጋጁ ይችላሉ. NETRA_HTTP_PORTS.

Kubernetes እንደ ኦርኬስትራ እና የአገልግሎት ህጋዊ አካል በአገልግሎቶች መካከል ለግንኙነት ግንኙነት ከተጠቀሙ ስልቱ በትክክል አንድ አይነት ነው። በመጀመሪያ ማይክሮ ሰርቪሱ kube-dns በመጠቀም የአገልግሎት IP አድራሻ ያገኛል እና ከእሱ ጋር አዲስ ግንኙነት ይከፍታል. ይህ ግንኙነት በመጀመሪያ የተቋቋመው ከአካባቢው netra-sidecar ጋር ነው እና ሁሉም የTCP ፓኬቶች መጀመሪያ ላይ በ netra ይደርሳሉ። በመቀጠል, netra-sidecar ከመጀመሪያው መድረሻ ጋር ግንኙነት ይፈጥራል. NAT በመስቀለኛ መንገድ ላይ በፖድ አይፒ ላይ ያለ ኔትራ ተመሳሳይ ሆኖ ይቆያል።

መከታተያ እና አውድ ማስተላለፍ

Netramesh ስለ HTTP መስተጋብር የመከታተያ ክፍተቶችን ለመላክ የሚያስፈልገውን ተግባር ያቀርባል። Netra-sidecar የኤችቲቲፒ ፕሮቶኮሉን ይተነትናል፣ መዘግየቶችን ይለካል እና አስፈላጊውን መረጃ ከኤችቲቲፒ አርዕስቶች ያወጣል። በመጨረሻ ፣ ሁሉንም ዱካዎች በአንድ የጃገር ስርዓት ውስጥ እናገኛለን። ጥሩ ጥራት ላለው ውቅር፣ በኦፊሴላዊው ቤተ-መጽሐፍት የቀረቡትን የአካባቢ ተለዋዋጮችም መጠቀም ይችላሉ። jaeger go ላይብረሪ.

Netramesh - ቀላል ክብደት ያለው አገልግሎት ጥልፍልፍ መፍትሄ

Netramesh - ቀላል ክብደት ያለው አገልግሎት ጥልፍልፍ መፍትሄ

ግን ችግር አለ. አገልግሎቶች ልዩ uber ራስጌ እስኪያመነጩ ድረስ፣ በሲስተሙ ውስጥ የተገናኙ የመከታተያ ክፍተቶችን አናይም። እና የችግሮችን መንስኤ በፍጥነት ለማግኘት የሚያስፈልገን ይህ ነው. እዚህ እንደገና Netramesh መፍትሔ አለው። ፕሮክሲዎች የኤችቲቲፒ አርዕስቶችን ያነባሉ እና የ uber መከታተያ መታወቂያውን ካልያዙ አንድ ያመነጫሉ። ኔትራምሽ ስለገቢ እና ወጪ ጥያቄዎች መረጃን በጎን መኪና ውስጥ ያከማቻል እና በአስፈላጊ የወጪ ጥያቄ ራስጌዎች በማበልጸግ ያዛምዳቸዋል። በአገልግሎቶቹ ውስጥ ማድረግ ያለብዎት አንድ ራስጌ ብቻ መላክ ነው። X-Request-Idየአካባቢ ተለዋዋጭ በመጠቀም ሊዋቀር የሚችል NETRA_HTTP_REQUEST_ID_HEADER_NAME. በ Netramesh ውስጥ ያለውን የአውድ መጠን ለመቆጣጠር የሚከተሉትን የአካባቢ ተለዋዋጮች ማዘጋጀት ይችላሉ፡ NETRA_TRACING_CONTEXT_EXPIRATION_MILLISECONDS (አውድ የሚቀመጥበት ጊዜ) እና NETRA_TRACING_CONTEXT_CLEANUP_INTERVAL (የአውድ ማጽዳት ድግግሞሽ).

በልዩ የክፍለ-ጊዜ ቶከን ምልክት በማድረግ በስርዓትዎ ላይ ብዙ ዱካዎችን ማጣመርም ይቻላል። Netra እንዲጭኑ ይፈቅድልዎታል HTTP_HEADER_TAG_MAP የኤችቲቲፒ ራስጌዎችን ወደ ተዛማጅ የመከታተያ span tags ለመቀየር። ይህ በተለይ ለሙከራ ጠቃሚ ሊሆን ይችላል. የተግባር ፈተናውን ካለፉ በኋላ በተዛማጅ የክፍለ-ጊዜ ቁልፍ በማጣራት የትኛው የስርዓቱ ክፍል እንደተጎዳ ማየት ይችላሉ።

የጥያቄውን ምንጭ መወሰን

ጥያቄው ከየት እንደመጣ ለማወቅ ራስጌን ከምንጩ ጋር በራስ ሰር የማከል ተግባር መጠቀም ይችላሉ። የአካባቢ ተለዋዋጭ መጠቀም NETRA_HTTP_X_SOURCE_HEADER_NAME በራስ ሰር የሚጫን የራስጌ ስም መጥቀስ ትችላለህ። በመጠቀም NETRA_HTTP_X_SOURCE_VALUE ለሁሉም ወጪ ጥያቄዎች የ X-Source ራስጌ የሚዘጋጅበትን ዋጋ ማቀናበር ይችላሉ።

ይህ የዚህ ጠቃሚ ራስጌ ስርጭት በኔትወርኩ ውስጥ አንድ ወጥ በሆነ መልኩ እንዲሰራጭ ያስችለዋል። ከዚያ በአገልግሎቶች ውስጥ ሊጠቀሙበት እና ወደ ምዝግብ ማስታወሻዎች እና መለኪያዎች ማከል ይችላሉ።

የትራፊክ መስመር እና ኔትራሜሽ የውስጥ አካላት

Netramesh ሁለት ዋና ዋና ክፍሎችን ያካትታል. የመጀመሪያው, netra-init, ትራፊክን ለመጥለፍ የአውታረ መረብ ደንቦችን ያዘጋጃል. ይጠቀማል iptables የማዘዋወር ደንቦች የ Netramesh ሁለተኛ ዋና አካል የሆነውን የጎን መኪና ላይ ያለውን የትራፊክ ፍሰት በሙሉ ወይም በከፊል ለመጥለፍ። ለገቢ እና ወጪ TCP ክፍለ-ጊዜዎች የትኞቹ ወደቦች መጠለፍ እንዳለባቸው ማዋቀር ይችላሉ፡ INBOUND_INTERCEPT_PORTS, OUTBOUND_INTERCEPT_PORTS.

መሣሪያው እንዲሁ አስደሳች ባህሪ አለው - ፕሮባቢሊቲ ራውቲንግ። የመከታተያ ክፍተቶችን ለመሰብሰብ Netramesh ብቻ የሚጠቀሙ ከሆነ፣ በምርት አካባቢ ውስጥ ሀብቶችን መቆጠብ እና ተለዋዋጮችን በመጠቀም ፕሮባቢሊቲ ራውቲንግን ማንቃት ይችላሉ። NETRA_INBOUND_PROBABILITY и NETRA_OUTBOUND_PROBABILITY (ከ0 እስከ 1) ነባሪው ዋጋ 1 ነው (ሁሉም ትራፊክ ተዘግቷል)።

በተሳካ ሁኔታ ከተጠለፈ በኋላ, netra sidecar አዲሱን ግንኙነት ይቀበላል እና ይጠቀማል SO_ORIGINAL_DST የመጀመሪያውን መድረሻ ለማግኘት የሶኬት አማራጭ. ከዚያም ኔትራ ከዋናው የአይፒ አድራሻ ጋር አዲስ ግንኙነት ይከፍታል እና በተዋዋይ ወገኖች መካከል ባለ ሁለት መንገድ TCP ግንኙነትን ይፈጥራል ፣ ሁሉንም ትራፊክ ያዳምጣል። ወደቡ እንደ HTTP ተብሎ ከተገለጸ ኔትራ ሊተነተን እና ሊከታተለው ይሞክራል። ኤችቲቲፒ መተንተን ካልተሳካ፣ Netra ወደ TCP ይወድቃል እና በግልፅ ባይት ፕሮክሲ ያደርጋል።

የጥገኝነት ግራፍ መገንባት

በጃገር ውስጥ ከፍተኛ መጠን ያለው የመከታተያ መረጃ ከተቀበልኩ በኋላ በስርዓቱ ውስጥ የተሟላ የግንኙነቶች ግራፍ ማግኘት እፈልጋለሁ። ነገር ግን የእርስዎ ስርዓት በጣም ከተጫነ እና በቀን በቢሊዮኖች የሚቆጠሩ የመከታተያ ቦታዎች ከተከማቹ እነሱን ማሰባሰብ ቀላል ስራ አይሆንም። ይህንን ለማድረግ ኦፊሴላዊ መንገድ አለ- ብልጭታ-ጥገኛዎች. ነገር ግን፣ የተሟላ ግራፍ ለመገንባት ሰዓታትን ይወስዳል እና ሙሉውን ዳታ ስብስብ ላለፉት XNUMX ሰዓታት ከጃገር እንዲያወርዱ ያስገድድዎታል።

የመከታተያ ቦታዎችን ለማከማቸት Elasticsearchን እየተጠቀሙ ከሆነ መጠቀም ይችላሉ። ቀላል የጎላንግ መገልገያየElasticsearchን ባህሪያት እና ችሎታዎች በመጠቀም በደቂቃዎች ውስጥ ተመሳሳይ ግራፍ ይገነባል።

Netramesh - ቀላል ክብደት ያለው አገልግሎት ጥልፍልፍ መፍትሄ

Netramesh እንዴት መጠቀም እንደሚቻል

ኔትራ ማንኛውንም ኦርኬስትራ ወደሚያሄድ ማንኛውም አገልግሎት በቀላሉ ሊጨመር ይችላል። አንድ ምሳሌ ማየት ይችላሉ እዚህ.

በአሁኑ ጊዜ ኔትራ የጎን መኪናዎችን ወደ አገልግሎቶች በራስ-ሰር የመተግበር ችሎታ የለውም ፣ ግን የትግበራ እቅዶች አሉ።

የ Netramesh የወደፊት

ዋና ግብ ኔትራሜሽ የኢንተር-አገልግሎት ግንኙነቶችን የመከታተል እና የመቆጣጠር መሰረታዊ አቅሞችን በማቅረብ አነስተኛውን የሀብት ወጪዎችን እና ከፍተኛ አፈፃፀምን ማሳካት ነው።

ለወደፊቱ፣ Netramesh ከኤችቲቲፒ በተጨማሪ ሌሎች የመተግበሪያ ንብርብር ፕሮቶኮሎችን ይደግፋል። L7 ማዞሪያ በቅርብ ጊዜ ውስጥ ይገኛል።

ተመሳሳይ ችግሮች ካጋጠሙዎት Netramesh ን ይጠቀሙ እና ጥያቄዎችን እና አስተያየቶችን ይፃፉልን።

ምንጭ: hab.com

አስተያየት ያክሉ