አምስት ተማሪዎች እና ሶስት የተከፋፈሉ ቁልፍ ዋጋ ያላቸው መደብሮች

ወይም ለ ZooKeeper፣ etcd እና Consul KV ደንበኛ C++ ላይብረሪ እንዴት እንደጻፍን።

በተከፋፈሉ ስርዓቶች ዓለም ውስጥ ብዙ የተለመዱ ተግባራት አሉ-ስለ ክላስተር ስብጥር መረጃ ማከማቸት ፣ የአንጓዎችን ውቅር ማስተዳደር ፣ የተሳሳቱ አንጓዎችን መለየት ፣ መሪ መምረጥ እና ሌሎች. እነዚህን ችግሮች ለመፍታት ልዩ የተከፋፈሉ ስርዓቶች ተፈጥረዋል - የማስተባበር አገልግሎቶች. አሁን ሦስቱን እንፈልጋለን፡ ZooKeeper፣ etcd እና Consul። ከሁሉም የበለጸጉ የቆንስላ ተግባራት ውስጥ፣ በቆንስል ኬቪ ላይ እናተኩራለን።

አምስት ተማሪዎች እና ሶስት የተከፋፈሉ ቁልፍ ዋጋ ያላቸው መደብሮች

በመሠረቱ፣ እነዚህ ሁሉ ሥርዓቶች ስህተት-ታጋሽ፣ ሊነመሩ የሚችሉ የቁልፍ ዋጋ ማከማቻዎች ናቸው። ምንም እንኳን የእነሱ የመረጃ ሞዴሎች ጉልህ ልዩነቶች ቢኖራቸውም, በኋላ ላይ የምንወያይባቸው, ተመሳሳይ ተግባራዊ ችግሮችን ይፈታሉ. በግልጽ ለማየት እንደሚቻለው, የማስተባበር አገልግሎቱን የሚጠቀም እያንዳንዱ መተግበሪያ ከአንደኛው ጋር የተቆራኘ ነው, ይህም ለተለያዩ መተግበሪያዎች ተመሳሳይ ችግሮችን ለመፍታት በአንድ የውሂብ ማዕከል ውስጥ በርካታ ስርዓቶችን መደገፍ ሊያስፈልግ ይችላል.

ይህንን ችግር ለመፍታት ሃሳቡ የመነጨው በአውስትራሊያ የአማካሪ ኤጀንሲ ነው፣ እና እኛ ትንንሽ የተማሪዎች ቡድን ልንፈጽመው ወደቀ፣ ይህም እኔ ልናገር ነው።

ከZooKeeper፣ etcd እና Consul KV ጋር አብሮ ለመስራት የጋራ በይነገጽ የሚያቀርብ ቤተ-መጽሐፍት መፍጠር ችለናል። ቤተ መፃህፍቱ የተፃፈው በC++ ነው፣ ግን ወደ ሌሎች ቋንቋዎች ለማድረስ እቅድ አለ።

የውሂብ ሞዴሎች

ለሶስት የተለያዩ ስርዓቶች አንድ የጋራ በይነገጽ ለማዘጋጀት, ምን የሚያመሳስላቸው እና እንዴት እንደሚለያዩ መረዳት አለብዎት. እስቲ እንገምተው።

የአራዊት ጠባቂ

አምስት ተማሪዎች እና ሶስት የተከፋፈሉ ቁልፍ ዋጋ ያላቸው መደብሮች

ቁልፎቹ በዛፍ ውስጥ ተደራጅተው ኖዶች ይባላሉ. በዚህ መሠረት, ለአንድ መስቀለኛ መንገድ የልጆቹን ዝርዝር ማግኘት ይችላሉ. znode የመፍጠር (ፍጠር) እና እሴትን (setData) የመቀየር ስራዎች ተለያይተዋል፡ ነባር ቁልፎች ብቻ ሊነበቡ እና ሊለወጡ ይችላሉ። ሰዓቶች የመስቀለኛ ክፍልን መኖሩን, እሴትን ከማንበብ እና ልጆችን ከመውለድ ስራዎች ጋር ማያያዝ ይችላሉ. ሰዓት በአገልጋዩ ላይ ያለው ተዛማጅ ውሂብ ስሪት ሲቀየር የሚቀጣጠል የአንድ ጊዜ ቀስቅሴ ነው። የኤፌመር ኖዶች ውድቀቶችን ለመለየት ጥቅም ላይ ይውላሉ. እነሱ ከፈጠረው የደንበኛው ክፍለ ጊዜ ጋር የተሳሰሩ ናቸው. አንድ ደንበኛ አንድ ክፍለ ጊዜ ሲዘጋ ወይም መኖሩን ለ ZooKeeper ማሳወቅ ሲያቆም እነዚህ አንጓዎች በራስ ሰር ይሰረዛሉ። ቀላል ግብይቶች ይደገፋሉ - ቢያንስ ለአንዱ ይህ የማይቻል ከሆነ ሁሉም የሚሳካላቸው ወይም የሚሳኩ የክዋኔዎች ስብስብ።

ወዘተ

አምስት ተማሪዎች እና ሶስት የተከፋፈሉ ቁልፍ ዋጋ ያላቸው መደብሮች

የዚህ ሥርዓት ገንቢዎች በ ZooKeeper በግልጽ ተነሳስተው ነበር, እና ስለዚህ ሁሉንም ነገር በተለየ መንገድ አደረጉ. የቁልፎች ተዋረድ የለም፣ ግን እነሱ በቃላታዊ ሁኔታ የታዘዘ ስብስብ ይመሰርታሉ። የአንድ የተወሰነ ክልል ንብረት የሆኑ ሁሉንም ቁልፎች ማግኘት ወይም መሰረዝ ይችላሉ። ይህ መዋቅር እንግዳ ሊመስል ይችላል, ግን በእውነቱ በጣም ገላጭ ነው, እና ተዋረዳዊ እይታ በእሱ ውስጥ በቀላሉ ሊኮርጅ ይችላል.

etcd ደረጃውን የጠበቀ የንጽጽር-እና-ማዋቀር አሠራር የለውም፣ ነገር ግን የተሻለ ነገር አለው፡ ግብይቶች። እርግጥ ነው, በሶስቱም ስርዓቶች ውስጥ አሉ, ነገር ግን ወዘተd ግብይቶች በተለይ ጥሩ ናቸው. እነሱ ሶስት ብሎኮችን ያቀፉ ናቸው-ቼክ ፣ ስኬት ፣ ውድቀት። የመጀመሪያው እገዳ የሁኔታዎች ስብስብ, ሁለተኛው እና ሶስተኛ - ኦፕሬሽኖች ይዟል. ግብይቱ የሚከናወነው በአቶሚክ ነው። ሁሉም ሁኔታዎች እውነት ከሆኑ, የስኬት እገዳው ይከናወናል, አለበለዚያ የብልሽት እገዳው ተፈጽሟል. በኤፒአይ 3.3 ውስጥ የስኬት እና የውድቀት እገዳዎች የጎጆ ግብይቶችን ሊይዙ ይችላሉ። ይህም ማለት ይቻላል በዘፈቀደ የጎጆ ደረጃ ሁኔታዊ ግንባታዎችን በአቶሚክ መፈጸም ይቻላል. ከየትኛው ቼኮች እና ስራዎች እንዳሉ የበለጠ ማወቅ ይችላሉ። ሰነድ.

ሰዓቶች እዚህም አሉ፣ ምንም እንኳን ትንሽ የተወሳሰቡ እና እንደገና ጥቅም ላይ የሚውሉ ቢሆኑም። ማለትም ሰዓትን በቁልፍ ክልል ላይ ከጫኑ በኋላ ሰዓቱን እስኪሰርዙ ድረስ ሁሉንም ዝመናዎች በዚህ ክልል ይቀበላሉ እንጂ የመጀመሪያው ብቻ አይደለም። በ etcd ውስጥ፣ የZooKeeper ደንበኛ ክፍለ ጊዜዎች አናሎግ የሊዝ ውል ናቸው።

ቆንስል ኬ.ቪ.

በተጨማሪም እዚህ ምንም ጥብቅ ተዋረዳዊ መዋቅር የለም, ነገር ግን ቆንስል መኖሩን ሊፈጥር ይችላል-ሁሉንም ቁልፎች በተጠቀሰው ቅድመ ቅጥያ ማግኘት እና መሰረዝ ይችላሉ, ማለትም ከቁልፍ "ንዑስ ዛፍ" ጋር መስራት. እንደነዚህ ያሉ ጥያቄዎች ተደጋጋሚ ተብለው ይጠራሉ. በተጨማሪም ቆንስል ከቅድመ-ቅጥያው በኋላ የተገለጸውን ቁምፊ የሌላቸውን ቁልፎች ብቻ መምረጥ ይችላል, ይህም ወዲያውኑ "ልጆችን" ከማግኘት ጋር ይዛመዳል. ነገር ግን ይህ በትክክል የተዋረድ መዋቅር ገጽታ መሆኑን ማስታወስ ጠቃሚ ነው-ወላጁ ከሌለ ቁልፍ መፍጠር ወይም ልጆች ያለው ቁልፍ መሰረዝ በጣም ይቻላል ፣ ልጆቹ በስርዓቱ ውስጥ መከማቸታቸውን ይቀጥላሉ ።

አምስት ተማሪዎች እና ሶስት የተከፋፈሉ ቁልፍ ዋጋ ያላቸው መደብሮች
ከእጅ ሰዓቶች ይልቅ ቆንስል የኤችቲቲፒ ጥያቄዎችን አግዷል። በመሠረቱ, እነዚህ ወደ ውሂብ የማንበብ ዘዴ የተለመዱ ጥሪዎች ናቸው, ለዚህም ከሌሎች መለኪያዎች ጋር, የመጨረሻው የታወቀ የውሂብ ስሪት ይጠቁማል. በአገልጋዩ ላይ ያለው ተዛማጅ ውሂብ የአሁኑ ስሪት ከተጠቀሰው በላይ ከሆነ, ምላሹ ወዲያውኑ ይመለሳል, አለበለዚያ - ዋጋው ሲቀየር. በማንኛውም ጊዜ በቁልፍ ላይ ሊጣበቁ የሚችሉ ክፍለ ጊዜዎችም አሉ። እንደ etcd እና ZooKeeper በተለየ መልኩ ክፍለ-ጊዜዎችን መሰረዝ ተያያዥ ቁልፎችን ወደ መሰረዝ በሚመራበት ጊዜ ክፍለ-ጊዜው በቀላሉ ከእነሱ ጋር ያልተገናኘበት ሁነታ እንዳለ ልብ ሊባል የሚገባው ነው. ይገኛል። ግብይቶች, ያለ ቅርንጫፎች, ግን በሁሉም ዓይነት ቼኮች.

ሁሉንም በአንድ ላይ በማጣመር

ZooKeeper በጣም ጥብቅ የውሂብ ሞዴል አለው። በ etcd ውስጥ የሚገኙት ገላጭ ክልል መጠይቆች በ ZooKeeperም ሆነ በቆንስላ ውስጥ ውጤታማ በሆነ መንገድ መኮረጅ አይችሉም። ከሁሉም አገልግሎቶች ምርጡን ለማካተት እየሞከርን ከ ZooKeeper በይነገጽ ጋር የሚመጣጠን በይነገጽ ከሚከተሉት ጉልህ ልዩነቶች ጋር ጨርሰናል።

  • ቅደም ተከተል, መያዣ እና ቲቲኤል ኖዶች አይደገፍም
  • ኤሲኤሎች አይደገፉም።
  • የተቀናበረው ዘዴ ከሌለ ቁልፍ ይፈጥራል (በ ZK setData በዚህ ጉዳይ ላይ ስህተት ይመልሳል)
  • ስብስብ እና የካስ ዘዴዎች ተለያይተዋል (በ ZK ውስጥ እነሱ በመሠረቱ አንድ ዓይነት ናቸው)
  • የመደምሰስ ዘዴው አንድን ኖድ ከንዑስ ዛፉ ጋር ይሰርዛል (በ ZK ውስጥ ሰርዝ መስቀለኛ መንገድ ልጆች ካሉት ስህተት ይመልሳል)
  • ለእያንዳንዱ ቁልፍ አንድ ስሪት ብቻ አለ - የእሴት ስሪት (በ ZK ከእነሱ ሦስቱ አሉ)

የተከታታይ አንጓዎች ውድቅ የተደረገው ወዘተd እና ቆንስል ለእነሱ አብሮ የተሰራ ድጋፍ ስለሌላቸው እና በተፈጠረው የቤተ-መጽሐፍት በይነገጽ ላይ በተጠቃሚው በቀላሉ ሊተገበሩ ስለሚችሉ ነው።

ቨርቴክን በሚሰርዝበት ጊዜ እንደ ZooKeeper አይነት ባህሪን መተግበር በ etcd እና Consul ውስጥ ለእያንዳንዱ ቁልፍ የተለየ የልጅ ቆጣሪ መያዝን ይጠይቃል። የሜታ መረጃን ላለማከማቸት ስለሞከርን, ሙሉውን የንዑስ ዛፍ ለመሰረዝ ተወስኗል.

የአተገባበር ጥቃቅን ነገሮች

የላይብረሪውን በይነገጽ በተለያዩ ስርዓቶች ውስጥ የመተግበር አንዳንድ ገጽታዎችን በዝርዝር እንመልከት።

ተዋረድ በ ወዘተ

በ etcd ውስጥ ተዋረዳዊ እይታን መጠበቅ በጣም አስደሳች ከሆኑ ተግባራት ውስጥ አንዱ ሆኖ ተገኝቷል። የክልል መጠይቆች በተወሰነ ቅድመ ቅጥያ የቁልፎችን ዝርዝር ሰርስሮ ለማውጣት ቀላል ያደርገዋል። ለምሳሌ, የሚጀምረው ሁሉንም ነገር ከፈለጉ "/foo"ክልል እየጠየቁ ነው። ["/foo", "/fop"). ነገር ግን ይህ ሙሉውን የቁልፉን ንዑስ ክፍል ይመልሳል, ይህም ንዑስ ዛፉ ትልቅ ከሆነ ተቀባይነት ላይኖረው ይችላል. መጀመሪያ ላይ ቁልፍ የትርጉም ዘዴን ለመጠቀም አቅደናል፣ በ zetcd ውስጥ ተተግብሯል. በዛፉ ውስጥ ካለው የመስቀለኛ ክፍል ጥልቀት ጋር እኩል የሆነ በቁልፍ መጀመሪያ ላይ አንድ ባይት መጨመርን ያካትታል. አንድ ምሳሌ ልስጥህ።

"/foo" -> "u01/foo"
"/foo/bar" -> "u02/foo/bar"

ከዚያ ሁሉንም የቅርብ ልጆች ቁልፍ ያግኙ "/foo" ክልል በመጠየቅ ይቻላል ["u02/foo/", "u02/foo0"). አዎ፣ በ ASCII ውስጥ "0" ወዲያውኑ ይቆማል "/".

ነገር ግን በዚህ ጉዳይ ላይ የቬርቴክን ማስወገድ እንዴት እንደሚተገበር? ሁሉንም የአይነቱን ክልሎች መሰረዝ እንደሚያስፈልግ ሆኖ ተገኝቷል ["uXX/foo/", "uXX/foo0") ለ XX ከ 01 እስከ ኤፍኤፍ. እና ከዚያ ሮጠን ገባን። የክወና ቁጥር ገደብ በአንድ ግብይት ውስጥ.

በውጤቱም, ቀላል የቁልፍ ቅየራ ስርዓት ተፈለሰፈ, ይህም ሁለቱንም ቁልፍ መሰረዝ እና የልጆች ዝርዝር ማግኘትን ውጤታማ በሆነ መንገድ ለመተግበር አስችሏል. ከመጨረሻው ምልክት በፊት ልዩ ቁምፊ ማከል በቂ ነው. ለምሳሌ:

"/very" -> "/u00very"
"/very/long" -> "/very/u00long"
"/very/long/path" -> "/very/long/u00path"

ከዚያ ቁልፉን መሰረዝ "/very" ወደ መሰረዝ ይለወጣል "/u00very" እና ክልል ["/very/", "/very0"), እና ሁሉንም ልጆች ማግኘት - ከክልሉ ውስጥ ቁልፎችን በመጠየቅ ["/very/u00", "/very/u01").

በ ZooKeeper ውስጥ ቁልፍን በማስወገድ ላይ

አስቀድሜ እንደገለጽኩት በ ZooKeeper ውስጥ አንድ መስቀለኛ መንገድ ልጆች ካሉት መሰረዝ አይችሉም። ቁልፉን ከንዑስ ዛፍ ጋር መሰረዝ እንፈልጋለን። ምን ማድረግ ነው የሚገባኝ? ይህንን የምናደርገው በብሩህ ተስፋ ነው። በመጀመሪያ ፣ የከርሰ ምድርን ዛፍ በተከታታይ እናቋርጣለን ፣ የእያንዳንዱን ጫፍ ልጆች በተለየ መጠይቅ እናገኛቸዋለን። ከዚያ ሁሉንም የንዑስ ዛፎችን አንጓዎች በትክክለኛው ቅደም ተከተል ለመሰረዝ የሚሞክር ግብይት እንገነባለን። እርግጥ ነው፣ ንዑስ ዛፍን በማንበብ እና በመሰረዝ መካከል ለውጦች ሊከሰቱ ይችላሉ። በዚህ አጋጣሚ ግብይቱ አይሳካም። ከዚህም በላይ በንባብ ሂደት ውስጥ ንዑስ ዛፉ ሊለወጥ ይችላል. የሚቀጥለው መስቀለኛ መንገድ ልጆች ጥያቄ ለምሳሌ ይህ መስቀለኛ መንገድ አስቀድሞ ከተሰረዘ ስህተት ሊመለስ ይችላል። በሁለቱም ሁኔታዎች አጠቃላይ ሂደቱን እንደገና እንደግመዋለን.

ይህ አካሄድ ልጆች ካሉት ቁልፍን መሰረዝ በጣም ውጤታማ እንዳይሆን ያደርገዋል፣ እና ከዚህም በበለጠ አፕሊኬሽኑ ከንዑስ ዛፍ ጋር መስራቱን ከቀጠለ፣ መሰረዝ እና ቁልፎችን መፍጠር ከቀጠለ። ነገር ግን ይህ በ etcd እና በቆንስል ውስጥ ያሉትን ሌሎች ዘዴዎችን ትግበራ ከማወሳሰብ እንድንቆጠብ አስችሎናል.

በ ZooKeeper ውስጥ ተዘጋጅቷል

በ ZooKeeper ውስጥ ከዛፉ መዋቅር ጋር የሚሰሩ (ፍጠር ፣ ሰርዝ ፣ ልጅን) እና በመስቀለኛ መንገድ (setData ፣ getData) ውስጥ ከውሂብ ጋር የሚሰሩ የተለዩ ዘዴዎች አሉ ። በተጨማሪም ፣ ሁሉም ዘዴዎች ጥብቅ ቅድመ-ሁኔታዎች አሏቸው ፣ ፍጠር መስቀለኛ መንገዱ ቀድሞውኑ ካለው ስህተትን ይመልሳል። ተፈጠረ፣ ሰርዝ ወይም ዳታ አዘጋጅቶ - ከሌለ። ስለ ቁልፉ መኖር ሳያስቡ ሊጠራ የሚችል የተቀናበረ ዘዴ እንፈልጋለን።

አንዱ አማራጭ እንደ መሰረዝ ብሩህ አመለካከትን መውሰድ ነው። መስቀለኛ መንገድ ካለ ያረጋግጡ። ካለ፣ ወደ setData ይደውሉ፣ ካልሆነ ይፍጠሩ። የመጨረሻው ዘዴ ስህተት ከተመለሰ, እንደገና ይድገሙት. ሊታወቅ የሚገባው የመጀመሪያው ነገር የሕልውና ፈተና ትርጉም የለሽ ነው. ወዲያውኑ መፍጠር መደወል ይችላሉ። በተሳካ ሁኔታ ማጠናቀቅ መስቀለኛ መንገድ አልነበረም እና ተፈጠረ ማለት ነው። አለበለዚያ መፍጠር ተገቢውን ስህተት ይመልሳል, ከዚያ በኋላ ወደ setData መደወል ያስፈልግዎታል. በእርግጥ በጥሪዎች መካከል አንድ ጫፍ በተወዳዳሪ ጥሪ ሊሰረዝ ይችላል፣ እና setData ስህተትንም ይመልሳል። በዚህ ሁኔታ, እንደገና ሊያደርጉት ይችላሉ, ግን ዋጋ ያለው ነው?

ሁለቱም ዘዴዎች ስህተት ከተመለሱ, ከዚያም ተፎካካሪ ስረዛ እንደተከሰተ በእርግጠኝነት እናውቃለን. ይህ ስረዛ የተከናወነው ከተጠራ በኋላ እንደሆነ እናስብ። ከዚያ ለመመስረት እየሞከርን ያለነው ማንኛውም ትርጉም ቀድሞውኑ ተሰርዟል። ይህ ማለት ምንም እንኳን በእውነቱ ምንም ነገር ባይጻፍም, ስብስብ በተሳካ ሁኔታ እንደተፈጸመ መገመት እንችላለን.

ተጨማሪ ቴክኒካዊ ዝርዝሮች

በዚህ ክፍል ውስጥ ከተከፋፈሉ ስርዓቶች እረፍት ወስደን ስለ ኮድ ማድረግ እንነጋገራለን.
ከደንበኛው ዋና ዋና መስፈርቶች አንዱ ፕላስፎርም ነበር፡ ቢያንስ አንዱ አገልግሎቶች በሊኑክስ፣ ማክኦኤስ እና ዊንዶውስ መደገፍ አለባቸው። መጀመሪያ ላይ ለሊኑክስ ብቻ ነው የሠራነው፣ እና በኋላ በሌሎች ስርዓቶች ላይ መሞከር ጀመርን። ይህ ብዙ ችግሮችን አስከትሏል, ይህም ለተወሰነ ጊዜ እንዴት መቅረብ እንዳለበት ሙሉ በሙሉ ግልጽ አልነበረም. በዚህ ምክንያት ሦስቱም የማስተባበር አገልግሎቶች አሁን በሊኑክስ እና ማክኦኤስ ይደገፋሉ፣ በዊንዶውስ ላይ ቆንስል ኬቪ ብቻ ይደገፋሉ።

ገና ከመጀመሪያው፣ አገልግሎት ለማግኘት ዝግጁ የሆኑ ቤተ መጻሕፍትን ለመጠቀም ሞክረናል። በ ZooKeeper ጉዳይ ላይ፣ ምርጫው ወድቋል ZooKeeper C++, ይህም በመጨረሻ በዊንዶው ላይ ማጠናቀር አልቻለም. ይህ ግን የሚያስደንቅ አይደለም፡ ቤተ መፃህፍቱ እንደ ሊኑክስ ብቻ ተቀምጧል። ለቆንስል ብቸኛው አማራጭ ነበር። ppconsul. ድጋፍ መጨመር ነበረበት ክፍለ-ጊዜዎች и ግብይቶች. ለ etcd የቅርብ ጊዜውን የፕሮቶኮሉን ስሪት የሚደግፍ ባለ ሙሉ ቤተ-መጽሐፍት አልተገኘም ስለዚህ እኛ በቀላሉ የመነጨ grpc ደንበኛ.

በZooKeeper C++ ላይብረሪ በተመሳሳዩ በይነገጽ በመነሳሳት፣ ያልተመሳሰለ በይነገጽም ተግባራዊ ለማድረግ ወሰንን። ZooKeeper C++ ለዚህ የወደፊት/የተስፋ ቅድመ ሁኔታዎችን ይጠቀማል። በ STL, በሚያሳዝን ሁኔታ, በጣም በመጠኑ ይተገበራሉ. ለምሳሌ, አይደለም ከዚያም ዘዴ, ይህም የተላለፈውን ተግባር በሚኖርበት ጊዜ የወደፊቱን ውጤት ተግባራዊ ያደርጋል. በእኛ ሁኔታ ውጤቱን ወደ ቤተ-መጽሐፍታችን ቅርጸት ለመለወጥ እንዲህ ዓይነቱ ዘዴ አስፈላጊ ነው. ይህንን ችግር ለመፍታት በደንበኛው ጥያቄ መሰረት እንደ Boost ያሉ ከባድ የሶስተኛ ወገን ቤተ-መጽሐፍቶችን መጠቀም ስለማንችል የራሳችንን ቀላል ክር ገንዳ መተግበር ነበረብን።

የእኛ ያኔ አተገባበር እንደዚህ ይሰራል። ሲጠራ፣ ተጨማሪ የተስፋ/የወደፊት ጥንድ ይፈጠራል። አዲሱ የወደፊት ተመልሷል, እና ያለፈው ከተዛማጅ ተግባር ጋር እና በወረፋው ውስጥ ተጨማሪ ቃል ገብቷል. ከመዋኛ ገንዳው ውስጥ ያለው ክር ከወረፋው ውስጥ ብዙ የወደፊት እጣዎችን ይመርጣል እና wait_forን በመጠቀም ይመርጣቸዋል። ውጤቱ ሲገኝ, ተጓዳኝ ተግባሩ ይጠራል እና የመመለሻ እሴቱ ወደ ተስፋው ይተላለፋል.

ለ etcd እና ለቆንስል ጥያቄዎችን ለማስፈጸም ተመሳሳይ የክር ገንዳ ተጠቅመን ነበር። ይህ ማለት ከታች ያሉት ቤተ-መጻሕፍት በበርካታ የተለያዩ ክሮች ሊገኙ ይችላሉ. ppconsul ደህንነቱ የተጠበቀ ክር አይደለም፣ ስለዚህ ወደ እሱ የሚደረጉ ጥሪዎች በመቆለፊያዎች ይጠበቃሉ።
ከበርካታ ክሮች በ grpc መስራት ይችላሉ, ግን ጥቃቅን ነገሮች አሉ. በ etcd ሰዓቶች በ grpc ዥረቶች ይተገበራሉ። እነዚህ የአንድ የተወሰነ አይነት መልዕክቶች የሁለት አቅጣጫዊ ቻናሎች ናቸው። ቤተ መፃህፍቱ ለሁሉም ሰዓቶች አንድ ነጠላ ክር ይፈጥራል እና ገቢ መልዕክቶችን የሚያስኬድ ነጠላ ክር ይፈጥራል። ስለዚህ grpc በዥረት ለመልቀቅ ትይዩ ጽሑፎችን ይከለክላል። ይህ ማለት ሰዓትን ሲያስጀምሩ ወይም ሲሰርዙ ቀጣዩን ከመላክዎ በፊት የቀደመው ጥያቄ መላኩን እስኪያጠናቅቅ ድረስ መጠበቅ አለብዎት። ለማመሳሰል እንጠቀማለን። ሁኔታዊ ተለዋዋጮች.

ውጤቱ

ለራስዎ ይመልከቱ፡- liboffkv.

የኛ ቡድን: ራድ ሮማኖቭ, ኢቫን ግሉሼንኮቭ, ዲሚትሪ ካማልዲኖቭ, ቪክቶር Krapivensky, ቪታሊ ኢቫኒን.

ምንጭ: hab.com

አስተያየት ያክሉ