RabbitMQ එදිරිව Kafka: වැරදි ඉවසීම සහ පොකුරු වල ඉහළ පවතින බව

RabbitMQ එදිරිව Kafka: වැරදි ඉවසීම සහ පොකුරු වල ඉහළ පවතින බව

වැරදි ඉවසීම සහ ඉහළ ලබා ගැනීමේ හැකියාව විශාල මාතෘකා වේ, එබැවින් අපි RabbitMQ සහ Kafka සඳහා වෙනම ලිපි වෙන් කරන්නෙමු. මෙම ලිපිය RabbitMQ ගැන වන අතර මීළඟ ලිපිය RabbitMQ හා සසඳන විට Kafka ගැන වේ. මෙය දිගු ලිපියකි, එබැවින් ඔබට පහසු වන්න.

වැරදි ඉවසීම, අනුකූලතාව සහ ඉහළ උපයෝගිතා (HA) උපාය මාර්ග සහ එක් එක් උපාය මාර්ගයක් සිදු කරන ගනුදෙනු දෙස බලමු. RabbitMQ නෝඩ් පොකුරක් මත ධාවනය කළ හැකි අතර පසුව එය බෙදා හරින ලද පද්ධතියක් ලෙස වර්ගීකරණය කරයි. බෙදා හරින ලද පද්ධති සම්බන්ධයෙන් ගත් කල, අපි බොහෝ විට අනුකූලතාව සහ ලබා ගත හැකි බව ගැන කතා කරමු.

පද්ධතියක් අසාර්ථක වූ විට එය හැසිරෙන ආකාරය මෙම සංකල්ප විස්තර කරයි. ජාල සම්බන්ධතා බිඳවැටීම, සේවාදායකයේ අසාර්ථකත්වය, දෘඪ තැටි අසාර්ථක වීම, කසළ එකතු කිරීම, පැකට් අහිමි වීම හෝ ජාල සම්බන්ධතා මන්දගාමී වීම හේතුවෙන් සේවාදායකය තාවකාලිකව නොලැබීම. මේ සියල්ල දත්ත නැතිවීම හෝ ගැටුම් ඇති විය හැක. සියලුම අසාර්ථක අවස්ථාවන් සඳහා සම්පූර්ණයෙන්ම අනුකූල (දත්ත නැතිවීමක්, දත්ත අපසරනයක් නොමැති) සහ ලබා ගත හැකි (කියවීම සහ ලිවීම් පිළිගනු ඇත) පද්ධතියක් සැකසීම පාහේ කළ නොහැක්කක් බව පෙනේ.

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

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

තනි නෝඩ් ප්රත්යාස්ථතා ප්රාථමික

ඔරොත්තු දෙන පෝලිම්/මාර්ගගත කිරීම

RabbitMQ හි පෝලිම් වර්ග දෙකක් තිබේ: කල් පවතින සහ කල් පවතින ඒවා. සියලුම පෝලිම් Mnesia දත්ත ගබඩාවේ සුරකිනු ලැබේ. කල්පවත්නා පෝලිම් නෝඩ් ආරම්භයේදී නැවත ප්‍රචාරණය කරනු ලබන අතර එමඟින් නැවත ආරම්භ කිරීම්, පද්ධති බිඳවැටීම් හෝ සේවාදායක බිඳවැටීම් (දත්ත පවතින තාක්) නොනැසී පවතී. මෙයින් අදහස් කරන්නේ ඔබ මාර්ගගත කිරීම (හුවමාරු කිරීම) සහ පෝලිම් ප්‍රත්‍යස්ථ බව ප්‍රකාශ කරන තාක් කල්, පෝලිම්/මාර්ගගත යටිතල පහසුකම් නැවත සබැඳිව පැමිණෙන බවයි.

නෝඩය නැවත ආරම්භ කරන විට වාෂ්පශීලී පෝලිම් සහ මාර්ගගත කිරීම් ඉවත් කරනු ලැබේ.

ස්ථිර පණිවිඩ

පෝලිමක් කල් පවතින නිසා එහි සියලුම පණිවිඩ නෝඩ් නැවත ආරම්භ කිරීමෙන් නොනැසී පවතිනු ඇතැයි අදහස් නොවේ. ප්‍රකාශකයා විසින් සකසන ලද පණිවිඩ පමණි තිරසාර (ස්ථාවර). අඛණ්ඩ පණිවිඩ තැරැව්කරු මත අමතර බරක් ඇති කරයි, නමුත් පණිවිඩ නැතිවීම පිළිගත නොහැකි නම්, වෙනත් විකල්පයක් නොමැත.

RabbitMQ එදිරිව Kafka: වැරදි ඉවසීම සහ පොකුරු වල ඉහළ පවතින බව
සහල්. 1. තිරසාර අනුකෘතිය

පෝලිම් දර්පණය සමඟ පොකුරු කිරීම

තැරැව්කරුවකු අහිමි වීමෙන් බේරීමට, අපට අතිරික්තය අවශ්ය වේ. අපට RabbitMQ නෝඩ් කිහිපයක් පොකුරකට ඒකාබද්ධ කළ හැකි අතර, පසුව බහු නෝඩ් අතර පෝලිම් ප්‍රතිවර්තනය කිරීමෙන් අමතර අතිරික්තයක් එක් කළ හැක. මේ ආකාරයෙන්, එක් නෝඩයක් අසමත් වුවහොත්, අපට දත්ත අහිමි නොවන අතර පවතිනු ඇත.

පෝලිම් දර්පණය:

  • එක් ප්‍රධාන පෝලිමක් (මාස්ටර්), එය සියලුම ලිවීමේ සහ කියවීමේ විධාන ලබා ගනී
  • ප්‍රධාන පෝලිමෙන් සියලුම පණිවිඩ සහ පාර-දත්ත ලැබෙන දර්පණ එකක් හෝ කිහිපයක්. මෙම දර්පණ විශාලනය සඳහා නොවේ, නමුත් සම්පූර්ණයෙන්ම අතිරික්තය සඳහා වේ.

RabbitMQ එදිරිව Kafka: වැරදි ඉවසීම සහ පොකුරු වල ඉහළ පවතින බව
සහල්. 2. පෝලිම් දර්පණය

දර්පණය සුදුසු ප්‍රතිපත්තිය මගින් සකසා ඇත. එය තුළ ඔබට අනුකරණ සංගුණකය සහ පෝලිම පිහිටා තිබිය යුතු නෝඩ් පවා තෝරා ගත හැකිය. උදාහරණ:

  • ha-mode: all
  • ha-mode: exactly, ha-params: 2 (එක් ස්වාමියා සහ එක් කැඩපතක්)
  • ha-mode: nodes, ha-params: rabbit@node1, rabbit@node2

ප්‍රකාශක තහවුරු කිරීම

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

අසාර්ථක පෝලිම

තැරැව්කරුවෙකු ඉවත් වූ විට හෝ බිඳ වැටුණු විට, එම නෝඩයේ ඇති සියලුම පෝලිම් නායකයින් (ස්වාමිවරුන්) එය සමඟ කඩා වැටේ. එවිට පොකුර සෑම ස්වාමියාගේම පැරණිතම දර්පණය තෝරා නව මාස්ටර් ලෙස ප්‍රවර්ධනය කරයි.

RabbitMQ එදිරිව Kafka: වැරදි ඉවසීම සහ පොකුරු වල ඉහළ පවතින බව
සහල්. 3. බහු දර්පණ පෝලිම් සහ ඒවායේ ප්‍රතිපත්ති

Broker 3 අඩු වෙනවා. තැරැව්කාර 2 හි Queue C දර්පණය ප්‍රධාන ලෙස ප්‍රවර්ධනය වෙමින් පවතින බව සලකන්න. තැරැව්කරු 1 හි පෝලිම C සඳහා නව කැඩපතක් නිර්මාණය කර ඇති බව ද සලකන්න. RabbitMQ සෑම විටම ඔබේ ප්‍රතිපත්තිවල දක්වා ඇති අනුවර්තන සාධකය පවත්වා ගැනීමට උත්සාහ කරයි.

RabbitMQ එදිරිව Kafka: වැරදි ඉවසීම සහ පොකුරු වල ඉහළ පවතින බව
සහල්. 4. තැරැව්කරු 3 අසමත් වීම, C පෝලිම අසාර්ථක වීමට හේතු වේ

මීළඟ තැරැව්කරු 1 වැටේ! අපට ඉතිරිව ඇත්තේ එක් තැරැව්කරුවකු පමණි. පෝලිම B දර්පණය ප්‍රධාන ලෙස උසස් කෙරේ.

RabbitMQ එදිරිව Kafka: වැරදි ඉවසීම සහ පොකුරු වල ඉහළ පවතින බව
. 5

අපි තැරැව්කරු 1 ආපසු ලබා දී ඇත. තැරැව්කරුගේ අලාභය සහ ප්‍රතිසාධනය තුළ දත්ත කෙතරම් හොඳින් පැවතුනද, නැවත ආරම්භ කිරීමේදී පිළිබිඹු කරන ලද පෝලිම් පණිවිඩ සියල්ල ඉවත දමනු ලැබේ. මෙය සැලකිල්ලට ගැනීම වැදගත් වන්නේ ප්රතිවිපාක ඇති බැවිනි. අපි ඉක්මනින්ම මෙම ඇඟවීම් දෙස බලමු. එබැවින් තැරැව්කරු 1 දැන් නැවතත් පොකුරේ සාමාජිකයෙකු වන අතර, පොකුර ප්‍රතිපත්තිවලට අනුකූල වීමට උත්සාහ කරන අතර එම නිසා තැරැව්කරු 1 මත දර්පණ නිර්මාණය කරයි.

මෙම අවස්ථාවෙහිදී, බ්‍රෝකර් 1 හි අලාභය සම්පූර්ණ විය, දත්ත මෙන්ම, දර්පණය නොකළ පෝලිම B සම්පූර්ණයෙන්ම නැති විය.

RabbitMQ එදිරිව Kafka: වැරදි ඉවසීම සහ පොකුරු වල ඉහළ පවතින බව
සහල්. 6. තැරැව්කරු 1 නැවත සේවයට පැමිණේ

තැරැව්කරු 3 නැවත සබැඳිව ඇත, එබැවින් A සහ ​​B පෝලිම් ඔවුන්ගේ HA ප්‍රතිපත්ති තෘප්තිමත් කිරීම සඳහා එය මත සාදන ලද දර්පණ නැවත ලබා ගනී. නමුත් දැන් සියලුම ප්‍රධාන පෝලිම් එක නෝඩයක ඇත! මෙය සුදුසු නොවේ, නෝඩ් අතර ඒකාකාර බෙදා හැරීම වඩා හොඳය. අවාසනාවකට මෙන්, ස්වාමිවරුන් නැවත සමතුලිත කිරීම සඳහා මෙහි බොහෝ විකල්ප නොමැත. අපි මුලින්ම පෝලිම් සමමුහුර්තකරණය දෙස බැලිය යුතු නිසා අපි පසුව මෙම ගැටලුව වෙත ආපසු එන්නෙමු.

RabbitMQ එදිරිව Kafka: වැරදි ඉවසීම සහ පොකුරු වල ඉහළ පවතින බව
සහල්. 7. තැරැව්කරු 3 නැවත සේවයට පැමිණේ. සියලුම ප්‍රධාන පෝලිම් එක් නෝඩයක් මත!

එබැවින් දර්පණ අතිරික්තතාව සහ දෝෂ ඉවසීම සපයන්නේ කෙසේද යන්න පිළිබඳ අදහසක් දැන් ඔබට තිබිය යුතුය. මෙය තනි නෝඩයක් අසමත් වූ විට ලබා ගත හැකි බව සහතික කරන අතර දත්ත නැතිවීමෙන් ආරක්ෂා කරයි. නමුත් අපි තවම අවසන් කර නැත, මන්ද යථාර්ථයේ දී එය වඩා සංකීර්ණ ය.

සමමුහුර්ත කරන්න

නව කැඩපතක් නිර්මාණය කරන විට, සියලුම නව පණිවිඩ සෑම විටම මෙම කැඩපතට සහ වෙනත් ඕනෑම දෙයකට අනුවර්තනය වේ. ප්‍රධාන පෝලිමේ පවතින දත්ත සම්බන්ධයෙන්, අපට එය නව දර්පණයකට අනුකරණය කළ හැකිය, එය මාස්ටර්ගේ සම්පූර්ණ පිටපතක් බවට පත්වේ. නව පණිවිඩ වලිගයට පැමිණීම සහ පවතින පණිවිඩ ප්‍රධාන පෝලිමේ ප්‍රධානියා හැර යාමත් සමඟ, පවතින පණිවිඩ ප්‍රතිනිර්මාණය නොකිරීමට සහ ප්‍රධාන පෝලිම සහ නව කැඩපත නියමිත වේලාවට අභිසාරී වීමට ඉඩ හැරීමට ද අපට හැකිය.

මෙම සමමුහුර්තකරණය ස්වයංක්‍රීයව හෝ අතින් සිදු කෙරෙන අතර පෝලිම් ප්‍රතිපත්තියක් භාවිතයෙන් කළමනාකරණය කෙරේ. අපි උදාහරණයක් බලමු.

අපට කැඩපත් පෝලිම් දෙකක් තිබේ. A පෝලිම ස්වයංක්‍රීයව සමමුහුර්ත වන අතර B පෝලිම අතින් සමමුහුර්ත වේ. පෝලිම් දෙකේම පණිවිඩ දහයක් අඩංගු වේ.

RabbitMQ එදිරිව Kafka: වැරදි ඉවසීම සහ පොකුරු වල ඉහළ පවතින බව
සහල්. 8. විවිධ සමමුහුර්තකරණ මාදිලි සහිත පෝලිම් දෙකක්

දැන් අපිට Broker 3 නැති වෙනවා.

RabbitMQ එදිරිව Kafka: වැරදි ඉවසීම සහ පොකුරු වල ඉහළ පවතින බව
සහල්. 9. Broker 3 වැටුණා

තැරැව්කරු 3 නැවත සේවයට පැමිණේ. පොකුර නව නෝඩයේ එක් එක් පෝලිම සඳහා කැඩපතක් සාදන අතර ස්වයංක්‍රීයව නව පෝලිම A මාස්ටර් සමඟ සමමුහුර්ත කරයි. කෙසේ වෙතත්, නව පෝලිමේ B හි කැඩපත හිස්ව පවතී. මේ ආකාරයෙන් අපට A පෝලිමේ සම්පූර්ණ අතිරික්තයක් ඇති අතර දැනට පවතින පෝලිම් B පණිවිඩ සඳහා එක් කැඩපතක් පමණි.

RabbitMQ එදිරිව Kafka: වැරදි ඉවසීම සහ පොකුරු වල ඉහළ පවතින බව
සහල්. 10. A පෝලිමේ නව දර්පණයට දැනට පවතින සියලුම පණිවිඩ ලැබේ, නමුත් B පෝලිමේ නව දර්පණයට නොලැබේ.

පෝලිම් දෙකටම තවත් පණිවිඩ දහයක් පැමිණේ. තැරැව්කරු 2 පසුව බිඳ වැටෙන අතර පෝලිම A තැරැව්කරු 1 හි ඇති පැරණිතම දර්පණය වෙත ආපසු පෙරළේ. එය අසාර්ථක වූ විට දත්ත නැතිවීමක් සිදු නොවේ. B පෝලිමේ, මාස්ටර් තුළ පණිවිඩ විස්සක් ඇති අතර දර්පණයේ පණිවිඩ දහයක් පමණක් ඇත, මන්ද මෙම පෝලිම කිසි විටෙකත් මුල් පණිවිඩ දහය අනුකරණය නොකළ බැවිනි.

RabbitMQ එදිරිව Kafka: වැරදි ඉවසීම සහ පොකුරු වල ඉහළ පවතින බව
සහල්. 11. පෝලිම A පණිවිඩ අහිමි නොවී තැරැව්කරු 1 වෙත ආපසු යයි

පෝලිම් දෙකටම තවත් පණිවිඩ දහයක් පැමිණේ. දැන් Broker 1 ක්‍රෑෂ් වෙනවා.A Queue A එක Message නැති නොවී පහසුවෙන්ම කණ්ණාඩියට මාරු වෙනවා. කෙසේ වෙතත්, B පෝලිමේ ගැටළු තිබේ. මෙම අවස්ථාවේදී අපට ලබා ගත හැකි බව හෝ අනුකූලතාව ප්‍රශස්ත කළ හැක.

අපට ප්‍රවේශ්‍යතාව ප්‍රශස්ත කිරීමට අවශ්‍ය නම්, ප්‍රතිපත්තිය ha-promote-on-failure තුළ ස්ථාපනය කළ යුතුය සැමවිටම. මෙය පෙරනිමි අගයයි, එබැවින් ඔබට ප්‍රතිපත්තිය කිසිසේත් සඳහන් කළ නොහැක. මෙම අවස්ථාවේදී, අපි අත්‍යවශ්‍යයෙන්ම සමමුහුර්ත නොකළ දර්පණවල අසාර්ථක වීමට ඉඩ දෙමු. මෙය පණිවිඩ නැති වීමට හේතු වනු ඇත, නමුත් පෝලිම කියවිය හැකි සහ ලිවිය හැකි ලෙස පවතිනු ඇත.

RabbitMQ එදිරිව Kafka: වැරදි ඉවසීම සහ පොකුරු වල ඉහළ පවතින බව
සහල්. 12. A පෝලිම පණිවිඩ අහිමි නොවී තැරැව්කරු 3 වෙත ආපසු හරවනු ලැබේ. පෝලිම B නැවත තැරැව්කරු 3 වෙත පෙරළී පණිවිඩ දහයක් නැති විය

අපිටත් Install කරන්න පුළුවන් ha-promote-on-failure අර්ථයට when-synced. මෙම අවස්ථාවේදී, දර්පණය වෙත ආපසු යාම වෙනුවට, පෝලිම තැරැව්කරු 1 එහි දත්ත සමඟ සබැඳි මාදිලියට ආපසු එන තෙක් බලා සිටිනු ඇත. එය ආපසු පැමිණි පසු, ප්‍රධාන පෝලිම කිසිදු දත්ත හානියකින් තොරව බ්‍රෝකර් 1 වෙත ආපසු පැමිණේ. දත්ත ආරක්ෂාව සඳහා ලබා ගත හැකි බව කැප කරනු ලැබේ. නමුත් මෙය සම්පූර්ණ දත්ත නැතිවීමට පවා තුඩු දිය හැකි අවදානම් මාදිලියකි, එය අපි ඉක්මනින්ම බලමු.

RabbitMQ එදිරිව Kafka: වැරදි ඉවසීම සහ පොකුරු වල ඉහළ පවතින බව
සහල්. 13. තැරැව්කරු 1 අහිමි වීමෙන් පසු B පෝලිම නොතිබේ

"ස්වයංක්‍රීය සමමුහුර්තකරණය කිසිවිටෙක භාවිතා නොකිරීම වඩා හොඳද?" ඔබට ඇසිය හැක. පිළිතුර නම් සමමුහුර්තකරණය අවහිර කිරීමේ මෙහෙයුමකි. සමමුහුර්තකරණය අතරතුර, ප්‍රධාන පෝලිමට කියවීමට හෝ ලිවීමට කිසිදු මෙහෙයුමක් සිදු කළ නොහැක!

අපි උදාහරණයක් බලමු. දැන් අපට ඉතා දිගු පෝලිම් තිබේ. ඔවුන් එවැනි ප්රමාණයකට වර්ධනය වන්නේ කෙසේද? හේතු කිහිපයක් නිසා:

  • පෝලිම් ක්රියාකාරීව භාවිතා නොවේ
  • මේවා අධිවේගී පෝලිම් වන අතර දැන් පාරිභෝගිකයින් මන්දගාමී වේ
  • එය අධිවේගී පෝලිම්, දෝෂයක් ඇති අතර පාරිභෝගිකයින් අල්ලා ගනී

RabbitMQ එදිරිව Kafka: වැරදි ඉවසීම සහ පොකුරු වල ඉහළ පවතින බව
සහල්. 14. විවිධ සමමුහුර්තකරණ මාදිලි සහිත විශාල පෝලිම් දෙකක්

දැන් Broker 3 වැටෙනවා.

RabbitMQ එදිරිව Kafka: වැරදි ඉවසීම සහ පොකුරු වල ඉහළ පවතින බව
සහල්. 15. තැරැව්කරු 3 වැටේ, එක් එක් පෝලිමේ එක් මාස්ටර් සහ කැඩපතක් ඉතිරි වේ

තැරැව්කාර 3 නැවත අන්තර්ජාලයට පැමිණෙන අතර නව දර්පණ නිර්මාණය වේ. A ප්‍රධාන පෝලිම නව දර්පණයට පවතින පණිවිඩ ප්‍රතිවර්තනය කිරීම ආරම්භ කරන අතර මෙම කාලය තුළ පෝලිම නොමැත. දත්ත ප්‍රතිනිර්මාණය කිරීමට පැය දෙකක් ගත වේ, එහි ප්‍රතිඵලයක් ලෙස මෙම පෝලිම සඳහා පැය දෙකක අක්‍රීය කාලයක් ඇති වේ!

කෙසේ වෙතත්, B පෝලිම මුළු කාලය පුරාම පවතී. ඇය ප්‍රවේශය සඳහා යම් අතිරික්තයක් කැප කළාය.

RabbitMQ එදිරිව Kafka: වැරදි ඉවසීම සහ පොකුරු වල ඉහළ පවතින බව
සහල්. 16. සමමුහුර්ත කිරීමේදී පෝලිම නොතිබේ

පැය දෙකකට පසු, A පෝලිම ද ලබා ගත හැකි අතර නැවත කියවීම් සහ ලිවීම් පිළිගැනීම ආරම්භ කළ හැකිය.

යාවත්කාලීන කිරීම්

සමමුහුර්ත කිරීමේදී මෙම අවහිර කිරීමේ හැසිරීම ඉතා විශාල පෝලිම් සහිත පොකුරු යාවත්කාලීන කිරීම අපහසු කරයි. යම් අවස්ථාවක, ප්‍රධාන නෝඩය නැවත ආරම්භ කිරීමට අවශ්‍ය වේ, එයින් අදහස් කරන්නේ එක්කෝ දර්පණයකට මාරු වීම හෝ සේවාදායකය උත්ශ්‍රේණි කරන අතරතුර පෝලිම අක්‍රිය කිරීමයි. අපි සංක්‍රමණය කිරීමට තෝරා ගන්නේ නම්, දර්පණ සමමුහුර්ත නොකළහොත් අපට පණිවිඩ අහිමි වනු ඇත. පෙරනිමියෙන්, තැරැව්කාර ඇණහිටීමකදී, සමමුහුර්ත නොකළ දර්පණයකට අසමත් වීමක් සිදු නොවේ. මෙයින් අදහස් කරන්නේ තැරැව්කරු ආපසු පැමිණි වහාම අපට කිසිදු පණිවිඩයක් නැති නොවන බවයි, එකම හානිය සරල පෝලිමකි. තැරැව්කරුවකු විසන්ධි වූ විට හැසිරීම් රීති ප්‍රතිපත්ති අනුව සකසා ඇත ha-promote-on-shutdown. ඔබට අගයන් දෙකෙන් එකක් සැකසිය හැක:

  • always= සමමුහුර්ත නොකළ දර්පණ වෙත සංක්‍රමණය සක්‍රීය කර ඇත
  • when-synced= සමමුහුර්ත කැඩපතකට පමණක් මාරුවීම, එසේ නොමැතිනම් පෝලිම කියවිය නොහැකි සහ ලිවිය නොහැකි වේ. තැරැව්කරු ආපසු පැමිණි වහාම පෝලිම නැවත සේවයට පැමිණේ

එක් ආකාරයකින් හෝ වෙනත් ආකාරයකින්, විශාල පෝලිම් සමඟ ඔබට දත්ත නැතිවීම සහ නොමැතිකම අතර තෝරා ගැනීමට සිදුවේ.

ලබා ගත හැකි දත්ත ආරක්ෂාව වැඩි දියුණු කරන විට

තීරණයක් ගැනීමට පෙර සලකා බැලිය යුතු තවත් එක් සංකූලතාවයක් තිබේ. අතිරික්තය සඳහා ස්වයංක්‍රීය සමමුහුර්තකරණය වඩා හොඳ වන අතර, එය දත්ත ආරක්ෂාවට බලපාන්නේ කෙසේද? ඇත්ත වශයෙන්ම, වඩා හොඳ අතිරික්තයක් සමඟ, RabbitMQ පවතින පණිවිඩ නැති වීමට ඇති ඉඩකඩ අඩුය, නමුත් ප්‍රකාශකයින්ගෙන් ලැබෙන නව පණිවිඩ ගැන කුමක් කිව හැකිද?

මෙන්න ඔබ පහත සඳහන් කරුණු සලකා බැලිය යුතුය:

  • ප්‍රකාශකයාට සරලවම දෝෂයක් ලබා දී ඉහළ ප්‍රවාහ සේවාව හෝ පරිශීලකයා පසුව නැවත උත්සාහ කළ හැකිද?
  • පසුව නැවත උත්සාහ කිරීමට ප්‍රකාශකයාට පණිවිඩය දේශීයව හෝ දත්ත ගබඩාවක සුරැකිය හැකිද?

ප්‍රකාශකයාට පණිවිඩය පමණක් ඉවත දැමිය හැකි නම්, ඇත්ත වශයෙන්ම, ප්‍රවේශ්‍යතාව වැඩිදියුණු කිරීම ද දත්ත ආරක්‍ෂාව වැඩි දියුණු කරයි.

මේ අනුව, සමතුලිතතාවයක් සෙවිය යුතු අතර, විසඳුම නිශ්චිත තත්වය මත රඳා පවතී.

ha-promote-on-failure=සමමුහුර්ත කළ විට ගැටළු

අදහස ha-promote-on-failure= විට-සමමුහුර්ත අපි සමමුහුර්ත නොකළ දර්පණයකට මාරු වීම වළක්වන අතර එමඟින් දත්ත නැතිවීම වළක්වයි. පෝලිම කියවිය නොහැකි හෝ ලිවිය නොහැකි ලෙස පවතී. ඒ වෙනුවට, අපි උත්සාහ කරන්නේ බිඳ වැටුණු තැරැව්කරු එහි දත්ත නොවෙනස්ව ප්‍රතිසාධනය කිරීමට එවිට දත්ත නැතිවීමකින් තොරව ප්‍රධානියා ලෙස ක්‍රියා කිරීම නැවත ආරම්භ කළ හැකිය.

නමුත් (සහ මෙය විශාල නමුත්) තැරැව්කරුට ඔහුගේ දත්ත නැති වී ඇත්නම්, අපට විශාල ගැටලුවක් තිබේ: පෝලිම නැති වී ඇත! සියලු දත්ත නැති වී ඇත! ප්‍රධාන පෝලිමට බොහෝ දුරට හසු වන දර්පණ ඔබ සතුව තිබුණද, එම දර්පණ ද ඉවත දමනු ලැබේ.

එකම නම සහිත නෝඩයක් නැවත එක් කිරීමට, අපි පොකුරට පවසන්නේ නැතිවූ නෝඩය අමතක කරන ලෙස (විධානය සමඟින් rabbitmqctl අමතක කරන්න_cluster_node) සහ එම සත්කාරක නාමයෙන් නව තැරැව්කරුවෙකු ආරම්භ කරන්න. පොකුර නැතිවූ නෝඩය මතක තබා ගන්නා අතර, එය පැරණි පෝලිම සහ සමමුහුර්ත නොකළ දර්පණ මතක තබා ගනී. පොකුරකට අනාථ නෝඩ් එකක් අමතක කරන්න කිව්වම ඒ පෝලිමත් අමතක වෙනවා. දැන් අපි එය නැවත ප්‍රකාශ කළ යුතුයි. අපට අර්ධ දත්ත කට්ටලයක් සහිත දර්පණ තිබුණද, අපට සියලු දත්ත අහිමි විය. සමමුහුර්ත නොවන කැඩපතකට මාරු කිරීම වඩා හොඳය!

එබැවින්, අතින් සමමුහුර්තකරණය (සහ සමමුහුර්ත කිරීමට අසමත් වීම) සමඟ ඒකාබද්ධව ha-promote-on-failure=when-synced, මගේ මතය අනුව, තරමක් අවදානම්. ලේඛන පවසන්නේ දත්ත ආරක්ෂාව සඳහා මෙම විකල්පය පවතින නමුත් එය දෙපැත්ත කැපෙන පිහියකි.

ප්‍රධාන නැවත සමතුලිත කිරීම

පොරොන්දු වූ පරිදි, අපි නෝඩ් එකක් හෝ කිහිපයක් මත සියලුම ස්වාමිවරුන් සමුච්චය කිරීමේ ගැටලුව වෙත ආපසු යමු. මෙය රෝලිං පොකුරු යාවත්කාලීන කිරීමේ ප්‍රතිඵලයක් ලෙස පවා සිදුවිය හැක. ත්‍රි-නෝඩ් පොකුරක් තුළ, සියලුම ප්‍රධාන පෝලිම් නෝඩ් එකක් හෝ දෙකක් මත එකතු වේ.

ස්වාමිවරුන් නැවත සමතුලිත කිරීම හේතු දෙකක් නිසා ගැටළුකාරී විය හැක:

  • නැවත සමතුලිත කිරීම සිදු කිරීමට හොඳ මෙවලම් නොමැත
  • පෝලිම් සමමුහුර්තකරණය

නැවත සමතුලිත කිරීම සඳහා තුන්වන පාර්ශවයක් ඇත ප්ලගිනය, නිල වශයෙන් සහාය නොදක්වයි. RabbitMQ අත්පොතෙහි තෙවන පාර්ශවීය ප්ලගීන සම්බන්ධයෙන් කිව්වා: “ප්ලගිනය සමහර අමතර වින්‍යාස කිරීම් සහ වාර්තාකරණ මෙවලම් සපයයි, නමුත් RabbitMQ කණ්ඩායම විසින් සහාය නොදක්වයි හෝ සත්‍යාපනය නොකරයි. ඔබේම අවදානමකින් භාවිතා කරන්න."

HA ප්‍රතිපත්ති හරහා ප්‍රධාන පෝලිම ගෙනයාමට තවත් උපක්‍රමයක් තිබේ. අත්පොත සඳහන් කරයි පිටපත මේ වෙනුවෙන්. එය මේ ආකාරයට ක්‍රියා කරයි:

  • පවතින HA ප්‍රතිපත්තියට වඩා ඉහළ ප්‍රමුඛතාවයක් ඇති තාවකාලික ප්‍රතිපත්තියක් භාවිතයෙන් සියලුම දර්පණ ඉවත් කරයි.
  • ප්‍රධාන පෝලිම මාරු කළ යුතු නෝඩය සඳහන් කරමින්, නෝඩ් මාදිලිය භාවිත කිරීමට HA තාවකාලික ප්‍රතිපත්තිය වෙනස් කරයි.
  • තල්ලු සංක්‍රමණය සඳහා පෝලිම සමමුහුර්ත කරයි.
  • සංක්‍රමණය සම්පූර්ණ වූ පසු, තාවකාලික ප්‍රතිපත්තිය මකා දමයි. ආරම්භක HA ප්‍රතිපත්තිය ක්‍රියාත්මක වන අතර අවශ්‍ය දර්පණ ගණන නිර්මාණය වේ.

අවාසිය නම් ඔබට විශාල පෝලිම් හෝ දැඩි අතිරික්ත අවශ්යතා තිබේ නම් මෙම ප්රවේශය ක්රියා නොකරනු ඇත.

දැන් අපි බලමු RabbitMQ පොකුරු ජාල කොටස් සමඟ ක්‍රියා කරන ආකාරය.

සම්බන්ධතාවය නැතිවීම

බෙදා හරින ලද පද්ධතියක නෝඩ් ජාල සබැඳි මගින් සම්බන්ධ කර ඇති අතර ජාල සබැඳි විසන්ධි විය හැක. ඇනහිටීම් වාර ගණන දේශීය යටිතල පහසුකම් හෝ තෝරාගත් වලාකුළේ විශ්වසනීයත්වය මත රඳා පවතී. ඕනෑම අවස්ථාවක, බෙදා හරින ලද පද්ධති ඒවාට සාර්ථකව මුහුණ දිය හැකි විය යුතුය. නැවත වරක් අපට ලබා ගත හැකි බව සහ අනුකූලතාව අතර තේරීමක් ඇති අතර, නැවතත් ශුභාරංචිය නම් RabbitMQ විකල්ප දෙකම සපයයි (එකම අවස්ථාවේදීම නොවේ).

RabbitMQ සමඟ අපට ප්‍රධාන විකල්ප දෙකක් තිබේ:

  • තාර්කික බෙදීම (බෙදීම-මොළය) ඉඩ දෙන්න. මෙය ලබා ගත හැකි බව සහතික කරයි, නමුත් දත්ත නැති වීමට හේතු විය හැක.
  • තාර්කික වෙන්වීම අබල කරන්න. ගණුදෙණුකරුවන් පොකුරට සම්බන්ධ වන ආකාරය අනුව කෙටි කාලීනව ලබා ගැනීමේ හැකියාව නැති වීමට හේතු විය හැක. ද්වි-නෝඩ් පොකුරක් තුළ සම්පූර්ණ නොලැබීමට ද හේතු විය හැක.

නමුත් තාර්කික වෙන්වීම යනු කුමක්ද? ජාල සම්බන්ධතා නැතිවීම නිසා පොකුරක් දෙකට බෙදීම මෙයයි. සෑම පැත්තකින්ම, දර්පණ මාස්ටර් ලෙස උසස් කරනු ලැබේ, එවිට එක් පෝලිමකට අවසානයේ මාස්ටර් කිහිප දෙනෙක් සිටී.

RabbitMQ එදිරිව Kafka: වැරදි ඉවසීම සහ පොකුරු වල ඉහළ පවතින බව
සහල්. 17. ප්‍රධාන පෝලිම සහ දර්පණ දෙකක්, එක් එක් වෙනම නෝඩයක් මත. එවිට ජාල දෝෂයක් ඇති වන අතර එක් දර්පණයක් වෙන් වේ. වෙන් වූ නෝඩය අනෙක් දෙක වැටී ඇති බව දකින අතර එහි දර්පණ ස්වාමියාට ප්‍රවර්ධනය කරයි. අපට දැන් ලිවිය හැකි සහ කියවිය හැකි ප්‍රධාන පෝලිම් දෙකක් ඇත.

ප්‍රකාශකයින් ප්‍රධානීන් දෙදෙනාටම දත්ත යවන්නේ නම්, අපි පෝලිමේ අපසාරී පිටපත් දෙකක් සමඟ අවසන් කරමු.

RabbitMQ හි විවිධ මාතයන් ලබා ගත හැකි බව හෝ අනුකූලතාව සපයයි.

නොසලකා හැරීමේ මාදිලිය (පෙරනිමිය)

මෙම මාදිලිය ප්රවේශය සහතික කරයි. සම්බන්ධතාවය අහිමි වීමෙන් පසුව, තාර්කික වෙන්වීමක් සිදු වේ. සම්බන්ධතාවය යථා තත්ත්වයට පත් කිරීමෙන් පසු, පරිපාලකයා විසින් ප්‍රමුඛත්වය දිය යුතු කොටස තීරණය කළ යුතුය. පැරදුණු පැත්ත නැවත ආරම්භ වන අතර එම පැත්තේ ඇති සියලුම සමුච්චිත දත්ත නැති වී යයි.

RabbitMQ එදිරිව Kafka: වැරදි ඉවසීම සහ පොකුරු වල ඉහළ පවතින බව
සහල්. 18. ප්‍රකාශකයින් තිදෙනෙකු තැරැව්කරුවන් තිදෙනෙකු සමඟ සම්බන්ධ වී ඇත. අභ්‍යන්තරව, පොකුරු සියලු ඉල්ලීම් තැරැව්කරු 2 හි ප්‍රධාන පෝලිමට යවයි.

දැන් අපිට Broker 3 නැති වෙනවා. එයා අනිත් Broker ලා වැටිලා කියලා දැකලා එයාගේ කණ්ණාඩිය මාස්ටර්ට ප්‍රොමෝට් කරනවා. තාර්කික වෙන්වීමක් සිදු වන්නේ එලෙස ය.

RabbitMQ එදිරිව Kafka: වැරදි ඉවසීම සහ පොකුරු වල ඉහළ පවතින බව
සහල්. 19. තාර්කික බෙදීම (බෙදීම-මොළය). වාර්තා ප්‍රධාන පෝලිම් දෙකකට යන අතර පිටපත් දෙක අපසරනය වේ.

සම්බන්ධතාවය ප්‍රතිසාධනය කර ඇත, නමුත් තාර්කික වෙන්වීමක් පවතී. පරිපාලකයා අතින් අහිමි පැත්ත තෝරාගත යුතුය. පහත අවස්ථාවෙහිදී, පරිපාලකයා තැරැව්කරු 3 නැවත ආරම්භ කරයි. ඔහුට සම්ප්‍රේෂණය කිරීමට නොහැකි වූ සියලුම පණිවිඩ නැති වී යයි.

RabbitMQ එදිරිව Kafka: වැරදි ඉවසීම සහ පොකුරු වල ඉහළ පවතින බව
සහල්. 20. පරිපාලකයා තැරැව්කරු 3 අක්‍රීය කරයි.

RabbitMQ එදිරිව Kafka: වැරදි ඉවසීම සහ පොකුරු වල ඉහළ පවතින බව
සහල්. 21. පරිපාලක විසින් තැරැව්කරු 3 ආරම්භ කරන අතර එය පොකුරට සම්බන්ධ වේ, එහි ඉතිරිව ඇති සියලුම පණිවිඩ අහිමි වේ.

සම්බන්ධතාවය නැතිවීමේදී සහ එය යථා තත්ත්වයට පත් කිරීමෙන් පසුව, පොකුරු සහ මෙම පෝලිම කියවීමට සහ ලිවීමට හැකි විය.

ස්වයංක්‍රීය සුව කිරීමේ මාදිලිය

ඉග්නෝර් ප්‍රකාරයට සමානව ක්‍රියා කරයි, පොකුර විසින්ම සම්බන්ධතාව බෙදීමෙන් සහ ප්‍රතිස්ථාපනය කිරීමෙන් පසු ස්වයංක්‍රීයව නැතිවන පැත්ත තෝරා ගනී. පැරදුණු පැත්ත හිස්ව පොකුරට ආපසු පැමිණෙන අතර, එම පැත්තට පමණක් යවන ලද සියලුම පණිවිඩ පෝලිමට අහිමි වේ.

සුළුතර මාදිලිය විරාම කරන්න

අපට තාර්කික කොටස් කිරීමට ඉඩ දීමට අවශ්‍ය නැතිනම්, අපගේ එකම විකල්පය වන්නේ පොකුරු කොටසට පසුව කුඩා පැත්තේ කියවීම් සහ ලිවීම් ඉවත දැමීමයි. තැරැව්කරු එය කුඩා පැත්තේ ඇති බව දුටු විට, එය වැඩ අත්හිටුවයි, එනම්, එය පවතින සියලුම සම්බන්ධතා වසා දමා නව ඒවා ප්‍රතික්ෂේප කරයි. තත්පරයකට වරක් එය සම්බන්ධතා ප්‍රතිසාධනය සඳහා පරීක්ෂා කරයි. සම්බන්ධතාවය යථා තත්ත්වයට පත් වූ පසු, එය නැවත ක්‍රියාත්මක වන අතර පොකුරට සම්බන්ධ වේ.

RabbitMQ එදිරිව Kafka: වැරදි ඉවසීම සහ පොකුරු වල ඉහළ පවතින බව
සහල්. 22. ප්‍රකාශකයින් තිදෙනෙකු තැරැව්කරුවන් තිදෙනෙකු සමඟ සම්බන්ධ වී ඇත. අභ්‍යන්තරව, පොකුරු සියලු ඉල්ලීම් තැරැව්කරු 2 හි ප්‍රධාන පෝලිමට යවයි.

තැරැව්කරුවන් 1 සහ 2 පසුව තැරැව්කරු 3 වෙතින් බෙදී යයි. ඔවුන්ගේ කැඩපත ප්‍රධානියා ලෙස ප්‍රවර්ධනය කරනවා වෙනුවට, තැරැව්කරු 3 අත්හිටුවා ලබා ගත නොහැක.

RabbitMQ එදිරිව Kafka: වැරදි ඉවසීම සහ පොකුරු වල ඉහළ පවතින බව
සහල්. 23. තැරැව්කරු 3 විරාම කරයි, සියලුම සේවාදායකයින් විසන්ධි කරයි, සහ සම්බන්ධතා ඉල්ලීම් ප්‍රතික්ෂේප කරයි.

සම්බන්ධතාවය යථා තත්ත්වයට පත් වූ පසු, එය නැවත පොකුරට පැමිණේ.

බ්‍රෝකර් 3 හි ප්‍රධාන පෝලිම ඇති තවත් උදාහරණයක් බලමු.

RabbitMQ එදිරිව Kafka: වැරදි ඉවසීම සහ පොකුරු වල ඉහළ පවතින බව
සහල්. 24. තැරැව්කරු 3 හි ප්‍රධාන පෝලිම.

එවිට සම්බන්ධතාවයේ එකම අලාභය සිදු වේ. තැරැව්කරු 3 එය කුඩා පැත්තේ නිසා විරාම කරයි. අනෙක් පැත්තෙන්, නෝඩ් වලට පෙනෙන්නේ Broker 3 වැටී ඇති බවයි, එබැවින් Brokers 1 සහ 2 වෙතින් පැරණි දර්පණය ප්‍රධාන ලෙස උසස් කරනු ලැබේ.

RabbitMQ එදිරිව Kafka: වැරදි ඉවසීම සහ පොකුරු වල ඉහළ පවතින බව
සහල්. 25. Broker 2 නොමැති නම් Broker 3 වෙත මාරු වීම.

සම්බන්ධතාවය ප්‍රතිසාධනය කළ විට, තැරැව්කරු 3 පොකුරට සම්බන්ධ වනු ඇත.

RabbitMQ එදිරිව Kafka: වැරදි ඉවසීම සහ පොකුරු වල ඉහළ පවතින බව
සහල්. 26. පොකුර සාමාන්‍ය ක්‍රියාකාරිත්වයට පැමිණ ඇත.

මෙහිදී තේරුම් ගත යුතු වැදගත්ම දෙය නම්, අපට අනුකූලතාවක් ලැබෙනු ඇත, නමුත් අපට ලබා ගත හැකි බව ද ලබා ගත හැකිය, නම් අපි බොහෝ අංශයට ගනුදෙනුකරුවන් සාර්ථකව මාරු කරන්නෙමු. බොහෝ අවස්ථාවන් සඳහා, මම පුද්ගලිකව Pause Minority මාදිලිය තෝරා ගනු ඇත, නමුත් එය සැබවින්ම තනි පුද්ගල නඩුව මත රඳා පවතී.

ලබා ගත හැකි බව සහතික කිරීම සඳහා, සේවාදායකයින් සත්කාරක වෙත සාර්ථකව සම්බන්ධ වන බව සහතික කිරීම වැදගත් වේ. අපගේ විකල්ප දෙස බලමු.

පාරිභෝගික සම්බන්ධතා සහතික කිරීම

සම්බන්ධතාවය නැතිවීමෙන් පසු පොකුරේ ප්‍රධාන කොටස වෙත හෝ වැඩ කරන නෝඩ් වෙත (එක් නෝඩයක් අසමත් වූ පසු) සේවාදායකයින් යොමු කරන්නේ කෙසේද යන්න සඳහා අපට විකල්ප කිහිපයක් තිබේ. පළමුව, නිශ්චිත පෝලිමක් විශේෂිත නෝඩයක් මත සත්කාරකත්වය දරන බව මතක තබා ගනිමු, නමුත් මාර්ගගත කිරීම සහ ප්‍රතිපත්ති සියලු නෝඩ් හරහා ප්‍රතිනිර්මාණය වේ. සේවාලාභීන්ට ඕනෑම නෝඩයකට සම්බන්ධ විය හැකි අතර අභ්‍යන්තර මාර්ගගත කිරීම ඔවුන් යා යුතු තැනට යොමු කරයි. නමුත් නෝඩයක් අත්හිටුවන විට, එය සම්බන්ධතා ප්‍රතික්ෂේප කරයි, එබැවින් සේවාදායකයින් වෙනත් නෝඩයකට සම්බන්ධ විය යුතුය. නෝඩය ගැලවී ගියහොත් ඔහුට කළ හැකි දේ අල්පය.

අපගේ විකල්ප:

  • පොකුරට ප්‍රවේශ වන්නේ නෝඩ් හරහා සරලව චක්‍රීය වන බර සමතුලිතයක් භාවිතයෙන් වන අතර සේවාදායකයින් සාර්ථක වන තෙක් සම්බන්ධ වීමට නැවත උත්සාහ කරයි. නෝඩයක් පහළට හෝ අත්හිටුවා ඇත්නම්, එම නෝඩයට සම්බන්ධ වීමට දරන උත්සාහයන් අසාර්ථක වනු ඇත, නමුත් පසුව කරන උත්සාහයන් වෙනත් සේවාදායකයන් වෙත යයි (රවුන්ඩ් රොබින් ආකාරයෙන්). මෙය කෙටි කාලීන සම්බන්ධතාවයක් නැතිවීමකට හෝ ඉක්මනින් ආපසු ගෙන එනු ලබන කඩා වැටුණු සේවාදායකයක් සඳහා සුදුසු වේ.
  • ලෝඩ් බැලන්සර් හරහා පොකුරට ප්‍රවේශ වන්න සහ අත්හිටවූ/අසාර්ථක නෝඩ් අනාවරණය වූ වහාම ලැයිස්තුවෙන් ඉවත් කරන්න. අපි මෙය ඉක්මනින් කරන්නේ නම්, සහ සේවාලාභීන්ට සබැඳුම නැවත උත්සාහ කිරීමට හැකි නම්, අපි නිරන්තරයෙන් ලබා ගත හැකි වනු ඇත.
  • සෑම සේවාදායකයෙකුටම සියලුම නෝඩ් ලැයිස්තුවක් ලබා දෙන්න, සහ සම්බන්ධ වන විට සේවාදායකයා අහඹු ලෙස ඒවායින් එකක් තෝරා ගනී. සම්බන්ධ වීමට උත්සාහ කිරීමේදී දෝෂයක් ලැබුනේ නම්, එය සම්බන්ධ වන තුරු ලැයිස්තුවේ ඊළඟ නෝඩය වෙත ගමන් කරයි.
  • DNS භාවිතයෙන් අසාර්ථක/අත්හිටු වූ නෝඩයකින් ගමනාගමනය ඉවත් කරන්න. මෙය කුඩා TTL භාවිතයෙන් සිදු කෙරේ.

සොයා ගැනීම්

RabbitMQ පොකුරු එහි වාසි සහ අවාසි ඇත. වඩාත්ම බරපතල අවාසි නම්:

  • පොකුරකට සම්බන්ධ වන විට, නෝඩ් ඔවුන්ගේ දත්ත ඉවතලයි;
  • සමමුහුර්තකරණය අවහිර කිරීම පෝලිම නොමැති වීමට හේතු වේ.

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

  • විශ්වාස කළ නොහැකි ජාලය.
  • විශ්වාස කළ නොහැකි ගබඩාව.
  • ඉතා දිගු පෝලිම්.

ඉහළ ලබා ගත හැකි සැකසුම් සම්බන්ධයෙන්, පහත සඳහන් කරුණු සලකා බලන්න:

  • ha-promote-on-failure=always
  • ha-sync-mode=manual
  • cluster_partition_handling=ignore (හෝ autoheal)
  • ස්ථිර පණිවිඩ
  • සමහර නෝඩය අසමත් වූ විට සේවාදායකයින් සක්‍රිය නෝඩයට සම්බන්ධ වන බව සහතික කරන්න

අනුකූලතාව සඳහා (දත්ත ආරක්ෂාව), පහත සැකසුම් සලකා බලන්න:

  • ප්‍රකාශකයා පාරිභෝගිකයාගේ පැත්තෙන් තහවුරු කිරීම සහ අතින් පිළිගැනීම්
  • ha-promote-on-failure=when-synced, ප්‍රකාශකයන්ට පසුව නැවත උත්සාහ කළ හැකි නම් සහ ඔබට ඉතා විශ්වාසදායක ගබඩාවක් තිබේ නම්! නැත්නම් දාන්න =always.
  • ha-sync-mode=automatic (නමුත් විශාල අක්‍රිය පෝලිම් සඳහා අත්පොත මාදිලිය අවශ්‍ය විය හැකිය; නොමැතිකම පණිවිඩ නැති වීමට හේතු වේද යන්න සලකා බලන්න)
  • සුළුතර මාදිලිය විරාම කරන්න
  • ස්ථිර පණිවිඩ

අපි තවමත් වැරදි ඉවසීමේ සහ ඉහළ ලබා ගැනීමේ සියලු ගැටලු ආවරණය කර නැත; උදාහරණයක් ලෙස, ආරක්ෂිතව පරිපාලන ක්‍රියා පටිපාටි සිදු කරන්නේ කෙසේද (රෝලිං යාවත්කාලීන කිරීම් වැනි). අපි ෆෙඩරේෂන් සහ ෂෝවල් ප්ලගිනය ගැනත් කතා කළ යුතුයි.

මට වෙනත් යමක් මග හැරී ඇත්නම්, කරුණාකර මට දන්වන්න.

මගේ ද බලන්න තනතුර, මෙම ලිපියේ විස්තර කර ඇති සමහර පණිවිඩ නැතිවීමේ අවස්ථා පරීක්ෂා කිරීමට මම Docker සහ Blockade භාවිතා කරමින් RabbitMQ පොකුරක් මත විනාශයක් සිදු කරමි.

ලිපි මාලාවේ පෙර ලිපි:
අංක 1 - habr.com/ru/company/itsumma/blog/416629
අංක 2 - habr.com/ru/company/itsumma/blog/418389
අංක 3 - habr.com/ru/company/itsumma/blog/437446

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

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