"ஹடூப்பில் பெரிய அளவிலான தரவுகளை விநியோகிப்பதற்கான வழிமுறைகள்" தொடரிலிருந்து "ஹடூப். ஜூ கீப்பர்" என்ற விரிவுரையின் டிரான்ஸ்கிரிப்டைப் படிக்குமாறு நான் பரிந்துரைக்கிறேன்.
ZooKeeper என்றால் என்ன, ஹடூப் சுற்றுச்சூழல் அமைப்பில் அதன் இடம். விநியோகிக்கப்பட்ட கம்ப்யூட்டிங் பற்றிய பொய்கள். நிலையான விநியோக அமைப்பின் வரைபடம். விநியோகிக்கப்பட்ட அமைப்புகளை ஒருங்கிணைப்பதில் சிரமம். வழக்கமான ஒருங்கிணைப்பு சிக்கல்கள். ZooKeeper வடிவமைப்பின் பின்னணியில் உள்ள கொள்கைகள். ZooKeeper தரவு மாதிரி. znode கொடிகள். அமர்வுகள். கிளையன்ட் API. முதன்மையானவை (உள்ளமைவு, குழு உறுப்பினர், எளிய பூட்டுகள், தலைவர் தேர்தல், மந்தை விளைவு இல்லாமல் பூட்டுதல்). ZooKeeper கட்டிடக்கலை. உயிரியல் பூங்காக் காவலர் டி.பி. ZAB. கோரிக்கை கையாளுபவர்.
இன்று நாம் ZooKeeper பற்றி பேசுவோம். இந்த விஷயம் மிகவும் பயனுள்ளதாக இருக்கிறது. எந்த அப்பாச்சி ஹடூப் தயாரிப்பைப் போலவே இதுவும் ஒரு லோகோவைக் கொண்டுள்ளது. இது ஒரு மனிதனை சித்தரிக்கிறது.
இதற்கு முன், நாங்கள் முக்கியமாக அங்கு தரவை எவ்வாறு செயலாக்குவது, அதை எவ்வாறு சேமிப்பது, அதாவது அதை எப்படியாவது பயன்படுத்துவது மற்றும் எப்படியாவது வேலை செய்வது என்பது பற்றி பேசினோம். இன்று நான் விநியோகிக்கப்பட்ட பயன்பாடுகளை உருவாக்குவது பற்றி கொஞ்சம் பேச விரும்புகிறேன். இந்த விஷயத்தை எளிமைப்படுத்த உங்களை அனுமதிக்கும் விஷயங்களில் ZooKeeper ஒன்றாகும். இது ஒரு வகையான சேவையாகும், இது விநியோகிக்கப்பட்ட அமைப்புகளில், விநியோகிக்கப்பட்ட பயன்பாடுகளில் செயல்முறைகளின் தொடர்புகளின் ஒருவித ஒருங்கிணைப்பிற்காக வடிவமைக்கப்பட்டுள்ளது.
இப்படிப்பட்ட அப்ளிகேஷன்களின் தேவை நாளுக்கு நாள் அதிகமாகிக்கொண்டே போகிறது, அதுதான் எங்கள் படிப்பு. ஒருபுறம், MapReduce மற்றும் இந்த ஆயத்த கட்டமைப்பானது இந்த சிக்கலைச் சமன் செய்ய உங்களை அனுமதிக்கிறது மற்றும் செயல்முறைகளின் தொடர்பு மற்றும் ஒருங்கிணைப்பு போன்ற பழமையானவற்றை எழுதுவதிலிருந்து புரோகிராமரை விடுவிக்கிறது. ஆனால் மறுபுறம், இதை எப்படியும் செய்ய வேண்டியதில்லை என்று யாரும் உத்தரவாதம் அளிக்கவில்லை. MapReduce அல்லது பிற ஆயத்த கட்டமைப்புகள் இதைப் பயன்படுத்தி செயல்படுத்த முடியாத சில நிகழ்வுகளை எப்போதும் முழுமையாக மாற்றாது. MapReduce மற்றும் பிற Apache திட்டங்கள் உட்பட; அவை உண்மையில் விநியோகிக்கப்பட்ட பயன்பாடுகளாகும். மேலும் எழுதுவதை எளிதாக்க, அவர்கள் ZooKeeper என்று எழுதினார்கள்.
அனைத்து ஹடூப் தொடர்பான பயன்பாடுகளைப் போலவே, இது Yahoo! இது இப்போது அதிகாரப்பூர்வ அப்பாச்சி பயன்பாடாகவும் உள்ளது. இது HBase போல தீவிரமாக உருவாக்கப்படவில்லை. நீங்கள் JIRA HBase க்குச் சென்றால், ஒவ்வொரு நாளும் பிழை அறிக்கைகள், எதையாவது மேம்படுத்துவதற்கான திட்டங்கள், அதாவது திட்டத்தில் வாழ்க்கை தொடர்ந்து நடந்து கொண்டிருக்கிறது. மற்றும் ZooKeeper, ஒருபுறம், ஒப்பீட்டளவில் எளிமையான தயாரிப்பு, மறுபுறம், இது அதன் நம்பகத்தன்மையை உறுதி செய்கிறது. மேலும் இது பயன்படுத்த மிகவும் எளிதானது, அதனால்தான் ஹடூப் சுற்றுச்சூழல் அமைப்பில் உள்ள பயன்பாடுகளில் இது ஒரு தரநிலையாக மாறியுள்ளது. எனவே, இது எவ்வாறு செயல்படுகிறது மற்றும் எவ்வாறு பயன்படுத்துவது என்பதைப் புரிந்துகொள்ள, அதை மதிப்பாய்வு செய்வது பயனுள்ளதாக இருக்கும் என்று நினைத்தேன்.
நாங்கள் நடத்திய சில சொற்பொழிவுகளில் இருந்து எடுக்கப்பட்ட படம் இது. இதுவரை நாம் கருதிய அனைத்திற்கும் இது ஆர்த்தோகனல் என்று சொல்லலாம். இங்கே குறிப்பிடப்பட்டுள்ள அனைத்தும், ஒரு பட்டம் அல்லது இன்னொரு அளவிற்கு, ZooKeeper உடன் வேலை செய்கின்றன, அதாவது, இது இந்த தயாரிப்புகள் அனைத்தையும் பயன்படுத்தும் ஒரு சேவையாகும். HDFS அல்லது MapReduce ஆகியவை தங்களுக்கு குறிப்பாக வேலை செய்யும் தங்கள் சொந்த ஒத்த சேவைகளை எழுதுவதில்லை. அதன்படி, ZooKeeper பயன்படுத்தப்படுகிறது. மேலும் இது வளர்ச்சி மற்றும் பிழைகள் தொடர்பான சில விஷயங்களை எளிதாக்குகிறது.
இதெல்லாம் எங்கிருந்து வருகிறது? வெவ்வேறு கணினிகளில் இணையாக இரண்டு பயன்பாடுகளை நாங்கள் தொடங்கினோம், அவற்றை ஒரு சரம் அல்லது கண்ணி மூலம் இணைத்தோம், எல்லாம் வேலை செய்கிறது. ஆனால் சிக்கல் என்னவென்றால், நெட்வொர்க் நம்பகத்தன்மையற்றது, மேலும் நீங்கள் போக்குவரத்தை மோப்பம் பிடித்தால் அல்லது அங்கு என்ன நடக்கிறது, நெட்வொர்க்கில் வாடிக்கையாளர்கள் எவ்வாறு தொடர்பு கொள்கிறார்கள் என்பதைப் பார்த்தால், சில பாக்கெட்டுகள் தொலைந்துவிட்டன அல்லது மீண்டும் அனுப்பப்படுவதை நீங்கள் அடிக்கடி பார்க்கலாம். TCP நெறிமுறைகள் கண்டுபிடிக்கப்பட்டது என்பது ஒன்றும் இல்லை, இது ஒரு குறிப்பிட்ட அமர்வை நிறுவவும் செய்திகளை வழங்குவதற்கு உத்தரவாதம் அளிக்கவும் உங்களை அனுமதிக்கிறது. ஆனால் எப்படியிருந்தாலும், TCP கூட உங்களை எப்போதும் காப்பாற்ற முடியாது. எல்லாவற்றுக்கும் காலக்கெடு உண்டு. நெட்வொர்க் சிறிது நேரம் விழக்கூடும். அது கண் சிமிட்டலாம். நெட்வொர்க் நம்பகமானதாக இருப்பதை நீங்கள் நம்ப முடியாது என்பதற்கு இவை அனைத்தும் வழிவகுக்கிறது. ஒரு கணினியில் அல்லது ஒரு சூப்பர் கம்ப்யூட்டரில் இயங்கும் இணையான பயன்பாடுகளை எழுதுவதில் இருந்து இது முக்கிய வேறுபாடு ஆகும், அங்கு நெட்வொர்க் இல்லாத இடத்தில், நினைவகத்தில் அதிக நம்பகமான தரவு பரிமாற்ற பஸ் உள்ளது. மேலும் இது ஒரு அடிப்படை வேறுபாடு.
மற்றவற்றுடன், நெட்வொர்க்கைப் பயன்படுத்தும் போது, ஒரு குறிப்பிட்ட தாமதம் எப்போதும் இருக்கும். வட்டில் அது உள்ளது, ஆனால் நெட்வொர்க்கில் அது அதிகமாக உள்ளது. தாமதம் என்பது சில தாமத நேரமாகும், இது சிறியதாகவோ அல்லது குறிப்பிடத்தக்கதாகவோ இருக்கலாம்.
நெட்வொர்க் டோபாலஜி மாறுகிறது. இடவியல் என்றால் என்ன - இது எங்கள் நெட்வொர்க் உபகரணங்களின் இடம். தரவு மையங்கள் உள்ளன, அங்கு நிற்கும் ரேக்குகள் உள்ளன, மெழுகுவர்த்திகள் உள்ளன. இவை அனைத்தையும் மீண்டும் இணைக்கலாம், நகர்த்தலாம், மேலும் இவை அனைத்தையும் கணக்கில் எடுத்துக்கொள்ள வேண்டும். ஐபி பெயர்கள் மாறுகின்றன, நமது போக்குவரத்தின் பாதை மாறுகிறது. இதையும் கவனத்தில் கொள்ள வேண்டும்.
உபகரணங்களின் அடிப்படையில் பிணையமும் மாறலாம். நடைமுறையில் இருந்து, எங்கள் நெட்வொர்க் பொறியாளர்கள் மெழுகுவர்த்திகளில் அவ்வப்போது ஏதாவது புதுப்பிக்க விரும்புகிறார்கள் என்று நான் சொல்ல முடியும். திடீரென்று ஒரு புதிய ஃபார்ம்வேர் வெளிவந்தது மற்றும் அவர்கள் சில ஹடூப் கிளஸ்டரில் குறிப்பாக ஆர்வம் காட்டவில்லை. அவர்களுக்கு சொந்த வேலை இருக்கிறது. அவர்களைப் பொறுத்தவரை, முக்கிய விஷயம் நெட்வொர்க் வேலை செய்கிறது. அதன்படி, அவர்கள் அங்கு எதையாவது மீண்டும் பதிவேற்ற விரும்புகிறார்கள், தங்கள் வன்பொருளில் ஒளிரும், மேலும் வன்பொருளும் அவ்வப்போது மாறுகிறது. இவை அனைத்தும் எப்படியாவது கணக்கில் எடுத்துக்கொள்ளப்பட வேண்டும். இவை அனைத்தும் எங்கள் விநியோகிக்கப்பட்ட பயன்பாட்டை பாதிக்கிறது.
பொதுவாக சில காரணங்களுக்காக பெரிய அளவிலான தரவுகளுடன் வேலை செய்யத் தொடங்குபவர்கள் இணையம் வரம்பற்றது என்று நம்புகிறார்கள். பல டெராபைட் கோப்பு இருந்தால், அதை உங்கள் சர்வர் அல்லது கம்ப்யூட்டருக்கு எடுத்துச் சென்று இதைப் பயன்படுத்தி திறக்கலாம். பூனை மற்றும் பார்க்கவும். மற்றொரு பிழை உள்ளது உரம் பதிவுகளைப் பாருங்கள். இது மோசமானது என்பதால் இதை ஒருபோதும் செய்யாதீர்கள். Vim எல்லாவற்றையும் பஃபர் செய்ய முயற்சிப்பதால், எல்லாவற்றையும் நினைவகத்தில் ஏற்றுகிறது, குறிப்பாக இந்த பதிவின் மூலம் நாம் நகர்த்தத் தொடங்கும் போது மற்றும் எதையாவது தேடும் போது. இவை மறக்கப்பட்ட விஷயங்கள், ஆனால் கருத்தில் கொள்ள வேண்டியவை.
ஒரு கணினியில் ஒரு செயலியில் இயங்கும் ஒரு நிரலை எழுதுவது எளிது.
எங்கள் கணினி வளரும்போது, அனைத்தையும் இணைத்து, கணினியில் மட்டுமல்ல, ஒரு கிளஸ்டரிலும் இணையாக மாற்ற விரும்புகிறோம். கேள்வி எழுகிறது: இந்த விஷயத்தை எவ்வாறு ஒருங்கிணைப்பது? எங்கள் பயன்பாடுகள் ஒன்றுடன் ஒன்று தொடர்பு கொள்ளாமல் இருக்கலாம், ஆனால் பல சேவையகங்களில் இணையாக பல செயல்முறைகளை இயக்கினோம். அவர்களுக்கு எல்லாம் சரியாக நடக்கிறதா என்பதை எப்படி கண்காணிப்பது? உதாரணமாக, அவர்கள் இணையத்தில் எதையாவது அனுப்புகிறார்கள். அவர்கள் எங்காவது தங்கள் நிலையைப் பற்றி எழுத வேண்டும், எடுத்துக்காட்டாக, ஒருவித தரவுத்தளத்தில் அல்லது பதிவில், பின்னர் இந்த பதிவை ஒருங்கிணைத்து பின்னர் எங்காவது பகுப்பாய்வு செய்யுங்கள். கூடுதலாக, செயல்முறை வேலை செய்கிறது மற்றும் வேலை செய்கிறது என்பதை நாம் கணக்கில் எடுத்துக்கொள்ள வேண்டும், திடீரென்று சில பிழைகள் தோன்றின அல்லது அது செயலிழந்தது, பிறகு எவ்வளவு விரைவாக அதைப் பற்றி கண்டுபிடிப்போம்?
இவை அனைத்தையும் விரைவாகக் கண்காணிக்க முடியும் என்பது தெளிவாகிறது. இதுவும் நல்லது, ஆனால் கண்காணிப்பு என்பது ஒரு வரையறுக்கப்பட்ட விஷயம், இது சில விஷயங்களை மிக உயர்ந்த மட்டத்தில் கண்காணிக்க உங்களை அனுமதிக்கிறது.
எங்கள் செயல்முறைகள் ஒருவருக்கொருவர் தொடர்பு கொள்ளத் தொடங்க வேண்டும் என்று நாங்கள் விரும்பினால், எடுத்துக்காட்டாக, ஒருவருக்கொருவர் சில தரவை அனுப்ப, கேள்வியும் எழுகிறது - இது எப்படி நடக்கும்? ஏதாவது ஒரு இனம் நிலை இருக்குமா, ஒருவரையொருவர் மேலெழுதுவார்களா, தரவு சரியாக வருமா, வழியில் ஏதாவது தொலைந்து போகுமா? நாம் ஒருவித நெறிமுறை போன்றவற்றை உருவாக்க வேண்டும்.
இந்த அனைத்து செயல்முறைகளின் ஒருங்கிணைப்பு ஒரு சிறிய விஷயம் அல்ல. மேலும் இது டெவலப்பரை இன்னும் குறைந்த நிலைக்குச் செல்லவும், கணினிகளை புதிதாக அல்லது புதிதாக எழுதவும் கட்டாயப்படுத்துகிறது, ஆனால் இது அவ்வளவு எளிதல்ல.
நீங்கள் ஒரு கிரிப்டோகிராஃபிக் அல்காரிதத்துடன் வந்தால் அல்லது அதை செயல்படுத்தினால், உடனடியாக அதை தூக்கி எறியுங்கள், ஏனென்றால் அது உங்களுக்கு வேலை செய்யாது. நீங்கள் வழங்க மறந்த பிழைகள் பெரும்பாலும் இதில் இருக்கும். தீவிரமான எதற்கும் இதை ஒருபோதும் பயன்படுத்த வேண்டாம், ஏனெனில் அது பெரும்பாலும் நிலையற்றதாக இருக்கும். ஏனெனில் இருக்கும் அனைத்து வழிமுறைகளும் மிக நீண்ட காலமாக காலத்தால் சோதிக்கப்பட்டவை. இது சமூகத்தால் பிழையாக உள்ளது. இது ஒரு தனி தலைப்பு. இங்கேயும் அப்படித்தான். சில வகையான செயல்முறை ஒத்திசைவை நீங்களே செயல்படுத்தாமல் இருக்க முடிந்தால், இதைச் செய்யாமல் இருப்பது நல்லது, ஏனென்றால் இது மிகவும் சிக்கலானது மற்றும் தொடர்ந்து பிழைகளைத் தேடும் நடுங்கும் பாதையில் உங்களை வழிநடத்துகிறது.
இன்று நாம் ZooKeeper பற்றி பேசுகிறோம். ஒருபுறம், இது ஒரு கட்டமைப்பாகும், மறுபுறம், இது டெவலப்பருக்கு வாழ்க்கையை எளிதாக்கும் ஒரு சேவையாகும் மற்றும் தர்க்கத்தை செயல்படுத்துவதையும் முடிந்தவரை எங்கள் செயல்முறைகளின் ஒருங்கிணைப்பையும் எளிதாக்குகிறது.
நிலையான விநியோக அமைப்பு எப்படி இருக்கும் என்பதை நினைவில் கொள்வோம். இதைத்தான் நாங்கள் பேசினோம் - HDFS, HBase. தொழிலாளர்கள் மற்றும் அடிமை செயல்முறைகளை நிர்வகிக்கும் ஒரு முதன்மை செயல்முறை உள்ளது. பணிகளை ஒருங்கிணைத்தல் மற்றும் விநியோகித்தல், தொழிலாளர்களை மறுதொடக்கம் செய்தல், புதியவற்றைத் தொடங்குதல் மற்றும் சுமைகளை விநியோகித்தல் ஆகியவற்றிற்கு அவர் பொறுப்பு.
ஒரு மேம்பட்ட விஷயம் ஒருங்கிணைப்பு சேவை, அதாவது, ஒருங்கிணைப்பு பணியை ஒரு தனி செயல்முறைக்கு நகர்த்தவும், மேலும் சில வகையான காப்புப்பிரதி அல்லது ஸ்டான்பை மாஸ்டரை இணையாக இயக்கவும், ஏனெனில் மாஸ்டர் தோல்வியடையும். மாஸ்டர் விழுந்தால், எங்கள் அமைப்பு இயங்காது. நாங்கள் காப்புப்பிரதியை இயக்குகிறோம். மாஸ்டரை காப்புப் பிரதி எடுக்க வேண்டும் என்று சில கூறுகின்றன. இது ஒருங்கிணைப்பு சேவையிலும் ஒப்படைக்கப்படலாம். ஆனால் இந்த வரைபடத்தில், தொழிலாளர்களை ஒருங்கிணைக்க மாஸ்டர் தானே பொறுப்பு; இங்கே சேவை தரவு நகலெடுக்கும் நடவடிக்கைகளை ஒருங்கிணைக்கிறது.
பொதுவாகச் செய்வது போல, அனைத்து ஒருங்கிணைப்பும் எங்கள் சேவையால் கையாளப்படும் போது மிகவும் மேம்பட்ட விருப்பமாகும். எல்லாம் செயல்படுவதை உறுதி செய்யும் பொறுப்பை அவர் ஏற்றுக்கொள்கிறார். ஏதாவது வேலை செய்யவில்லை என்றால், அதைப் பற்றி நாங்கள் கண்டுபிடித்து, இந்த சூழ்நிலையை சமாளிக்க முயற்சிப்போம். எவ்வாறாயினும், அடிமைகளுடன் எப்படியாவது தொடர்புகொண்டு சில சேவைகள் மூலம் தரவு, தகவல், செய்திகள் போன்றவற்றை அனுப்பக்கூடிய ஒரு மாஸ்டர் நமக்கு எஞ்சியிருக்கிறார்.
இன்னும் மேம்பட்ட திட்டம் உள்ளது, எங்களிடம் மாஸ்டர் இல்லாத போது, எல்லா முனைகளும் முதன்மை அடிமைகள், அவர்களின் நடத்தையில் வேறுபட்டவை. ஆனால் அவர்கள் இன்னும் ஒருவருக்கொருவர் தொடர்பு கொள்ள வேண்டும், எனவே இந்த செயல்களை ஒருங்கிணைக்க இன்னும் சில சேவைகள் உள்ளன. ஒருவேளை, இந்த கொள்கையில் செயல்படும் கசாண்ட்ரா, இந்த திட்டத்திற்கு பொருந்துகிறது.
இந்த திட்டங்களில் எது சிறப்பாக செயல்படுகிறது என்று சொல்வது கடினம். ஒவ்வொன்றும் அதன் சொந்த நன்மை தீமைகள் உள்ளன.
மாஸ்டருடன் சில விஷயங்களைப் பற்றி பயப்பட வேண்டிய அவசியமில்லை, ஏனென்றால், நடைமுறையில் காண்பிக்கிறபடி, அவர் தொடர்ந்து சேவை செய்வதற்கு அவ்வளவு எளிதில் பாதிக்கப்படுவதில்லை. இங்கே முக்கிய விஷயம் என்னவென்றால், இந்த சேவையை ஒரு தனி சக்திவாய்ந்த முனையில் ஹோஸ்ட் செய்வதற்கான சரியான தீர்வைத் தேர்ந்தெடுப்பது, இதனால் போதுமான ஆதாரங்கள் உள்ளன, இதனால் முடிந்தால், பயனர்களுக்கு அங்கு அணுகல் இல்லை, இதனால் அவர்கள் இந்த செயல்முறையை தற்செயலாக கொல்ல மாட்டார்கள். ஆனால் அதே நேரத்தில், அத்தகைய திட்டத்தில் மாஸ்டர் செயல்முறையிலிருந்து தொழிலாளர்களை நிர்வகிப்பது மிகவும் எளிதானது, அதாவது இந்த திட்டம் செயல்படுத்தும் பார்வையில் இருந்து எளிமையானது.
இந்த திட்டம் (மேலே) ஒருவேளை மிகவும் சிக்கலானது, ஆனால் மிகவும் நம்பகமானது.
முக்கிய பிரச்சனை பகுதி தோல்விகள். எடுத்துக்காட்டாக, நாம் நெட்வொர்க்கில் ஒரு செய்தியை அனுப்பும்போது, ஒருவித விபத்து ஏற்படுகிறது, மேலும் செய்தியை அனுப்பியவருக்கு அவரது செய்தி கிடைத்ததா மற்றும் பெறுநரின் பக்கத்தில் என்ன நடந்தது என்பது தெரியாது, செய்தி சரியாக செயலாக்கப்பட்டதா என்பதை அறிய முடியாது. , அதாவது அவர் எந்த உறுதிப்படுத்தலையும் பெறமாட்டார்.
அதன்படி, இந்த சூழ்நிலையை நாம் செயல்படுத்த வேண்டும். மேலும் எளிமையான விஷயம் என்னவென்றால், இந்த செய்தியை மீண்டும் அனுப்புவது மற்றும் பதில் வரும் வரை காத்திருக்க வேண்டும். இந்த வழக்கில், பெறுநரின் நிலை மாறியதா என்பது கணக்கில் எடுத்துக்கொள்ளப்படவில்லை. நாம் ஒரு செய்தியை அனுப்பலாம் மற்றும் அதே தரவை இரண்டு முறை சேர்க்கலாம்.
ZooKeeper இதுபோன்ற மறுப்புகளைச் சமாளிப்பதற்கான வழிகளை வழங்குகிறது, இது நம் வாழ்க்கையையும் எளிதாக்குகிறது.
சற்று முன்னர் குறிப்பிட்டபடி, இது பல-திரிக்கப்பட்ட நிரல்களை எழுதுவதைப் போன்றது, ஆனால் முக்கிய வேறுபாடு என்னவென்றால், வெவ்வேறு கணினிகளில் நாம் உருவாக்கும் விநியோகிக்கப்பட்ட பயன்பாடுகளில், தொடர்புகொள்வதற்கான ஒரே வழி நெட்வொர்க் ஆகும். அடிப்படையில், இது பகிரப்பட்ட ஒன்றும் இல்லாத கட்டிடக்கலை. ஒரு கணினியில் இயங்கும் ஒவ்வொரு செயல்முறையும் அல்லது சேவையும் அதன் சொந்த நினைவகம், அதன் சொந்த வட்டு, அதன் சொந்த செயலி, யாருடனும் பகிர்ந்து கொள்ளாது.
நாம் ஒரு கணினியில் பல திரிக்கப்பட்ட நிரலை எழுதினால், தரவு பரிமாற்றத்திற்கு பகிர்ந்த நினைவகத்தைப் பயன்படுத்தலாம். எங்களிடம் சூழல் சுவிட்ச் உள்ளது, செயல்முறைகள் மாறலாம். இது செயல்திறனை பாதிக்கிறது. ஒருபுறம், ஒரு கிளஸ்டரில் உள்ள நிரலில் அப்படி எதுவும் இல்லை, ஆனால் நெட்வொர்க்கில் சிக்கல்கள் உள்ளன.
அதன்படி, விநியோகிக்கப்பட்ட அமைப்புகளை எழுதும் போது எழும் முக்கிய பிரச்சனைகள் கட்டமைப்பு ஆகும். நாங்கள் ஒருவித விண்ணப்பத்தை எழுதுகிறோம். இது எளிமையானதாக இருந்தால், குறியீட்டில் உள்ள அனைத்து வகையான எண்களையும் ஹார்ட்கோட் செய்கிறோம், ஆனால் இது சிரமமாக உள்ளது, ஏனென்றால் அரை வினாடிக்கு பதிலாக ஒரு வினாடி காலக்கெடு வேண்டும் என்று நாங்கள் முடிவு செய்தால், பயன்பாட்டை மீண்டும் தொகுக்க வேண்டும் மற்றும் எல்லாவற்றையும் மீண்டும் உருட்டவும். இது ஒரு கணினியில் இருக்கும்போது, நீங்கள் அதை மறுதொடக்கம் செய்யும்போது இது ஒன்றுதான், ஆனால் எங்களிடம் பல இயந்திரங்கள் இருக்கும்போது, எல்லாவற்றையும் தொடர்ந்து நகலெடுக்க வேண்டும். பயன்பாட்டை உள்ளமைக்கக்கூடியதாக மாற்ற முயற்சிக்க வேண்டும்.
கணினி செயல்முறைகளுக்கான நிலையான உள்ளமைவைப் பற்றி இங்கே பேசுகிறோம். இது முற்றிலும் இல்லை, ஒருவேளை இயக்க முறைமையின் பார்வையில், இது எங்கள் செயல்முறைகளுக்கான நிலையான உள்ளமைவாக இருக்கலாம், அதாவது, இது வெறுமனே எடுத்து புதுப்பிக்க முடியாத உள்ளமைவாகும்.
டைனமிக் கட்டமைப்பும் உள்ளது. பறக்கும்போது நாம் மாற்ற விரும்பும் அளவுருக்கள் இவை, அவை அங்கு எடுக்கப்படும்.
இங்கே என்ன பிரச்சனை? நாங்கள் கட்டமைப்பைப் புதுப்பித்தோம், அதை உருட்டினோம், அதனால் என்ன? பிரச்சனை என்னவென்றால், ஒருபுறம் நாங்கள் கட்டமைப்பை உருட்டினோம், ஆனால் புதிய விஷயத்தை மறந்துவிட்டோம், கட்டமைப்பு அங்கேயே இருந்தது. இரண்டாவதாக, நாங்கள் வெளியிடும் போது, சில இடங்களில் உள்ளமைவு புதுப்பிக்கப்பட்டது, ஆனால் சில இடங்களில் இல்லை. ஒரு கணினியில் இயங்கும் எங்கள் பயன்பாட்டின் சில செயல்முறைகள் புதிய கட்டமைப்பிலும், எங்காவது பழையதையும் கொண்டு மறுதொடக்கம் செய்யப்பட்டன. இது எங்கள் விநியோகிக்கப்பட்ட பயன்பாடு உள்ளமைவு கண்ணோட்டத்தில் சீரற்றதாக இருக்கக்கூடும். இந்த பிரச்சனை பொதுவானது. டைனமிக் உள்ளமைவுக்கு, இது மிகவும் பொருத்தமானது, ஏனெனில் இது பறக்கும்போது மாற்றப்படலாம் என்பதைக் குறிக்கிறது.
மற்றொரு பிரச்சனை குழு உறுப்பினர். எங்களிடம் எப்போதும் சில தொழிலாளர்கள் உள்ளனர், அவர்களில் யார் உயிருடன் இருக்கிறார்கள், அவர்களில் யார் இறந்துவிட்டார்கள் என்பதை நாங்கள் எப்போதும் அறிய விரும்புகிறோம். ஒரு மாஸ்டர் இருந்தால், எந்தத் தொழிலாளர்களை வாடிக்கையாளர்களுக்குத் திருப்பிவிட முடியும் என்பதை அவர் புரிந்து கொள்ள வேண்டும், இதனால் அவர்கள் கணக்கீடுகளை இயக்கலாம் அல்லது தரவுகளுடன் வேலை செய்யலாம், எது செய்ய முடியாது. தொடர்ந்து எழும் பிரச்சனை என்னவென்றால், நமது கிளஸ்டரில் யார் வேலை செய்கிறார்கள் என்பதை நாம் தெரிந்து கொள்ள வேண்டும்.
மற்றொரு பொதுவான பிரச்சனை தலைவர் தேர்தல், யார் பொறுப்பு என்பதை அறிய வேண்டும். ஒரு உதாரணம் பிரதியெடுப்பு, எங்களிடம் சில செயல்முறைகள் இருந்தால், அது எழுதும் செயல்பாடுகளைப் பெறுகிறது மற்றும் பிற செயல்முறைகளில் அவற்றைப் பிரதிபலிக்கிறது. அவர் தலைவராக இருப்பார், எல்லோரும் அவருக்குக் கீழ்ப்படிவார்கள், அவரைப் பின்பற்றுவார்கள். ஒரு செயல்முறையைத் தேர்ந்தெடுப்பது அவசியம், இதனால் அது அனைவருக்கும் தெளிவற்றதாக இருக்கும், இதனால் இரண்டு தலைவர்கள் தேர்ந்தெடுக்கப்பட்டதாக மாறிவிடாது.
பரஸ்பர பிரத்தியேக அணுகலும் உள்ளது. இங்கே பிரச்சனை மிகவும் சிக்கலானது. மியூடெக்ஸ் போன்ற ஒரு விஷயம் உள்ளது, நீங்கள் பல-திரிக்கப்பட்ட நிரல்களை எழுதும்போது சில ஆதாரங்களை அணுக வேண்டும், எடுத்துக்காட்டாக, ஒரு நினைவக செல், வரையறுக்கப்பட்டு ஒரே ஒரு நூலால் மேற்கொள்ளப்பட வேண்டும். இங்கே ஆதாரம் இன்னும் சுருக்கமாக இருக்கலாம். எங்கள் நெட்வொர்க்கின் வெவ்வேறு முனைகளிலிருந்து வெவ்வேறு பயன்பாடுகள் கொடுக்கப்பட்ட ஆதாரத்திற்கான பிரத்யேக அணுகலை மட்டுமே பெற வேண்டும், ஆனால் எல்லோரும் அதை மாற்றவோ அல்லது அங்கு ஏதாவது எழுதவோ முடியாது. இவை பூட்டுகள் என்று அழைக்கப்படுகின்றன.
ZooKeeper இந்த சிக்கல்களை ஒரு பட்டம் அல்லது மற்றொரு அளவிற்கு தீர்க்க உங்களை அனுமதிக்கிறது. இதை எப்படி செய்ய அனுமதிக்கிறது என்பதை எடுத்துக்காட்டுகளுடன் காண்பிப்பேன்.
தடுக்கும் ஆதிநிலைகள் இல்லை. நாம் எதையாவது பயன்படுத்தத் தொடங்கும் போது, இந்த பழமையானது எந்த நிகழ்வும் நிகழும் வரை காத்திருக்காது. பெரும்பாலும், இந்த விஷயம் ஒத்திசைவற்ற முறையில் செயல்படும், இதன் மூலம் செயல்முறைகள் எதையாவது காத்திருக்கும்போது செயலிழக்காமல் இருக்க அனுமதிக்கும். இது மிகவும் பயனுள்ள விஷயம்.
அனைத்து கிளையன்ட் கோரிக்கைகளும் பொது வரிசையின் வரிசையில் செயலாக்கப்படும்.
கிளையன்ட் மாற்றப்பட்ட தரவைப் பார்ப்பதற்கு முன்பு, சில மாநிலத்தில் ஏற்படும் மாற்றங்கள், தரவுகளில் ஏற்படும் மாற்றங்கள் பற்றிய அறிவிப்பைப் பெற வாடிக்கையாளர்களுக்கு வாய்ப்பு உள்ளது.
ZooKeeper இரண்டு முறைகளில் வேலை செய்யலாம். முதலாவது ஒரு முனையில் தனியாக உள்ளது. இது சோதனைக்கு வசதியானது. இது எத்தனை சர்வர்களிலும் கிளஸ்டர் பயன்முறையில் செயல்பட முடியும். எங்களிடம் 100 இயந்திரங்கள் இருந்தால், அது 100 இயந்திரங்களில் வேலை செய்ய வேண்டிய அவசியமில்லை. ZooKeeper ஐ இயக்கக்கூடிய பல இயந்திரங்களைத் தேர்ந்தெடுத்தால் போதும். மேலும் இது அதிக கிடைக்கும் கொள்கையை வெளிப்படுத்துகிறது. இயங்கும் ஒவ்வொரு நிகழ்விலும், ZooKeeper தரவின் முழு நகலையும் சேமிக்கிறது. அவர் அதை எப்படி செய்கிறார் என்பதை பின்னர் கூறுவேன். இது தரவைத் துண்டிக்கவோ அல்லது பிரிப்பதில்லை. நம்மால் அதிகம் சேமித்து வைக்க முடியாது என்பது ஒருபுறம், இதை செய்ய வேண்டிய அவசியமில்லை என்பது ஒருபுறம். இது வடிவமைக்கப்பட்டது அல்ல, இது ஒரு தரவுத்தளம் அல்ல.
கிளையன்ட் பக்கத்தில் தரவை தற்காலிகமாக சேமிக்க முடியும். இது ஒரு நிலையான கொள்கையாகும், இதனால் நாங்கள் சேவைக்கு இடையூறு விளைவிக்க மாட்டோம் மற்றும் அதே கோரிக்கைகளுடன் அதை ஏற்ற வேண்டாம். ஒரு புத்திசாலி வாடிக்கையாளர் பொதுவாக இதைப் பற்றி அறிந்திருப்பார் மற்றும் அதை தற்காலிகமாக சேமிக்கிறார்.
உதாரணமாக, இங்கே ஏதோ மாறிவிட்டது. ஒருவித விண்ணப்பம் உள்ளது. ஒரு புதிய தலைவர் தேர்ந்தெடுக்கப்பட்டார், அவர் பொறுப்பு, எடுத்துக்காட்டாக, எழுதும் செயல்பாடுகளை செயலாக்குவதற்கு. நாங்கள் தரவைப் பிரதிபலிக்க விரும்புகிறோம். அதை ஒரு வளையத்தில் வைப்பது ஒரு தீர்வு. எங்கள் சேவையை நாங்கள் தொடர்ந்து கேள்வி கேட்கிறோம் - ஏதாவது மாறிவிட்டதா? இரண்டாவது விருப்பம் மிகவும் உகந்ததாகும். இது ஒரு வாட்ச் பொறிமுறையாகும், இது ஏதோ மாறிவிட்டது என்பதை வாடிக்கையாளர்களுக்கு தெரிவிக்க உங்களை அனுமதிக்கிறது. இது வளங்களின் அடிப்படையில் குறைந்த விலை மற்றும் வாடிக்கையாளர்களுக்கு மிகவும் வசதியான முறையாகும்.
கிளையண்ட் என்பது ZooKeeper ஐப் பயன்படுத்தும் பயனர்.
சர்வர் என்பது ZooKeeper செயல்முறையே.
ZooKeeper இல் Znode முக்கிய விஷயம். அனைத்து znodesகளும் ZooKeeper ஆல் நினைவகத்தில் சேமிக்கப்பட்டு, மரத்தின் வடிவத்தில் படிநிலை வரைபடத்தின் வடிவத்தில் ஒழுங்கமைக்கப்படுகின்றன.
இரண்டு வகையான செயல்பாடுகள் உள்ளன. முதலாவது புதுப்பித்தல்/எழுதுதல், சில செயல்பாடுகள் நமது மரத்தின் நிலையை மாற்றும் போது. மரம் பொதுவானது.
கிளையன்ட் ஒரு கோரிக்கையை முடிக்கவில்லை மற்றும் துண்டிக்கப்பட்டிருக்கலாம், ஆனால் அது ZooKeeper உடன் தொடர்பு கொள்ளும் ஒரு அமர்வை நிறுவ முடியும்.
ZooKeeper இன் தரவு மாதிரி ஒரு கோப்பு முறைமையை ஒத்திருக்கிறது. ஒரு நிலையான ரூட் உள்ளது, பின்னர் ரூட்டிலிருந்து செல்லும் அடைவுகள் வழியாக சென்றோம். பின்னர் முதல் நிலை, இரண்டாம் நிலை பட்டியல். இவை அனைத்தும் znodes ஆகும்.
ஒவ்வொரு znode லும் சில தரவைச் சேமிக்க முடியும், பொதுவாக மிகப் பெரியதாக இருக்காது, எடுத்துக்காட்டாக, 10 கிலோபைட்டுகள். மேலும் ஒவ்வொரு znode லும் குறிப்பிட்ட எண்ணிக்கையிலான குழந்தைகள் இருக்க முடியும்.
Znodes பல வகைகளில் வருகின்றன. அவை உருவாக்கப்படலாம். மேலும் ஒரு znode ஐ உருவாக்கும் போது, அது எந்த வகையைச் சார்ந்ததாக இருக்க வேண்டும் என்பதைக் குறிப்பிடுகிறோம்.
இரண்டு வகை உண்டு. முதலாவதாக எஃகு கொடி. Znode ஒரு அமர்வுக்குள் வாழ்கிறது. எடுத்துக்காட்டாக, வாடிக்கையாளர் ஒரு அமர்வை நிறுவியுள்ளார். இந்த அமர்வு உயிருடன் இருக்கும் வரை, அது இருக்கும். தேவையற்ற ஒன்றை உருவாக்காமல் இருக்க இது அவசியம். ஒரு அமர்விற்குள் தரவு ப்ரிமிட்டிவ்களை சேமிப்பது நமக்கு முக்கியமான தருணங்களுக்கும் இது ஏற்றது.
இரண்டாவது வகை வரிசைக் கொடி. இது znode க்கு செல்லும் வழியில் கவுண்டரை அதிகரிக்கிறது. எடுத்துக்காட்டாக, எங்களிடம் பயன்பாடு 1_5 உடன் ஒரு கோப்பகம் இருந்தது. நாம் முதல் முனையை உருவாக்கியபோது, அது p_1 ஐப் பெற்றது, இரண்டாவது - p_2. ஒவ்வொரு முறையும் இந்த முறையை அழைக்கும் போது, பாதையின் ஒரு பகுதியை மட்டுமே குறிக்கும் முழு பாதையையும் கடந்து செல்கிறோம், மேலும் இந்த எண் தானாக அதிகரிக்கப்படுகிறது, ஏனெனில் நாம் முனை வகை - வரிசைமுறையைக் குறிப்பிடுகிறோம்.
வழக்கமான znode. அவள் எப்போதும் வாழ்வாள், நாம் அவளுக்குச் சொல்லும் பெயரைக் கொண்டிருப்பாள்.
மற்றொரு பயனுள்ள விஷயம் வாட்ச் கொடி. நாங்கள் அதை நிறுவினால், வாடிக்கையாளர் ஒரு குறிப்பிட்ட முனைக்கு சில நிகழ்வுகளுக்கு குழுசேரலாம். இது எவ்வாறு செய்யப்படுகிறது என்பதை ஒரு உதாரணத்துடன் பின்னர் உங்களுக்குக் காண்பிப்பேன். கணுவில் உள்ள தரவு மாறியதை ZooKeeper தானே கிளையண்டிற்கு தெரிவிக்கிறது. இருப்பினும், சில புதிய தரவு வந்துள்ளதற்கு அறிவிப்புகள் உத்தரவாதம் அளிக்கவில்லை. ஏதோ மாறிவிட்டது என்று அவர்கள் வெறுமனே கூறுகிறார்கள், எனவே நீங்கள் இன்னும் தனித்தனி அழைப்புகளுடன் தரவை ஒப்பிட வேண்டும்.
நான் ஏற்கனவே கூறியது போல், தரவின் வரிசை கிலோபைட்டுகளால் தீர்மானிக்கப்படுகிறது. பெரிய உரைத் தரவை அங்கு சேமிக்க வேண்டிய அவசியமில்லை, ஏனெனில் இது ஒரு தரவுத்தளம் அல்ல, இது ஒரு செயல் ஒருங்கிணைப்பு சேவையகம்.
அமர்வுகளைப் பற்றி நான் உங்களுக்குச் சொல்கிறேன். எங்களிடம் பல சேவையகங்கள் இருந்தால், அமர்வு அடையாளங்காட்டியைப் பயன்படுத்தி சர்வரில் இருந்து சர்வருக்கு வெளிப்படையாகச் செல்லலாம். இது மிகவும் வசதியானது.
ஒவ்வொரு அமர்வுக்கும் ஒருவித காலக்கெடு உள்ளது. அந்த அமர்வின் போது கிளையன்ட் சர்வருக்கு ஏதாவது அனுப்புகிறாரா என்பதன் மூலம் ஒரு அமர்வு வரையறுக்கப்படுகிறது. காலக்கெடுவின் போது அவர் எதையும் அனுப்பவில்லை என்றால், அமர்வு செயலிழந்துவிடும், அல்லது வாடிக்கையாளர் அதை தானே மூடலாம்.
இது பல அம்சங்களைக் கொண்டிருக்கவில்லை, ஆனால் இந்த API மூலம் நீங்கள் பல்வேறு விஷயங்களைச் செய்யலாம். நாம் உருவாக்கிய அழைப்பு ஒரு znode ஐ உருவாக்கி மூன்று அளவுருக்களை எடுக்கும். இது znodeக்கான பாதையாகும், மேலும் இது ரூட்டிலிருந்து முழுமையாகக் குறிப்பிடப்பட வேண்டும். மேலும் இது நாம் அங்கு மாற்ற விரும்பும் சில தரவு. மற்றும் கொடி வகை. உருவாக்கிய பிறகு, அது znode க்கு பாதையைத் திருப்பித் தருகிறது.
இரண்டாவதாக, நீங்கள் அதை நீக்கலாம். இங்கே தந்திரம் என்னவென்றால், இரண்டாவது அளவுரு, znodeக்கான பாதைக்கு கூடுதலாக, பதிப்பைக் குறிப்பிடலாம். அதன்படி, நாம் மாற்றிய அதன் பதிப்பு உண்மையில் உள்ளதற்குச் சமமானதாக இருந்தால் அந்த znode நீக்கப்படும்.
இந்த பதிப்பை நாங்கள் சரிபார்க்க விரும்பவில்லை என்றால், "-1" வாதத்தை வெறுமனே அனுப்புவோம்.
மூன்றாவதாக, இது ஒரு znode இருப்பதை சரிபார்க்கிறது. கணு இருந்தால் சரி, இல்லையெனில் தவறு என வழங்கும்.
பின்னர் கொடி கடிகாரம் தோன்றும், இது இந்த முனையை கண்காணிக்க உங்களை அனுமதிக்கிறது.
இந்த கொடியை இல்லாத முனையில் கூட அமைக்கலாம் மற்றும் அது தோன்றும் போது அறிவிப்பைப் பெறலாம். இதுவும் பயனுள்ளதாக இருக்கும்.
இன்னும் இரண்டு சவால்கள் உள்ளன தரவு பெறவும். நாம் znode வழியாக தரவைப் பெற முடியும் என்பது தெளிவாகிறது. நீங்கள் கொடி கடிகாரத்தையும் பயன்படுத்தலாம். இந்த வழக்கில், முனை இல்லை என்றால் அது நிறுவப்படாது. எனவே, அது இருப்பதை நீங்கள் புரிந்து கொள்ள வேண்டும், பின்னர் தரவைப் பெறுங்கள்.
கூட உள்ளது செட் டேட்டா. இங்கே நாம் பதிப்பை அனுப்புகிறோம். இதை நாம் அனுப்பினால், ஒரு குறிப்பிட்ட பதிப்பின் znode இல் உள்ள தரவு புதுப்பிக்கப்படும்.
இந்த காசோலையை விலக்க "-1" ஐயும் குறிப்பிடலாம்.
மற்றொரு பயனுள்ள முறை குழந்தைகளைப் பெறுங்கள். அதற்குச் சொந்தமான அனைத்து znodes களின் பட்டியலையும் நாம் பெறலாம். கொடி கடிகாரத்தை அமைப்பதன் மூலம் இதை நாம் கண்காணிக்கலாம்.
மற்றும் முறை ஒத்திசைக்க அனைத்து மாற்றங்களையும் ஒரே நேரத்தில் அனுப்ப அனுமதிக்கிறது.
வழக்கமான நிரலாக்கத்துடன் நாங்கள் ஒப்புமைகளை வரைந்தால், நீங்கள் எழுதுவது, வட்டில் எதையாவது எழுதுவது போன்ற முறைகளைப் பயன்படுத்தினால், அது உங்களுக்குப் பதிலைத் தந்த பிறகு, நீங்கள் வட்டில் தரவை எழுதியுள்ளீர்கள் என்பதற்கு எந்த உத்தரவாதமும் இல்லை. இயக்க முறைமை அனைத்தும் எழுதப்பட்டதாக நம்பும்போது கூட, வட்டில் உள்ள வழிமுறைகள் உள்ளன, அங்கு செயல்முறை இடையகங்களின் அடுக்குகள் வழியாக செல்கிறது, அதன் பிறகுதான் தரவு வட்டில் வைக்கப்படுகிறது.
பெரும்பாலும் ஒத்திசைவற்ற அழைப்புகள் பயன்படுத்தப்படுகின்றன. இது வாடிக்கையாளர் வெவ்வேறு கோரிக்கைகளுக்கு இணையாக வேலை செய்ய அனுமதிக்கிறது. நீங்கள் ஒத்திசைவான அணுகுமுறையைப் பயன்படுத்தலாம், ஆனால் அது குறைவான உற்பத்தித் திறன் கொண்டது.
நாங்கள் பேசிய இரண்டு செயல்பாடுகள் புதுப்பித்தல்/எழுதுதல், இது தரவை மாற்றும். இவை உருவாக்குதல், தரவுகளை அமைத்தல், ஒத்திசைத்தல், நீக்குதல். மற்றும் வாசிக்க உள்ளது உள்ளது, getData, getChildren.
விநியோகிக்கப்பட்ட அமைப்பில் பணிபுரிய நீங்கள் எவ்வாறு பழமையானவற்றை உருவாக்கலாம் என்பதற்கான சில எடுத்துக்காட்டுகள். எடுத்துக்காட்டாக, ஏதோவொன்றின் உள்ளமைவுடன் தொடர்புடையது. ஒரு புதிய தொழிலாளி தோன்றினார். இயந்திரத்தைச் சேர்த்து, செயல்முறையைத் தொடங்கினோம். மேலும் பின்வரும் மூன்று கேள்விகள் உள்ளன. உள்ளமைவுக்காக ZooKeeper ஐ எப்படி வினவுகிறது? நாம் கட்டமைப்பை மாற்ற விரும்பினால், அதை எப்படி மாற்றுவது? நாங்கள் அதை மாற்றிய பிறகு, எங்களிடம் இருந்த தொழிலாளர்கள் அதை எவ்வாறு பெறுகிறார்கள்?
ZooKeeper இதை ஒப்பீட்டளவில் எளிதாக்குகிறது. உதாரணமாக, எங்கள் znode மரம் உள்ளது. எங்கள் பயன்பாட்டிற்கு இங்கே ஒரு முனை உள்ளது, அதில் கூடுதல் முனையை உருவாக்குகிறோம், அதில் உள்ளமைவிலிருந்து தரவைக் கொண்டுள்ளது. இவை தனி அளவுருக்களாக இருக்கலாம் அல்லது இல்லாமல் இருக்கலாம். அளவு சிறியதாக இருப்பதால், உள்ளமைவு அளவும் பொதுவாக சிறியதாக இருக்கும், எனவே அதை இங்கே சேமிப்பது மிகவும் சாத்தியம்.
நீங்கள் முறையைப் பயன்படுத்துகிறீர்கள் தரவு பெறவும் முனையிலிருந்து தொழிலாளிக்கான உள்ளமைவைப் பெற. உண்மை என அமைக்கவும். சில காரணங்களால் இந்த முனை இல்லை என்றால், அது தோன்றும் போது அல்லது அது மாறும் போது அதைப் பற்றி எங்களுக்குத் தெரிவிக்கப்படும். ஏதாவது மாறிவிட்டது என்பதை நாம் அறிய விரும்பினால், அதை உண்மையாக அமைக்கிறோம். இந்த முனையில் உள்ள தரவு மாறினால், அதைப் பற்றி நாம் அறிவோம்.
செட் டேட்டா. நாங்கள் தரவை அமைக்கிறோம், "-1" ஐ அமைக்கிறோம், அதாவது நாங்கள் பதிப்பைச் சரிபார்க்கவில்லை, எங்களிடம் எப்போதும் ஒரு உள்ளமைவு இருப்பதாக நாங்கள் கருதுகிறோம், பல உள்ளமைவுகளை நாங்கள் சேமிக்கத் தேவையில்லை. நீங்கள் நிறைய சேமிக்க வேண்டும் என்றால், நீங்கள் மற்றொரு நிலை சேர்க்க வேண்டும். இங்கே ஒன்று மட்டுமே இருப்பதாக நாங்கள் நம்புகிறோம், எனவே சமீபத்திய ஒன்றை மட்டும் புதுப்பிப்போம், எனவே பதிப்பைச் சரிபார்க்க மாட்டோம். இந்த நேரத்தில், முன்பு குழுசேர்ந்த அனைத்து வாடிக்கையாளர்களும் இந்த முனையில் ஏதோ மாற்றம் ஏற்பட்டுள்ளதாக அறிவிப்பைப் பெறுகின்றனர். அவர்கள் அதைப் பெற்ற பிறகு, அவர்கள் மீண்டும் தரவைக் கோர வேண்டும். அறிவிப்பு என்னவென்றால், அவர்கள் தரவைப் பெறவில்லை, ஆனால் மாற்றங்களின் அறிவிப்பை மட்டுமே பெறுகிறார்கள். இதற்குப் பிறகு அவர்கள் புதிய தரவைக் கேட்க வேண்டும்.
பழமையானவற்றைப் பயன்படுத்துவதற்கான இரண்டாவது விருப்பம் குழு உறுப்பினர். எங்களிடம் விநியோகிக்கப்பட்ட விண்ணப்பம் உள்ளது, ஏராளமான தொழிலாளர்கள் உள்ளனர், அவர்கள் அனைவரும் இடத்தில் இருக்கிறார்கள் என்பதை நாங்கள் புரிந்து கொள்ள விரும்புகிறோம். எனவே, அவர்கள் எங்கள் விண்ணப்பத்தில் வேலை செய்கிறார்கள் என்று தங்களைப் பதிவு செய்ய வேண்டும். மேலும் தற்போது எங்களிடம் உள்ள அனைத்து செயலில் உள்ள தொழிலாளர்களைப் பற்றியும் முதன்மை செயல்முறை அல்லது வேறு எங்காவது கண்டுபிடிக்க விரும்புகிறோம்.
இதை எப்படி செய்வது? பயன்பாட்டிற்கு, நாங்கள் ஒரு தொழிலாளர் முனையை உருவாக்கி, உருவாக்கும் முறையைப் பயன்படுத்தி அங்கு ஒரு துணைநிலையைச் சேர்க்கிறோம். ஸ்லைடில் பிழை உள்ளது. இங்கே உங்களுக்குத் தேவை தொடர்ச்சியான குறிப்பிடவும், பின்னர் அனைத்து தொழிலாளர்களும் ஒவ்வொருவராக உருவாக்கப்படுவார்கள். மேலும், இந்த முனையின் குழந்தைகளைப் பற்றிய அனைத்து தரவையும் கோரும் பயன்பாடு, தற்போதுள்ள அனைத்து செயலில் உள்ள தொழிலாளர்களையும் பெறுகிறது.
ஜாவா குறியீட்டில் இதை எப்படிச் செய்யலாம் என்பதற்கு இது மிகவும் பயங்கரமான செயல்பாடாகும். முக்கிய முறையுடன் முடிவில் இருந்து ஆரம்பிக்கலாம். இது எங்கள் வகுப்பு, அதன் முறையை உருவாக்குவோம். முதல் வாதமாக நாம் ஹோஸ்ட்டைப் பயன்படுத்துகிறோம், நாம் எங்கு இணைக்கிறோம், அதாவது அதை ஒரு வாதமாக அமைக்கிறோம். இரண்டாவது வாதம் குழுவின் பெயர்.
இணைப்பு எவ்வாறு நிகழ்கிறது? இது பயன்படுத்தப்படும் API இன் எளிய எடுத்துக்காட்டு. இங்கே எல்லாம் ஒப்பீட்டளவில் எளிமையானது. ஒரு நிலையான வகுப்பு ZooKeeper உள்ளது. நாங்கள் அதற்கு ஹோஸ்ட்களை அனுப்புகிறோம். மற்றும் காலக்கெடுவை அமைக்கவும், எடுத்துக்காட்டாக, 5 வினாடிகள். மேலும் எங்களிடம் கனெக்ட் சிக்னல் என்ற உறுப்பினர் இருக்கிறார். முக்கியமாக, கடத்தப்பட்ட பாதையில் ஒரு குழுவை உருவாக்குகிறோம். ஏதாவது எழுதப்பட்டிருக்கலாம் என்றாலும் நாங்கள் அங்கு தரவை எழுதுவதில்லை. மேலும் இங்குள்ள முனை நிலையான வகையைச் சேர்ந்தது. அடிப்படையில், இது எல்லா நேரத்திலும் இருக்கும் ஒரு சாதாரண வழக்கமான முனை. இங்குதான் அமர்வு உருவாக்கப்பட்டது. இது வாடிக்கையாளரின் செயல்பாடாகும். அமர்வு உயிருடன் இருப்பதைக் குறிக்கும் வகையில் எங்கள் வாடிக்கையாளர் அவ்வப்போது செய்திகளை அனுப்புவார். நாங்கள் அமர்வை முடிக்கும்போது, மூடு என்று அழைக்கிறோம், அவ்வளவுதான், அமர்வு வீழ்ச்சியடைகிறது. இது நமக்கு ஏதாவது குறைய நேர்ந்தால், ZooKeeper அதைக் கண்டுபிடித்து அமர்வைத் துண்டித்துவிடுவார்.
ஒரு வளத்தை எவ்வாறு பூட்டுவது? இங்கே எல்லாம் இன்னும் கொஞ்சம் சிக்கலானது. எங்களிடம் தொழிலாளர்கள் உள்ளனர், நாங்கள் பூட்ட விரும்பும் சில ஆதாரங்கள் உள்ளன. இதைச் செய்ய, நாங்கள் ஒரு தனி முனையை உருவாக்குகிறோம், எடுத்துக்காட்டாக, lock1 என அழைக்கப்படுகிறது. எங்களால் அதை உருவாக்க முடிந்தால், இங்கே ஒரு பூட்டு கிடைத்தது. எங்களால் அதை உருவாக்க முடியவில்லை என்றால், தொழிலாளி இங்கிருந்து getData பெற முயற்சிக்கிறார், மேலும் கணு ஏற்கனவே உருவாக்கப்பட்டுவிட்டதால், இங்கே ஒரு கண்காணிப்பாளரை வைத்து, இந்த முனையின் நிலை மாறும் தருணத்தில், அதைப் பற்றி அறிந்து கொள்வோம். நாம் அதை மீண்டும் உருவாக்க நேரம் முயற்சி செய்யலாம். நாங்கள் இந்த முனையை எடுத்தால், இந்த பூட்டை எடுத்தால், இனி நமக்கு பூட்டு தேவைப்படாத பிறகு, அதைக் கைவிடுவோம், ஏனெனில் முனை அமர்வுக்குள் மட்டுமே உள்ளது. அதன்படி, அது மறைந்துவிடும். மற்றொரு கிளையன்ட், மற்றொரு அமர்வின் கட்டமைப்பிற்குள், இந்த முனையில் பூட்டை எடுக்க முடியும், அல்லது மாறாக, ஏதோ மாறிவிட்டது என்ற அறிவிப்பைப் பெறுவார், மேலும் அவர் அதை சரியான நேரத்தில் செய்ய முயற்சி செய்யலாம்.
முக்கிய தலைவரை நீங்கள் எவ்வாறு தேர்வு செய்யலாம் என்பதற்கு மற்றொரு எடுத்துக்காட்டு. இது இன்னும் கொஞ்சம் சிக்கலானது, ஆனால் ஒப்பீட்டளவில் எளிமையானது. இங்கே என்ன நடந்து கொண்டிருக்கின்றது? அனைத்து தொழிலாளர்களையும் ஒருங்கிணைக்கும் ஒரு முக்கிய முனை உள்ளது. தலைவரைப் பற்றிய தகவல்களைப் பெற முயற்சிக்கிறோம். இது வெற்றிகரமாக நடந்தால், அதாவது எங்களுக்கு சில தரவு கிடைத்தால், எங்கள் தொழிலாளி இந்த தலைவரைப் பின்தொடரத் தொடங்குகிறார். ஏற்கனவே ஒரு தலைவர் இருப்பதாக அவர் நம்புகிறார்.
சில காரணங்களால் தலைவர் இறந்துவிட்டால், எடுத்துக்காட்டாக, கீழே விழுந்தால், நாங்கள் ஒரு புதிய தலைவரை உருவாக்க முயற்சிக்கிறோம். நாம் வெற்றி பெற்றால், நமது தொழிலாளி தலைவராவார். இந்த நேரத்தில் யாராவது ஒரு புதிய தலைவரை உருவாக்க முடிந்தால், அது யார் என்பதைப் புரிந்துகொண்டு அவரைப் பின்தொடர முயற்சிக்கிறோம்.
இங்கே மந்தை விளைவு என்று சொல்லப்படுவது எழுகிறது, அதாவது மந்தை விளைவு, ஏனெனில் ஒரு தலைவர் இறந்தால், காலப்போக்கில் முதலில் இருப்பவர் தலைவராவார்.
ஒரு வளத்தை கைப்பற்றும் போது, நீங்கள் சற்று வித்தியாசமான அணுகுமுறையைப் பயன்படுத்த முயற்சி செய்யலாம், இது பின்வருமாறு. எடுத்துக்காட்டாக, நாங்கள் ஒரு பூட்டைப் பெற விரும்புகிறோம், ஆனால் ஹெர்ட் விளைவு இல்லாமல். பூட்டுடன் ஏற்கனவே இருக்கும் முனைக்கான அனைத்து நோட் ஐடிகளின் பட்டியலையும் எங்கள் பயன்பாடு கோருகிறது. அதற்கு முன் நாம் ஒரு பூட்டை உருவாக்கிய முனை நாம் பெற்ற தொகுப்பில் மிகச் சிறியதாக இருந்தால், இதன் பொருள் நாம் பூட்டைப் பிடித்தோம். நாங்கள் ஒரு பூட்டைப் பெற்றுள்ளோமா என்று சரிபார்க்கிறோம். ஒரு காசோலையாக, புதிய பூட்டை உருவாக்கும் போது நாம் பெற்ற ஐடி குறைவாக இருக்கும் என்ற நிபந்தனை இருக்கும். நாங்கள் அதைப் பெற்றால், நாங்கள் மேலும் வேலை செய்கிறோம்.
எங்கள் பூட்டை விட சிறியதாக ஒரு குறிப்பிட்ட ஐடி இருந்தால், இந்த நிகழ்வில் ஒரு கண்காணிப்பாளரை வைத்து, ஏதாவது மாறும் வரை அறிவிப்புக்காக காத்திருக்கிறோம். அதாவது, இந்த பூட்டை நாங்கள் பெற்றோம். அது விழும் வரை, நாங்கள் குறைந்தபட்ச ஐடியாக மாற மாட்டோம் மற்றும் குறைந்தபட்ச பூட்டைப் பெற மாட்டோம், இதனால் நாங்கள் உள்நுழைய முடியும். இந்த நிபந்தனை பூர்த்தி செய்யப்படாவிட்டால், நாங்கள் உடனடியாக இங்கு சென்று இந்த பூட்டை மீண்டும் பெற முயற்சிக்கிறோம், ஏனெனில் இந்த நேரத்தில் ஏதாவது மாறியிருக்கலாம்.
ZooKeeper எதைக் கொண்டுள்ளது? 4 முக்கிய விஷயங்கள் உள்ளன. இது செயலாக்க செயல்முறைகள் - கோரிக்கை. மேலும் ZooKeeper அணு ஒளிபரப்பு. அனைத்து செயல்பாடுகளும் பதிவுசெய்யப்பட்ட கமிட் லாக் உள்ளது. மேலும் இன்-மெமரி ரெப்லிகேட்டட் டிபியே, அதாவது இந்த முழு மரமும் சேமிக்கப்படும் தரவுத்தளமே.
அனைத்து எழுதும் செயல்பாடுகளும் கோரிக்கை செயலி வழியாகவே செல்கின்றன என்பது குறிப்பிடத்தக்கது. மேலும் வாசிப்புச் செயல்பாடுகள் நேரடியாக இன்-மெமரி தரவுத்தளத்திற்குச் செல்லும்.
தரவுத்தளமே முழுமையாக நகலெடுக்கப்படுகிறது. ZooKeeper இன் அனைத்து நிகழ்வுகளும் தரவின் முழுமையான நகலை சேமிக்கின்றன.
செயலிழப்புக்குப் பிறகு தரவுத்தளத்தை மீட்டெடுக்க, ஒரு உறுதிப் பதிவு உள்ளது. நிலையான நடைமுறை என்னவென்றால், தரவு நினைவகத்தில் நுழைவதற்கு முன்பு, அது செயலிழந்தால், இந்த பதிவை மீண்டும் இயக்க முடியும் மற்றும் கணினி நிலையை மீட்டெடுக்க முடியும். தரவுத்தளத்தின் அவ்வப்போது ஸ்னாப்ஷாட்களும் பயன்படுத்தப்படுகின்றன.
ZooKeeper அணு ஒலிபரப்பு என்பது பிரதி தரவுகளை பராமரிக்க பயன்படும் ஒரு விஷயம்.
ZAB ஆனது ZooKeeper முனையின் பார்வையில் இருந்து ஒரு தலைவரை உள்நாட்டில் தேர்ந்தெடுக்கிறது. மற்ற முனைகள் அவளைப் பின்தொடர்பவர்களாக மாறி அவளிடமிருந்து சில செயல்களை எதிர்பார்க்கின்றன. அவர்கள் உள்ளீடுகளைப் பெற்றால், அவை அனைத்தையும் தலைவருக்கு அனுப்புவார்கள். அவர் முதலில் எழுதும் செயல்பாட்டைச் செய்கிறார், பின்னர் அவரைப் பின்தொடர்பவர்களுக்கு என்ன மாறிவிட்டது என்பதைப் பற்றிய செய்தியை அனுப்புகிறார். இது, உண்மையில், அணுவாக செய்யப்பட வேண்டும், அதாவது முழு விஷயத்தின் பதிவு மற்றும் ஒளிபரப்பு செயல்பாடு அணுவாக செய்யப்பட வேண்டும், இதன் மூலம் தரவு நிலைத்தன்மைக்கு உத்தரவாதம் அளிக்கிறது.
இது எழுதும் கோரிக்கைகளை மட்டுமே செயல்படுத்துகிறது. அதன் முக்கிய பணி, இது செயல்பாட்டை ஒரு பரிவர்த்தனை புதுப்பிப்பாக மாற்றுவதாகும். இது பிரத்தியேகமாக உருவாக்கப்பட்ட கோரிக்கை.
அதே செயல்பாட்டிற்கான புதுப்பிப்புகளின் ஐடிம்போடென்சி உத்தரவாதம் அளிக்கப்படுகிறது என்பது இங்கே கவனிக்கத்தக்கது. அது என்ன? இந்த விஷயம், இரண்டு முறை செயல்படுத்தப்பட்டால், அதே நிலை இருக்கும், அதாவது கோரிக்கையே மாறாது. இது செய்யப்பட வேண்டும், இதனால் செயலிழப்பு ஏற்பட்டால், நீங்கள் செயல்பாட்டை மறுதொடக்கம் செய்யலாம், இதன் மூலம் இந்த நேரத்தில் வீழ்ச்சியடைந்த மாற்றங்களைத் திரும்பப் பெறலாம். இந்த வழக்கில், கணினியின் நிலை ஒரே மாதிரியாக மாறும், அதாவது ஒரே மாதிரியான தொடர், எடுத்துக்காட்டாக, புதுப்பிப்பு செயல்முறைகள், கணினியின் வெவ்வேறு இறுதி நிலைகளுக்கு வழிவகுத்தது.
ஆதாரம்: www.habr.com