ஐந்து மாணவர்கள் மற்றும் மூன்று முக்கிய மதிப்புள்ள கடைகளை விநியோகித்தனர்

அல்லது 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 மற்றும் Consul ஆகியவை உள்ளமைக்கப்பட்ட ஆதரவைக் கொண்டிருக்கவில்லை என்பதன் காரணமாகும்.

ஒரு உச்சியை நீக்கும் போது 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 முதல் FF வரை. பின்னர் நாங்கள் உள்ளே ஓடினோம் செயல்பாட்டு எண் வரம்பு ஒரு பரிவர்த்தனைக்குள்.

இதன் விளைவாக, ஒரு எளிய விசை மாற்ற அமைப்பு கண்டுபிடிக்கப்பட்டது, இது ஒரு விசையை நீக்குதல் மற்றும் குழந்தைகளின் பட்டியலைப் பெறுதல் ஆகிய இரண்டையும் திறம்பட செயல்படுத்த முடிந்தது. கடைசி டோக்கனுக்கு முன் ஒரு சிறப்பு எழுத்தைச் சேர்த்தால் போதும். உதாரணத்திற்கு:

"/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 இல் மர அமைப்புடன் வேலை செய்யும் தனி முறைகள் உள்ளன (உருவாக்கு, நீக்கு, getChildren) மற்றும் முனைகளில் உள்ள தரவுகளுடன் (setData, getData) வேலை செய்யும். மேலும், எல்லா முறைகளுக்கும் கடுமையான முன்நிபந்தனைகள் உள்ளன: முனை ஏற்கனவே இருந்தால் உருவாக்கம் பிழையை வழங்கும். உருவாக்கப்பட்டது, நீக்கவும் அல்லது அமைக்கவும் - அது ஏற்கனவே இல்லை என்றால். ஒரு விசையின் இருப்பைப் பற்றி சிந்திக்காமல் அழைக்கக்கூடிய ஒரு தொகுப்பு முறை எங்களுக்குத் தேவைப்பட்டது.

நீக்குதல் போன்ற ஒரு நம்பிக்கையான அணுகுமுறையை எடுப்பது ஒரு விருப்பமாகும். ஒரு முனை இருக்கிறதா என்று சரிபார்க்கவும். இருந்தால், setData ஐ அழைக்கவும், இல்லையெனில் உருவாக்கவும். கடைசி முறை பிழையை அளித்தால், அதை மீண்டும் மீண்டும் செய்யவும். கவனிக்க வேண்டிய முதல் விஷயம் என்னவென்றால், இருப்பு சோதனை அர்த்தமற்றது. நீங்கள் உடனடியாக உருவாக்க அழைக்கலாம். வெற்றிகரமாக முடிப்பது கணு இல்லை மற்றும் அது உருவாக்கப்பட்டது என்று அர்த்தம். இல்லையெனில், உருவாக்கம் பொருத்தமான பிழையை வழங்கும், அதன் பிறகு நீங்கள் setData ஐ அழைக்க வேண்டும். நிச்சயமாக, அழைப்புகளுக்கு இடையில், ஒரு போட்டி அழைப்பின் மூலம் ஒரு உச்சியை நீக்கலாம், மேலும் செட் டேட்டாவும் ஒரு பிழையை வழங்கும். இந்த வழக்கில், நீங்கள் அதை மீண்டும் மீண்டும் செய்யலாம், ஆனால் அது மதிப்புக்குரியதா?

இரண்டு முறைகளும் ஒரு பிழையை வழங்கினால், போட்டி நீக்கம் நடந்தது என்பதை நாங்கள் உறுதியாக அறிவோம். இந்த நீக்கம் அழைப்பு செட் பிறகு ஏற்பட்டது என்று கற்பனை செய்யலாம். நாம் நிறுவ முயற்சிக்கும் எந்த அர்த்தமும் ஏற்கனவே அழிக்கப்பட்டுவிட்டது. இதன் பொருள், உண்மையில் எதுவும் எழுதப்படாவிட்டாலும் கூட, அந்த தொகுப்பு வெற்றிகரமாக செயல்படுத்தப்பட்டது என்று நாம் கருதலாம்.

மேலும் தொழில்நுட்ப விவரங்கள்

இந்த பிரிவில் நாம் விநியோகிக்கப்பட்ட அமைப்புகளில் இருந்து ஓய்வு எடுத்து குறியீட்டு முறை பற்றி பேசுவோம்.
வாடிக்கையாளரின் முக்கிய தேவைகளில் ஒன்று குறுக்கு-தளம் ஆகும்: குறைந்தபட்சம் ஒரு சேவையை Linux, MacOS மற்றும் Windows இல் ஆதரிக்க வேண்டும். ஆரம்பத்தில், நாங்கள் லினக்ஸிற்காக மட்டுமே உருவாக்கினோம், பின்னர் மற்ற கணினிகளில் சோதனை செய்யத் தொடங்கினோம். இது நிறைய சிக்கல்களை ஏற்படுத்தியது, சிறிது நேரம் எப்படி அணுகுவது என்பது முற்றிலும் தெளிவாக இல்லை. இதன் விளைவாக, மூன்று ஒருங்கிணைப்பு சேவைகளும் இப்போது Linux மற்றும் MacOS இல் ஆதரிக்கப்படுகின்றன, அதே நேரத்தில் Windows இல் Consul KV மட்டுமே ஆதரிக்கப்படுகிறது.

ஆரம்பத்தில் இருந்தே, சேவைகளை அணுக ஆயத்த நூலகங்களைப் பயன்படுத்த முயற்சித்தோம். ZooKeeper விஷயத்தில், தேர்வு விழுந்தது ZooKeeper C++, இது இறுதியில் விண்டோஸில் தொகுக்கத் தவறியது. இருப்பினும், இது ஆச்சரியமல்ல: நூலகம் லினக்ஸ் மட்டுமே. தூதரகத்திற்கு ஒரே வழி இருந்தது பிபிகான்சல். அதற்கு ஆதரவு சேர்க்க வேண்டும் அமர்வுகள் и பரிவர்த்தனைகள். etcd க்கு, நெறிமுறையின் சமீபத்திய பதிப்பை ஆதரிக்கும் முழு அளவிலான நூலகம் கிடைக்கவில்லை, எனவே நாங்கள் வெறுமனே உருவாக்கப்பட்ட grpc கிளையன்ட்.

ZooKeeper C++ நூலகத்தின் ஒத்திசைவற்ற இடைமுகத்தால் ஈர்க்கப்பட்டு, ஒத்திசைவற்ற இடைமுகத்தையும் செயல்படுத்த முடிவு செய்தோம். ZooKeeper C++ இதற்கு எதிர்கால/வாக்குறுதி ப்ரிமிட்டிவ்களைப் பயன்படுத்துகிறது. STL இல், துரதிர்ஷ்டவசமாக, அவை மிகவும் அடக்கமாக செயல்படுத்தப்படுகின்றன. உதாரணமாக, இல்லை பின்னர் முறை, இது கிடைக்கப்பெறும் போது அனுப்பப்பட்ட செயல்பாடு எதிர்காலத்தின் விளைவுக்கு பொருந்தும். எங்கள் விஷயத்தில், முடிவை எங்கள் நூலகத்தின் வடிவமைப்பிற்கு மாற்றுவதற்கு அத்தகைய முறை அவசியம். இந்தச் சிக்கலைச் சமாளிக்க, எங்கள் சொந்த எளிய நூல் தொகுப்பை நாங்கள் செயல்படுத்த வேண்டியிருந்தது, ஏனெனில் வாடிக்கையாளரின் வேண்டுகோளின் பேரில் பூஸ்ட் போன்ற கனமான மூன்றாம் தரப்பு நூலகங்களைப் பயன்படுத்த முடியாது.

நமது அப்போதைய அமலாக்கம் இப்படித்தான் செயல்படுகிறது. அழைக்கப்படும் போது, ​​கூடுதல் வாக்குறுதி/எதிர்கால ஜோடி உருவாக்கப்படும். புதிய எதிர்காலம் திரும்பப் பெறப்பட்டது, மேலும் நிறைவேற்றப்பட்ட ஒன்று தொடர்புடைய செயல்பாடு மற்றும் கூடுதல் வாக்குறுதியுடன் வரிசையில் வைக்கப்படும். குளத்திலிருந்து ஒரு நூல் வரிசையில் இருந்து பல எதிர்காலங்களைத் தேர்ந்தெடுத்து, அவற்றை wait_for ஐப் பயன்படுத்தி வாக்கெடுப்பு நடத்துகிறது. முடிவு கிடைக்கும்போது, ​​தொடர்புடைய செயல்பாடு அழைக்கப்படுகிறது மற்றும் அதன் திரும்ப மதிப்பு வாக்குறுதிக்கு அனுப்பப்படும்.

etcd மற்றும் Consul க்கு வினவல்களை இயக்க அதே த்ரெட் பூலைப் பயன்படுத்தினோம். இதன் பொருள், அடிப்படை நூலகங்களை பல்வேறு நூல்கள் மூலம் அணுக முடியும். ppconsul நூல் பாதுகாப்பானது அல்ல, எனவே அதற்கான அழைப்புகள் பூட்டுகளால் பாதுகாக்கப்படுகின்றன.
நீங்கள் பல நூல்களிலிருந்து grpc உடன் வேலை செய்யலாம், ஆனால் நுணுக்கங்கள் உள்ளன. etcd இல் கடிகாரங்கள் grpc ஸ்ட்ரீம்கள் வழியாக செயல்படுத்தப்படுகின்றன. இவை ஒரு குறிப்பிட்ட வகை செய்திகளுக்கான இருதரப்பு சேனல்கள். நூலகம் அனைத்து கடிகாரங்களுக்கும் ஒரு நூலையும் உள்வரும் செய்திகளைச் செயலாக்கும் ஒரு நூலையும் உருவாக்குகிறது. எனவே ஸ்ட்ரீம் செய்ய இணையான எழுத்துகளை grpc தடை செய்கிறது. அதாவது கடிகாரத்தை துவக்கும் போது அல்லது நீக்கும் போது, ​​அடுத்த கோரிக்கையை அனுப்பும் முன், முந்தைய கோரிக்கை அனுப்பும் வரை காத்திருக்க வேண்டும். ஒத்திசைவுக்குப் பயன்படுத்துகிறோம் நிபந்தனை மாறிகள்.

இதன் விளைவாக

நீங்களே பாருங்கள்: liboffkv.

எங்கள் அணி: ரேட் ரோமானோவ், இவான் குளுஷென்கோவ், டிமிட்ரி கமல்டினோவ், விக்டர் கிராபிவென்ஸ்கி, விட்டலி இவானின்.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்