සිසුන් පස් දෙනෙක් සහ තිදෙනෙක් ප්‍රධාන වටිනාකම් ගබඩා බෙදා දුන්හ

එසේත් නැතිනම් අපි ZooKeeper, etcd සහ Consul KV සඳහා සේවාදායක C++ පුස්තකාලයක් ලිවූ ආකාරය

බෙදා හරින ලද පද්ධති ලෝකයේ, සාමාන්‍ය කාර්යයන් ගණනාවක් තිබේ: පොකුරු සංයුතිය පිළිබඳ තොරතුරු ගබඩා කිරීම, නෝඩ් වල වින්‍යාසය කළමනාකරණය කිරීම, දෝෂ සහිත නෝඩ් හඳුනා ගැනීම, නායකයෙකු තෝරා ගැනීම සහ වෙනත් අය. මෙම ගැටළු විසඳීම සඳහා විශේෂ බෙදාහැරීමේ පද්ධති නිර්මාණය කර ඇත - සම්බන්ධීකරණ සේවා. දැන් අපි ඔවුන්ගෙන් තුනක් ගැන උනන්දු වනු ඇත: ZooKeeper, etcd සහ Consul. කොන්සල්ගේ සියලුම පොහොසත් ක්‍රියාකාරීත්වයන් අතරින්, අපි කොන්සල් කේ.වී.

සිසුන් පස් දෙනෙක් සහ තිදෙනෙක් ප්‍රධාන වටිනාකම් ගබඩා බෙදා දුන්හ

සාරාංශයක් ලෙස, මෙම සියලු පද්ධති දෝෂ-ඉවසන, රේඛීයකරණය කළ හැකි යතුරු-අගය ගබඩා වේ. ඔවුන්ගේ දත්ත ආකෘතීන් සැලකිය යුතු වෙනස්කම් ඇතත්, අපි පසුව සාකච්ඡා කරනු ඇත, ඔවුන් එකම ප්රායෝගික ගැටළු විසඳයි. පැහැදිලිවම, සම්බන්ධීකරණ සේවාව භාවිතා කරන සෑම යෙදුමක්ම ඒවායින් එකකට බැඳී ඇති අතර, විවිධ යෙදුම් සඳහා එකම ගැටළු විසඳන එක් දත්ත මධ්‍යස්ථානයක පද්ධති කිහිපයකට සහාය වීමේ අවශ්‍යතාවයට හේතු විය හැක.

මෙම ගැටළුව විසඳීමේ අදහස ඕස්ට්‍රේලියානු උපදේශන ආයතනයකින් ආරම්භ වූ අතර, එය ක්‍රියාත්මක කිරීමට කුඩා සිසුන් කණ්ඩායමක් වන අපට වැටුණි, එය මා කතා කිරීමට යන්නේ එයයි.

ZooKeeper, etcd සහ Consul KV සමඟ වැඩ කිරීම සඳහා පොදු අතුරු මුහුණතක් සපයන පුස්තකාලයක් නිර්මාණය කිරීමට අපට හැකි විය. පුස්තකාලය C++ වලින් ලියා ඇත, නමුත් එය වෙනත් භාෂාවලට ගෙනයාමට සැලසුම් කර ඇත.

දත්ත ආකෘති

විවිධ පද්ධති තුනක් සඳහා පොදු අතුරු මුහුණතක් සංවර්ධනය කිරීම සඳහා, ඔබ ඒවාට පොදු දේ සහ ඒවා වෙනස් වන්නේ කෙසේද යන්න තේරුම් ගත යුතුය. අපි එය තේරුම් ගනිමු.

සූකීපර්

සිසුන් පස් දෙනෙක් සහ තිදෙනෙක් ප්‍රධාන වටිනාකම් ගබඩා බෙදා දුන්හ

යතුරු ගසකට සංවිධානය කර ඇති අතර ඒවා නෝඩ් ලෙස හැඳින්වේ. ඒ අනුව, නෝඩයක් සඳහා ඔබට එහි දරුවන්ගේ ලැයිස්තුවක් ලබා ගත හැකිය. znode (තනන්න) සහ අගයක් වෙනස් කිරීමේ (setData) මෙහෙයුම් වෙන් කරනු ලැබේ: පවතින යතුරු පමණක් කියවා වෙනස් කළ හැකිය. නෝඩයක පැවැත්ම පරීක්ෂා කිරීම, අගයක් කියවීම සහ දරුවන් ලබා ගැනීමේ මෙහෙයුම් සඳහා ඔරලෝසු ඇමිණිය හැකිය. ඔරලෝසුව යනු සේවාදායකයේ අනුරූප දත්තවල අනුවාදය වෙනස් වූ විට ක්‍රියා කරන එක් වරක් ප්‍රේරකයකි. අසාර්ථකත්වය හඳුනා ගැනීම සඳහා එෆීමර් නෝඩ් භාවිතා වේ. ඒවා නිර්මාණය කළ සේවාදායකයාගේ සැසියට ඔවුන් බැඳී ඇත. සේවාලාභියෙකු සැසියක් වසා දැමූ විට හෝ ZooKeeper හට එහි පැවැත්ම දැනුම් දීම නැවැත්වූ විට, මෙම නෝඩ් ස්වයංක්‍රීයව මකා දමනු ලැබේ. සරල ගනුදෙනු සඳහා සහය දක්වයි - අවම වශයෙන් ඒවායින් එකකටවත් මෙය කළ නොහැකි නම් සියල්ල සාර්ථක හෝ අසාර්ථක වන මෙහෙයුම් සමූහයකි.

ආදිය

සිසුන් පස් දෙනෙක් සහ තිදෙනෙක් ප්‍රධාන වටිනාකම් ගබඩා බෙදා දුන්හ

මෙම පද්ධතියේ සංවර්ධකයින් පැහැදිලිවම ZooKeeper විසින් දේවානුභාවයෙන් කරන ලද අතර, එබැවින් සෑම දෙයක්ම වෙනස් ආකාරයකින් සිදු කරන ලදී. යතුරු ධූරාවලියක් නොමැත, නමුත් ඒවා ශබ්දකෝෂ වශයෙන් ඇණවුම් කළ කට්ටලයක් සාදයි. ඔබට යම් පරාසයකට අයත් සියලුම යතුරු ලබා ගැනීමට හෝ මකා දැමීමට හැකිය. මෙම ව්‍යුහය අමුතු දෙයක් ලෙස පෙනුනද, එය සැබවින්ම ඉතා ප්‍රකාශිත වන අතර, ධූරාවලි දැක්මක් පහසුවෙන් අනුකරණය කළ හැකිය.

etcd හි සම්මත සංසන්දනය කිරීමේ සහ සැකසීමේ ක්‍රියාකාරිත්වයක් නොමැත, නමුත් එයට වඩා හොඳ දෙයක් තිබේ: ගනුදෙනු. ඇත්ත වශයෙන්ම, ඒවා පද්ධති තුනේම පවතී, නමුත් etcd ගනුදෙනු විශේෂයෙන් හොඳයි. ඒවා කොටස් තුනකින් සමන්විත වේ: චෙක්පත්, සාර්ථකත්වය, අසාර්ථකත්වය. පළමු කොටසෙහි කොන්දේසි මාලාවක් අඩංගු වේ, දෙවන සහ තෙවන - මෙහෙයුම්. ගනුදෙනුව පරමාණුකව ක්රියාත්මක වේ. සියලුම කොන්දේසි සත්‍ය නම්, සාර්ථක වාරණ ක්‍රියාත්මක වේ, එසේ නොමැතිනම් අසාර්ථක වාරණය ක්‍රියාත්මක වේ. API 3.3 හි, සාර්ථක සහ අසාර්ථක කොටස් වල කැදලි ගනුදෙනු අඩංගු විය හැක. එනම්, පාහේ අත්තනෝමතික කූඩු මට්ටමේ කොන්දේසි සහිත නිර්මිතයන් පරමාණුකව ක්රියාත්මක කිරීමට හැකි වේ. කුමන චෙක්පත් සහ මෙහෙයුම් පවතින්නේද යන්න ගැන ඔබට තව දැනගත හැක ලියකියවිලි.

ඔරෙලෝසු මෙහි ද පවතී, ඒවා ටිකක් සංකීර්ණ සහ නැවත භාවිතා කළ හැකි වුවද. එනම්, යතුරු පරාසයක ඔරලෝසුවක් ස්ථාපනය කිරීමෙන් පසු, ඔබ ඔරලෝසුව අවලංගු කරන තෙක් මෙම පරාසයේ සියලුම යාවත්කාලීනයන් ඔබට ලැබෙනු ඇත, සහ පළමු එක පමණක් නොවේ. ආදියෙහි, ZooKeeper සේවාදායක සැසිවල ප්‍රතිසමය ලීසිං වේ.

කොන්සල් කේ.වී.

මෙහි දැඩි ධූරාවලි ව්‍යුහයක් ද නොමැත, නමුත් කොන්සල්ට එය පවතින පෙනුම නිර්මාණය කළ හැකිය: ඔබට නිශ්චිත උපසර්ගය සමඟ සියලුම යතුරු ලබා ගැනීමට සහ මකා දැමිය හැකිය, එනම් යතුරේ “උප ගසක්” සමඟ වැඩ කරන්න. එවැනි විමසුම් පුනරාවර්තන ලෙස හැඳින්වේ. ඊට අමතරව, කොන්සල්වරයාට වහාම "දරුවන්" ලබා ගැනීමට අනුරූප වන උපසර්ගයට පසුව නිශ්චිත අක්ෂර අඩංගු නොවන යතුරු පමණක් තෝරා ගත හැකිය. නමුත් මෙය හරියටම ධූරාවලි ව්‍යුහයක පෙනුම බව මතක තබා ගැනීම වටී: එහි දෙමව්පියන් නොමැති නම් යතුරක් නිර්මාණය කිරීම හෝ දරුවන් සිටින යතුරක් මකා දැමීම තරමක් කළ හැකි අතර, දරුවන් දිගටම පද්ධතිය තුළ ගබඩා කරනු ඇත.

සිසුන් පස් දෙනෙක් සහ තිදෙනෙක් ප්‍රධාන වටිනාකම් ගබඩා බෙදා දුන්හ
ඔරලෝසු වෙනුවට කොන්සල් විසින් HTTP ඉල්ලීම් අවහිර කර ඇත. සාරාංශයක් ලෙස, මේවා දත්ත කියවීමේ ක්‍රමයට සාමාන්‍ය ඇමතුම් වේ, ඒ සඳහා වෙනත් පරාමිතීන් සමඟ දත්තවල අවසාන දන්නා අනුවාදය දක්වා ඇත. සේවාදායකයේ අනුරූප දත්තවල වත්මන් අනුවාදය නිශ්චිතව දක්වා ඇති එකට වඩා වැඩි නම්, ප්රතිචාරය වහාම ආපසු ලබා දෙනු ලැබේ, එසේ නොමැති නම් - අගය වෙනස් වන විට. ඕනෑම වේලාවක යතුරු වෙත ඇමිණිය හැකි සැසි ද ඇත. etcd සහ ZooKeeper මෙන් නොව, සැසි මකා දැමීම ආශ්‍රිත යතුරු මකා දැමීමට හේතු වන අතර, සැසිය ඒවායින් සරලව විසන්ධි කරන ආකාරයක් ඇති බව සඳහන් කිරීම වටී. ඇත ගනුදෙනු, ශාඛා නොමැතිව, නමුත් සියලු වර්ගවල චෙක්පත් සමඟ.

එකට ඒ සියල්ල දමා

ZooKeeper සතුව වඩාත් දැඩි දත්ත ආකෘතිය ඇත. etcd හි ඇති ප්‍රකාශිත පරාස විමසුම් ZooKeeper හෝ Consul වලදී ඵලදායී ලෙස අනුකරණය කළ නොහැක. සියලුම සේවාවන්ගෙන් හොඳම දේ ඇතුළත් කිරීමට උත්සාහ කරමින්, අපි පහත සැලකිය යුතු ව්‍යතිරේකයන් සමඟ ZooKeeper අතුරුමුහුණතට බොහෝ දුරට සමාන අතුරු මුහුණතක් සමඟ අවසන් කළෙමු:

  • අනුපිළිවෙල, බහාලුම් සහ TTL නෝඩ් සහාය නොදක්වයි
  • ACL සඳහා සහය නොදක්වයි
  • කට්ටල ක්‍රමය එය නොපවතී නම් යතුරක් නිර්මාණය කරයි (ZK setData හි මෙම අවස්ථාවේදී දෝෂයක් ලබා දෙයි)
  • කට්ටල සහ කැස් ක්‍රම වෙන් කර ඇත (ZK හි ඒවා අත්‍යවශ්‍යයෙන්ම එකම දෙයකි)
  • මකන ක්‍රමය එහි උප වෘක්ෂය සමඟ නෝඩයක් මකා දමයි (ZK මකා දැමීමේදී නෝඩයට දරුවන් සිටී නම් දෝෂයක් ලබා දෙයි)
  • සෑම යතුරක් සඳහාම ඇත්තේ එක් අනුවාදයක් පමණි - අගය අනුවාදය (ZK හි ඒවායින් තුනක් තිබේ)

අනුක්‍රමික නෝඩ් ප්‍රතික්ෂේප කිරීම හේතු වී ඇත්තේ etcd සහ කොන්සල් ඒවාට ගොඩනගා ඇති සහය නොමැති වීම සහ ප්‍රතිඵලයක් ලෙස ලැබෙන පුස්තකාල අතුරුමුහුණත මත පරිශීලකයාට ඒවා පහසුවෙන් ක්‍රියාත්මක කළ හැකි වීමයි.

ශීර්ෂයක් මකා දැමීමේදී ZooKeeper හා සමාන හැසිරීමක් ක්‍රියාත්මක කිරීම සඳහා etcd සහ කොන්සල් හි එක් එක් යතුර සඳහා වෙනම ළමා කවුන්ටරයක් ​​පවත්වා ගැනීම අවශ්‍ය වේ. අපි මෙටා තොරතුරු ගබඩා කිරීම වළක්වා ගැනීමට උත්සාහ කළ නිසා, සම්පූර්ණ උපස්ථරය මකා දැමීමට තීරණය විය.

ක්රියාත්මක කිරීමේ සියුම්කම්

විවිධ පද්ධතිවල පුස්තකාල අතුරුමුහුණත ක්රියාත්මක කිරීමේ සමහර පැති දෙස සමීපව බලමු.

ආදියෙහි ධුරාවලිය

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 සිට FF දක්වා. ඊට පස්සේ අපි දුවගෙන ආවා මෙහෙයුම් අංක සීමාව එක් ගනුදෙනුවක් තුළ.

එහි ප්රතිඵලයක් වශයෙන්, සරල යතුරු පරිවර්තන පද්ධතියක් සොයා ගන්නා ලද අතර, යතුරක් මකා දැමීම සහ දරුවන්ගේ ලැයිස්තුවක් ලබා ගැනීම යන දෙකම ඵලදායී ලෙස ක්රියාත්මක කිරීමට හැකි විය. අවසාන ටෝකනයට පෙර විශේෂ අක්ෂරයක් එකතු කිරීම ප්රමාණවත්ය. උදාහරණ වශයෙන්:

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

ඉන්පසු යතුර මකා දැමීම "/very" මකාදැමීම බවට හැරේ "/u00very" සහ පරාසය ["/very/", "/very0"), සහ සියලුම දරුවන් ලබා ගැනීම - පරාසයේ යතුරු සඳහා ඉල්ලීමක් ["/very/u00", "/very/u01").

ZooKeeper හි යතුරක් ඉවත් කිරීම

මම දැනටමත් සඳහන් කර ඇති පරිදි, ZooKeeper හි ඔබට දරුවන් සිටී නම් නෝඩයක් මකා දැමිය නොහැක. අපට යතුර උප වෘක්ෂය සමඟ මකා දැමීමට අවශ්‍යයි. මම කළ යුත්තේ කුමක් ද? අපි මේක කරන්නේ උපේක්ෂාවෙන්. පළමුව, අපි එක් එක් ශීර්ෂයේ දරුවන් වෙනම විමසුමකින් ලබා ගනිමින් උප වෘක්ෂය පුනරාවර්තන ලෙස තරණය කරමු. ඉන්පසුව අපි නිවැරදි අනුපිළිවෙලින් subtree හි සියලුම නෝඩ් මකා දැමීමට උත්සාහ කරන ගනුදෙනුවක් ගොඩනඟමු. ඇත්ත වශයෙන්ම, subtree කියවීම සහ එය මකා දැමීම අතර වෙනස්කම් සිදු විය හැක. මෙම අවස්ථාවේදී, ගනුදෙනුව අසාර්ථක වනු ඇත. එපමනක් නොව, කියවීමේ ක්රියාවලිය තුළ subtree වෙනස් විය හැක. උදාහරණයක් ලෙස, මෙම නෝඩය දැනටමත් මකා දමා තිබේ නම්, ඊළඟ නෝඩයේ ළමුන් සඳහා වන ඉල්ලීමක් දෝෂයක් ලබා දෙනු ඇත. අවස්ථා දෙකේදීම, අපි සම්පූර්ණ ක්රියාවලිය නැවත නැවතත් කරන්නෙමු.

මෙම ප්‍රවේශය යතුරට දරුවන් සිටී නම් එය මකා දැමීම ඉතා අකාර්යක්ෂම කරයි, ඊටත් වඩා යෙදුම යතුර සමඟ දිගටම ක්‍රියා කරන්නේ නම්, මකා දැමීම සහ යතුරු නිර්මාණය කරයි. කෙසේ වෙතත්, මෙය etcd සහ කොන්සල් හි වෙනත් ක්‍රම ක්‍රියාත්මක කිරීම සංකීර්ණ වීම වළක්වා ගැනීමට අපට ඉඩ සලසයි.

ZooKeeper හි පිහිටුවා ඇත

ZooKeeper හි ගස් ව්‍යුහය සමඟ ක්‍රියා කරන වෙනම ක්‍රම තිබේ (නිර්මාණය කරන්න, මකා දමන්න, getChildren) සහ නෝඩ් වල දත්ත සමඟ ක්‍රියා කරයි (setData, getData) එපමණක් නොව, සියලුම ක්‍රමවලට දැඩි පූර්ව කොන්දේසි ඇත: සාදන්න නෝඩය දැනටමත් තිබේ නම් දෝෂයක් ලබා දෙයි. සාදන ලද, මකා දැමීම හෝ දත්ත සැකසීම - එය දැනටමත් නොමැති නම්. යතුරක් තිබීම ගැන නොසිතා කැඳවිය හැකි ක්‍රමයක් අපට අවශ්‍ය විය.

එක් විකල්පයක් වන්නේ මකාදැමීමේදී මෙන් ශුභවාදී ප්රවේශයක් ගැනීමයි. නෝඩයක් තිබේදැයි පරීක්ෂා කරන්න. පවතී නම්, setData අමතන්න, එසේ නොමැතිනම් සාදන්න. අවසාන ක්‍රමය දෝෂයක් ලබා දුන්නේ නම්, එය නැවත නැවත කරන්න. සැලකිල්ලට ගත යුතු පළමු දෙය නම් පැවැත්ම පරීක්ෂණය නිෂ්ඵල බවය. ඔබට වහාම නිර්මාණය අමතන්න. සාර්ථකව නිම කිරීම යනු නෝඩය නොපවතින අතර එය නිර්මාණය කර ඇති බවයි. එසේ නොමැතිනම්, create සුදුසු දෝෂය නැවත ලබා දෙනු ඇත, ඉන්පසු ඔබට setData ඇමතීමට අවශ්‍ය වේ. ඇත්ත වශයෙන්ම, ඇමතුම් අතර, තරඟකාරී ඇමතුමක් මඟින් ශීර්ෂයක් මකා දැමිය හැකි අතර, setData ද දෝෂයක් ලබා දෙනු ඇත. මෙම අවස්ථාවේදී, ඔබට එය නැවත නැවතත් කළ හැකිය, නමුත් එය වටිනවාද?

ක්‍රම දෙකම දෝෂයක් ලබා දෙන්නේ නම්, තරඟකාරී මකාදැමීමක් සිදු වූ බව අපි නිසැකවම දනිමු. අපි හිතමු මේ මකාදැමීම සිදුවූයේ ඇමතීමෙන් පසුව බව. එවිට අප ස්ථාපිත කිරීමට උත්සාහ කරන කුමන අර්ථයක් වුවද දැනටමත් මකා දමා ඇත. මෙයින් අදහස් කරන්නේ ඇත්ත වශයෙන්ම කිසිවක් ලියා නොමැති වුවද, කට්ටලය සාර්ථකව ක්රියාත්මක වූ බව අපට උපකල්පනය කළ හැකි බවයි.

තවත් තාක්ෂණික විස්තර

මෙම කොටසේදී අපි බෙදා හරින ලද පද්ධති වලින් විවේකයක් ගෙන කේතීකරණය ගැන කතා කරමු.
පාරිභෝගිකයාගේ ප්‍රධාන අවශ්‍යතාවලින් එකක් වූයේ හරස් වේදිකාවයි: අවම වශයෙන් එක් සේවාවක් Linux, MacOS සහ Windows මත සහය දැක්විය යුතුය. මුලදී, අපි ලිනක්ස් සඳහා පමණක් සංවර්ධනය කළ අතර පසුව වෙනත් පද්ධති මත පරීක්ෂා කිරීමට පටන් ගත්තෙමු. මෙය ගැටළු රාශියක් ඇති කළ අතර, එය ප්‍රවේශ විය යුතු ආකාරය සම්පූර්ණයෙන්ම නොපැහැදිලි විය. එහි ප්‍රතිඵලයක් වශයෙන්, සම්බන්ධීකරණ සේවා තුනම දැන් Linux සහ MacOS මත සහය දක්වන අතර Windows මත Consul KV පමණක් සහාය දක්වයි.

ආරම්භයේ සිටම, අපි සේවාවන් වෙත ප්‍රවේශ වීම සඳහා සූදානම් කළ පුස්තකාල භාවිතා කිරීමට උත්සාහ කළෙමු. ZooKeeper සම්බන්ධයෙන් ගත් කල, තේරීම මත වැටුණි ZooKeeper C++, එය අවසානයේ වින්ඩෝස් මත සම්පාදනය කිරීමට අසමත් විය. කෙසේ වෙතත්, මෙය පුදුමයට කරුණක් නොවේ: පුස්තකාලය ලිනක්ස් පමණක් ලෙස ස්ථානගත කර ඇත. කොන්සල් සඳහා එකම විකල්පය විය ppconsul. ඒකට සහයෝගය එකතු කරන්න තිබුණා සැසිවාර и ගනුදෙනු. etcd සඳහා, ප්‍රොටෝකෝලයේ නවතම අනුවාදයට සහය දක්වන සම්පූර්ණ පුස්තකාලයක් සොයාගත නොහැකි විය, එබැවින් අපි සරලව උත්පාදනය කරන ලද grpc සේවාදායකයා.

ZooKeeper C++ පුස්තකාලයේ අසමමුහුර්ත අතුරුමුහුණත මගින් දේවානුභාවයෙන්, අපි අසමමුහුර්ත අතුරුමුහුණතක් ද ක්‍රියාත්මක කිරීමට තීරණය කළෙමු. ZooKeeper C++ මේ සඳහා අනාගත/පොරොන්දු primitives භාවිතා කරයි. STL හි, අවාසනාවකට මෙන්, ඒවා ඉතා නිහතමානීව ක්රියාත්මක වේ. උදාහරණයක් ලෙස, නැත පසුව ක්රමය, සම්මත වූ ශ්‍රිතය පවතින විට අනාගතයේ ප්‍රතිඵලයට අදාළ වේ. අපගේ නඩුවේදී, ප්රතිඵලය අපගේ පුස්තකාලයේ ආකෘතියට පරිවර්තනය කිරීම සඳහා එවැනි ක්රමයක් අවශ්ය වේ. මෙම ගැටලුව මඟහරවා ගැනීම සඳහා, පාරිභෝගිකයාගේ ඉල්ලීම පරිදි අපට Boost වැනි බර තෙවන පාර්ශවීය පුස්තකාල භාවිතා කළ නොහැකි බැවින්, අපගේම සරල නූල් සංචිතයක් ක්‍රියාත්මක කිරීමට සිදු විය.

අපගේ එවකට ක්‍රියාත්මක කිරීම මේ ආකාරයට ක්‍රියාත්මක වේ. ඇමතූ විට, අතිරේක පොරොන්දුවක්/අනාගත යුගලයක් සාදනු ලැබේ. නව අනාගතය ආපසු ලබා දෙන අතර, සම්මත වූ එක අනුරූප කාර්යය සහ අතිරේක පොරොන්දුව පෝලිමේ තබා ඇත. පොකුණෙන් පොටක් පෝලිමෙන් අනාගත කිහිපයක් තෝරාගෙන ඒවා wait_for භාවිතයෙන් ඡන්ද විමසයි. ප්‍රතිඵලයක් ලැබුණු විට, අදාළ ශ්‍රිතය කැඳවා එහි ප්‍රතිලාභ අගය පොරොන්දුව වෙත යවනු ලැබේ.

අපි etcd සහ කොන්සල් වෙත විමසුම් ක්‍රියාත්මක කිරීමට එකම නූල් සංචිතය භාවිතා කළෙමු. මෙයින් අදහස් කරන්නේ විවිධ නූල් කිහිපයකින් යටින් පවතින පුස්තකාලවලට ප්‍රවේශ විය හැකි බවයි. ppconsul නූල් ආරක්ෂිත නොවේ, එබැවින් එයට ලැබෙන ඇමතුම් අගුලු වලින් ආරක්ෂා වේ.
ඔබට බහු නූල් වලින් grpc සමඟ වැඩ කළ හැකිය, නමුත් සියුම්කම් තිබේ. etcd ඔරලෝසු වල grpc streams හරහා ක්‍රියාත්මක වේ. මේවා යම් ආකාරයක පණිවිඩ සඳහා ද්විපාර්ශ්වික නාලිකා වේ. පුස්තකාලය සියලුම ඔරලෝසු සඳහා තනි නූල් සහ එන පණිවිඩ සකසන තනි නූල් නිර්මාණය කරයි. එබැවින් grpc ප්‍රවාහයට සමාන්තර ලිවීම් තහනම් කරයි. මෙයින් අදහස් කරන්නේ ඔරලෝසුවක් ආරම්භ කිරීමේදී හෝ මකා දැමීමේදී, ඊළඟ ඉල්ලීම යැවීමට පෙර පෙර ඉල්ලීම යැවීම අවසන් වන තෙක් ඔබ බලා සිටිය යුතු බවයි. අපි සමමුහුර්තකරණය සඳහා භාවිතා කරමු කොන්දේසි විචල්යයන්.

ප්රතිඵලය

ඔබම බලන්න: liboffkv.

අපේ කණ්ඩායම: රේඩ් රොමානොව්, අයිවන් ග්ලූෂෙන්කොව්, දිමිත්‍රි කමල්ඩිනොව්, වික්ටර් ක්‍රැපිවෙන්ස්කි, විටාලි ඉවානින්.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න