RabbitMQ vs Kafka: Hoʻomanawanui hewa a me ka loaʻa kiʻekiʻe ma nā Clusters

RabbitMQ vs Kafka: Hoʻomanawanui hewa a me ka loaʻa kiʻekiʻe ma nā Clusters

ʻO ka hoʻomanawanui hewa a me ka loaʻa kiʻekiʻe nā kumuhana nui, no laila e hāʻawi mākou i nā ʻatikala ʻokoʻa iā RabbitMQ a me Kafka. ʻO kēia ʻatikala e pili ana iā RabbitMQ, a ʻo ka mea aʻe e pili ana iā Kafka, i ka hoʻohālikelike ʻana me RabbitMQ. He ʻatikala lōʻihi kēia, no laila e hōʻoluʻolu iā ʻoe iho.

E nānā kākou i ka hoʻomanawanui hewa, ka paʻa, a me ka loaʻa kiʻekiʻe (HA) hoʻolālā a me nā kālepa i hana ʻia e kēlā me kēia hoʻolālā. Hiki ke holo ʻo RabbitMQ ma kahi hui o nā nodes - a laila helu ʻia ʻo ia ma ke ʻano he ʻōnaehana puʻunaue. I ka wā e pili ana i nā ʻōnaehana hoʻolaha, kamaʻilio pinepine mākou e pili ana i ka kūlike a me ka loaʻa.

Hōʻike kēia mau manaʻo i ka hana ʻana o kahi ʻōnaehana ke hāʻule. ʻAʻole paʻa ka pili pūnaewele, hāʻule ke kikowaena, ʻaʻole hiki ke loaʻa ka server no ka hōʻiliʻili ʻōpala, ka poho ʻeke, a i ʻole ka lohi ʻana o ka pilina pūnaewele. Hiki i kēia mau mea ke alakaʻi i ka nalowale ʻikepili a i ʻole nā ​​hakakā. ʻIke ʻia he mea hiki ʻole ke kau i kahi ʻōnaehana i kūlike loa (ʻaʻohe nalowale ʻikepili, ʻaʻohe ʻokoʻa ʻikepili) a loaʻa (e ʻae i ka heluhelu a kākau) no nā hiʻohiʻona hemahema.

E ʻike mākou aia ka kūlike a me ka loaʻa ma nā ʻaoʻao ʻē aʻe o ka spectrum, a pono ʻoe e koho i ke ala e koho ai. ʻO ka nūhou maikaʻi me RabbitMQ hiki ke koho. Loaʻa iā ʻoe kēia ʻano levers "nerdy" e hoʻololi i ke koena i ka ʻoi aku ka paʻa a i ʻole ka hiki ke loaʻa.

E nānā nui mākou i nā hoʻonohonoho e alakaʻi i ka nalowale ʻikepili ma muli o nā moʻolelo i hoʻopaʻa ʻia. Aia kahi kaulahao o ke kuleana ma waena o nā mea hoʻopuka, nā mea kūʻai aku a me nā mea kūʻai aku. Ke hoʻouna ʻia ka leka i ka mea hoʻolaha, ʻo kāna hana ʻaʻole e nalowale i ka leka. Ke hoʻomaopopo ka mea hoʻolimalima i ka loaʻa ʻana o ka leka i ka mea hoʻopuka, ʻaʻole mākou e manaʻo e nalowale. Akā e ʻike mākou e hiki maoli ana kēia ma muli o kāu hoʻonohonoho hoʻonohonoho hoʻolaha a me ka mea hoʻopuka.

Hoʻokahi Node Resilience Primitives

Ka Lālani Paʻa

ʻElua ʻano laina laina ma RabbitMQ: lōʻihi a paʻa ʻole. Mālama ʻia nā pila a pau i ka waihona Mnesia. Hoʻolaha hou ʻia nā pila paʻa i ka hoʻomaka ʻana o ka node a no laila e ola i ka hoʻomaka hou ʻana, nā ʻōnaehana ʻōnaehana, a i ʻole nā ​​​​kauka server (ʻoiai ke hoʻomau ʻia ka ʻikepili). 'O ia ho'i, i ka wā e ha'i aku ai 'oe i ka routing (exchange) a me ka queue e kūpa'a, e ho'i mai ana ka queuing/routing infrastructure.

Wehe ʻia nā queues a me nā alahele i ka wā e hoʻomaka hou ai ka node.

Nā leka hoʻomau

No ka lōʻihi o ka pila, ʻaʻole ia he manaʻo e ola nā memo a pau i ka hoʻomaka hou ʻana o ka node. ʻO nā memo wale nō i hoʻonoho ʻia e ka mea hoʻopuka e like me kūpaʻa (hoomau). Hoʻokumu nā memo hoʻomau i ka ukana ʻē aʻe ma luna o ka broker, akā inā ʻaʻole ʻae ʻia ka nalowale o ka memo, a laila ʻaʻohe koho ʻē aʻe.

RabbitMQ vs Kafka: Hoʻomanawanui hewa a me ka loaʻa kiʻekiʻe ma nā Clusters
Laiki. 1. ʻO ka matrix hoʻomau

ʻO ka hui pū ʻana me ke aniani pila

No ke ola ʻana i ka nalowale o kahi broker, pono mākou i ka redundancy. Hiki iā mākou ke hoʻohui i nā node RabbitMQ he nui i loko o kahi puʻupuʻu, a laila hoʻohui i ka redundancy hou ma ka hana hou ʻana i nā pila ma waena o nā node lehulehu. ʻO kēia ala, inā hāʻule kekahi node, ʻaʻole mākou e nalowale i ka ʻikepili a noho mau.

Hōʻike manaʻo laina:

  • hoʻokahi queue nui (master), nāna e loaʻa nā kauoha kākau a heluhelu a pau
  • hoʻokahi a ʻoi aku paha nā aniani i loaʻa nā memo a me nā metadata mai ka laina nui. ʻAʻole kēia mau aniani no ka scaling, akā no ka redundancy.

RabbitMQ vs Kafka: Hoʻomanawanui hewa a me ka loaʻa kiʻekiʻe ma nā Clusters
Laiki. 2. Hōʻike pila

Hoʻonohonoho ʻia ka mirroring e ke kulekele kūpono. I loko o laila hiki iā ʻoe ke koho i ka coefficient replication a me nā nodes kahi e kau ai ka queue. Nā laʻana:

  • ha-mode: all
  • ha-mode: exactly, ha-params: 2 (hoʻokahi haku a hoʻokahi aniani)
  • ha-mode: nodes, ha-params: rabbit@node1, rabbit@node2

Hōʻoiaʻiʻo o ka mea hoʻopuka

No ka hoʻokō ʻana i ka hoʻopaʻa paʻa ʻana, koi ʻia ʻo Publisher Confirms. Inā ʻaʻole lākou, aia ka pilikia o ka nalowale ʻana o nā memo. Hoʻouna ʻia kahi hōʻoia i ka mea hoʻopuka ma hope o ka kākau ʻana o ka leka i ka disk. Kākau ʻo RabbitMQ i nā memo i ka diski ʻaʻole i ka loaʻa ʻana, akā i ka manawa maʻamau, ma kahi o nā haneli mau milliseconds. Ke nānā ʻia kahi pila, hoʻouna ʻia kahi hōʻoia ma hope o ke kākau ʻana o nā aniani āpau i kā lākou kope o ka memo i ka disk. ʻO kēia ke ʻano o ka hoʻohana ʻana i nā hōʻoia e hoʻohui i ka latency, akā inā he mea nui ka palekana o ka ʻikepili, a laila pono lākou.

Ka laina Failover

Ke haʻalele a hāʻule paha ka mea hoʻolimalima, hāʻule pū me ia nā alakaʻi pila (mau haku) ma ia node. A laila koho ka pūʻulu i ke aniani kahiko loa o kēlā me kēia haku a hoʻolaha ʻia ʻo ia ka haku hou.

RabbitMQ vs Kafka: Hoʻomanawanui hewa a me ka loaʻa kiʻekiʻe ma nā Clusters
Laiki. 3. He nui nā pila aniani a me kā lākou mau kulekele

Ke iho nei ka Broker 3. E hoʻomaopopo i ka hoʻonui ʻia ʻana o ke aniani Queue C ma Broker 2 i haku. E hoʻomaopopo hoʻi ua hana ʻia kahi aniani hou no Queue C ma Broker 1. Ke hoʻāʻo mau nei ʻo RabbitMQ e mālama i ke kumu hoʻopiʻi i kuhikuhi ʻia i kāu mau kulekele.

RabbitMQ vs Kafka: Hoʻomanawanui hewa a me ka loaʻa kiʻekiʻe ma nā Clusters
Laiki. 4. Hāʻule ʻo Broker 3, e hāʻule ana ka laina C

Hāʻule ka Broker 1 aʻe! Hoʻokahi wale nō mea kūʻai aku i koe. Hoʻokiʻekiʻe ʻia ke aniani Queue B i haku.

RabbitMQ vs Kafka: Hoʻomanawanui hewa a me ka loaʻa kiʻekiʻe ma nā Clusters
Kuhi. Xnumx

Ua hoʻihoʻi mākou i ka Broker 1. No ka maikaʻi o ka ola ʻana o ka ʻikepili i ka nalowale a me ka hoʻihoʻi ʻana o ka mea hoʻopili, hoʻolei ʻia nā leka pila i hoʻohālikelike ʻia i ka hoʻomaka hou ʻana. He mea nui kēia e hoʻomaopopo no ka mea aia nā hopena. E nānā koke mākou i kēia mau hopena. No laila he lālā hou ʻo Broker 1 i ka hui, a hoʻāʻo ka hui e hoʻokō i nā kulekele a no laila hana i nā aniani ma Broker 1.

I kēia hihia, ua pau ka nalo ʻana o Broker 1, e like me ka ʻikepili, no laila ua nalowale loa ka Queue B ʻole.

RabbitMQ vs Kafka: Hoʻomanawanui hewa a me ka loaʻa kiʻekiʻe ma nā Clusters
Laiki. 6. Hoʻi ka mea kūʻai aku 1 i ka lawelawe

Ua hoʻi hou ʻo Broker 3 ma ka pūnaewele, no laila e hoʻihoʻi nā queues A a me B i nā aniani i hana ʻia ma luna e hoʻokō i kā lākou mau kulekele HA. Akā i kēia manawa aia nā pila nui a pau ma ka node hoʻokahi! ʻAʻole kūpono kēia, ʻoi aku ka maikaʻi o ka hoʻohele like ʻana ma waena o nā nodes. ʻO ka mea pōʻino, ʻaʻole nui nā koho ma aneʻi no ka hoʻoponopono hou ʻana i nā haku. E hoʻi hou mākou i kēia pilikia ma hope aku no ka mea pono mākou e nānā mua i ka hoʻonohonoho laina.

RabbitMQ vs Kafka: Hoʻomanawanui hewa a me ka loaʻa kiʻekiʻe ma nā Clusters
Laiki. 7. Hoʻi ka Broker 3 i ka lawelawe. ʻO nā pila nui a pau ma ka node hoʻokahi!

No laila pono ʻoe i kahi manaʻo pehea e hāʻawi ai nā aniani i ka redundancy a me ka hoʻomanawanui hewa. Mālama kēia i ka loaʻa ʻana i ka wā o ka pau ʻole o ka node hoʻokahi a pale i ka nalowale ʻana o ka ʻikepili. Akā ʻaʻole mākou i pau, no ka mea, ʻoi aku ka paʻakikī.

Hoʻoponopono

I ka hana ʻana i aniani hou, e hoʻopili mau ʻia nā memo hou i kēia aniani a me nā mea ʻē aʻe. No nā ʻikepili i loaʻa i ka queue master, hiki iā mākou ke hoʻopili iā ia i kahi aniani hou, a lilo ia i kope piha o ka haku. Hiki iā mākou ke koho ʻaʻole e hoʻopili i nā memo i loaʻa a e ʻae i ka pila nui a me ke aniani hou e hui pū i ka manawa, me nā memo hou e hiki mai ana i ka huelo a me nā memo e waiho nei i ke poʻo o ka pila nui.

Hana ʻia kēia hoʻonohonoho ʻokoʻa a i ʻole ma ka lima a mālama ʻia me ka hoʻohana ʻana i kahi kulekele queue. E nānā kākou i kekahi laʻana.

ʻElua kā mākou pila aniani. Hoʻonohonoho ʻia ʻo Queue A, a hoʻonohonoho lima ʻia ʻo Queue B. He ʻumi mau memo i loko o nā pila ʻelua.

RabbitMQ vs Kafka: Hoʻomanawanui hewa a me ka loaʻa kiʻekiʻe ma nā Clusters
Laiki. 8. ʻElua pila me nā ʻano hoʻonohonoho like ʻole

I kēia manawa ke nalowale nei mākou i ka Broker 3.

RabbitMQ vs Kafka: Hoʻomanawanui hewa a me ka loaʻa kiʻekiʻe ma nā Clusters
Laiki. 9. Ua hāʻule ʻo Broker 3

Hoʻi hou ʻo Broker 3 i ka lawelawe. Hoʻokumu ka pūʻulu i aniani no kēlā me kēia pila ma ka node hou a hoʻonohonoho pono i ka Queue A hou me ka haku. Eia nō naʻe, ʻaʻohe kaʻawale ke aniani o ka Queue B hou. Ma kēia ʻano, loaʻa iā mākou ka redundancy piha ma ka Queue A a hoʻokahi wale nō aniani no nā memo Queue B.

RabbitMQ vs Kafka: Hoʻomanawanui hewa a me ka loaʻa kiʻekiʻe ma nā Clusters
Laiki. 10. Loaʻa i ke aniani hou o Queue A nā memo a pau, akā ʻaʻole i loaʻa i ke aniani hou o Queue B.

He ʻumi mau memo hou aʻe i hiki mai ma nā pila ʻelua. Holoi ʻo Broker 2 a huli ʻo Queue A i ke aniani kahiko loa, aia ma Broker 1. ʻAʻohe nalowale ʻikepili ke hāʻule. Ma Queue B, he iwakālua mau memo i loko o ka haku a he ʻumi wale nō i loko o ke aniani no ka mea ʻaʻole i hana hou kēia pila i nā memo mua he ʻumi.

RabbitMQ vs Kafka: Hoʻomanawanui hewa a me ka loaʻa kiʻekiʻe ma nā Clusters
Laiki. 11. Hoʻi ka Queue A i Broker 1 me ka nalowale ʻole o nā memo

He ʻumi mau memo hou aʻe i hiki mai ma nā pila ʻelua. I kēia manawa, hāʻule ʻo Broker 1. Hoʻololi maʻalahi ka Queue A i ke aniani me ka nalowale ʻole o nā memo. Eia naʻe, pilikia ka Queue B. I kēia manawa hiki iā mākou ke koho i ka loaʻa a i ʻole ke kūlike.

Inā makemake mākou e hoʻonui i ka hiki, a laila ke kulekele ha-promote-on-failure pono e hoʻokomo i loko mau. ʻO kēia ka waiwai paʻamau, no laila ʻaʻole hiki iā ʻoe ke kuhikuhi i ke kulekele. I kēia hihia, ke ʻae nei mākou i nā hemahema i nā aniani unsynchronized. E nalowale ana nā memo, akā hiki ke heluhelu ʻia ka pila a hiki ke kākau ʻia.

RabbitMQ vs Kafka: Hoʻomanawanui hewa a me ka loaʻa kiʻekiʻe ma nā Clusters
Laiki. 12. Hoʻihoʻi ʻia ka Queue A i Broker 3 me ka nalowale ʻole o nā memo. Hoʻi hou ʻo Queue B i Broker 3 me ʻumi mau memo i nalowale

Hiki iā mākou ke hoʻouka ha-promote-on-failure i ke ano when-synced. I kēia hihia, ma kahi o ka ʻōwili ʻana i ke aniani, e kali ka pila a hiki i ka Broker 1 me kāna ʻikepili e hoʻi i ke ʻano pūnaewele. Ma hope o ka hoʻi ʻana, ua hoʻi ka laina nui ma Broker 1 me ka ʻole o ka nalowale ʻana o ka ʻikepili. Hāʻawi ʻia ka loaʻa no ka palekana ʻikepili. Akā ʻo kēia kahi ʻano pilikia e hiki ai ke alakaʻi i ka pau ʻana o ka ʻikepili, a mākou e nānā koke ai.

RabbitMQ vs Kafka: Hoʻomanawanui hewa a me ka loaʻa kiʻekiʻe ma nā Clusters
Laiki. 13. ʻAʻole loaʻa ka Queue B ma hope o ka nalowale ʻana o Broker 1

Hiki paha iā ʻoe ke nīnau, "ʻOi aku ka maikaʻi o ka hoʻohana ʻole ʻana i ka hoʻonohonoho ʻakomi?" ʻO ka pane ʻo ka synchronization kahi hana pale. I ka wā hoʻonohonoho, ʻaʻole hiki i ka pila nui ke hana i nā hana heluhelu a kākau paha!

E nānā kākou i kekahi laʻana. I kēia manawa, lōʻihi loa nā pila. Pehea lākou e ulu ai i kēlā ʻano nui? No kekahi mau kumu:

  • ʻAʻole hoʻohana ikaika ʻia nā pila
  • ʻO kēia nā laina kiʻekiʻe, a i kēia manawa ua lohi nā mea kūʻai
  • ʻO nā laina laina kiʻekiʻe, aia ka hewa a ke hopu nei nā mea kūʻai aku

RabbitMQ vs Kafka: Hoʻomanawanui hewa a me ka loaʻa kiʻekiʻe ma nā Clusters
Laiki. 14. ʻElua laina nui me nā ʻano hoʻonohonoho like ʻole

Ke hāʻule nei ʻo Broker 3.

RabbitMQ vs Kafka: Hoʻomanawanui hewa a me ka loaʻa kiʻekiʻe ma nā Clusters
Laiki. 15. Hāʻule ʻo Broker 3, e waiho ana hoʻokahi haku a me ke aniani i kēlā me kēia laina

Hoʻi hou mai ʻo Broker 3 ma ka pūnaewele a ua hana ʻia nā aniani hou. Hoʻomaka ka Pila Nui A e hana hou i nā memo i loaʻa i ke aniani hou, a i kēia manawa ʻaʻole loaʻa ka Queue. He ʻelua hola e hoʻopili hou i ka ʻikepili, e loaʻa ana i ʻelua mau hola hoʻomaha no kēia Queue!

Eia naʻe, loaʻa ka Queue B i ka manawa holoʻokoʻa. Hāʻawi ʻo ia i kekahi mau redundancy no ka hiki ke komo.

RabbitMQ vs Kafka: Hoʻomanawanui hewa a me ka loaʻa kiʻekiʻe ma nā Clusters
Laiki. 16. ʻAʻole i loaʻa ka pila i ka wā hoʻonohonoho

Ma hope o ʻelua hola, loaʻa pū ka Queue A a hiki ke hoʻomaka e ʻae i ka heluhelu a kākau hou.

Nā Hōʻoia

ʻO kēia ʻano pale i ka wā o ka hoʻonohonoho ʻana he mea paʻakikī ke hoʻonui i nā pūʻulu me nā laina nui loa. I kekahi manawa, pono e hoʻomaka hou ka haku node, ʻo ia hoʻi ka hoʻololi ʻana i ke aniani a i ʻole ka hoʻopau ʻana i ka pila i ka wā e hoʻonui ʻia ana ka server. Inā koho mākou e hoʻololi, e nalowale mākou i nā memo inā ʻaʻole i hoʻonohonoho ʻia nā aniani. ʻO ka mea maʻamau, i ka wā o ka make ʻana o ka broker, ʻaʻole i hana ʻia kahi failover i kahi aniani unsynchronized. ʻO kēia ke ʻano o ka hoʻi ʻana mai o ka mea hoʻolimalima, ʻaʻole mākou e nalowale i nā leka, ʻo ka pōʻino wale nō he laina maʻalahi. Hoʻonohonoho ʻia nā lula o ke ʻano i ka wā e hoʻokaʻawale ʻia ai kahi mea hoʻolimalima ha-promote-on-shutdown. Hiki iā ʻoe ke hoʻonohonoho i hoʻokahi o nā waiwai ʻelua:

  • always= hiki ke hoʻololi i nā aniani i hoʻonohonoho ʻole ʻia
  • when-synced= ka hoʻololi ʻana i kahi aniani i hoʻonohonoho ʻia wale nō, inā ʻaʻole hiki ke heluhelu ʻia ka pila a hiki ʻole ke kākau. Hoʻi ka pila i ka lawelawe i ka wā e hoʻi mai ai ka mea hoʻolimalima

Hoʻokahi ala a i ʻole, me nā queues nui āu e koho ai ma waena o ka nalowale o ka ʻikepili a me ka loaʻa ʻole.

Ke hoʻomaikaʻi ka loaʻa i ka palekana ʻikepili

Aia kekahi pilikia hou e noʻonoʻo ai ma mua o ka hoʻoholo ʻana. ʻOiai ʻoi aku ka maikaʻi o ka hoʻonohonoho maʻalahi no ka redundancy, pehea ka hopena i ka palekana ʻikepili? ʻOiaʻiʻo, me ka ʻoi aku ka maikaʻi, ʻaʻole e nalowale ʻo RabbitMQ i nā memo i loaʻa, akā pehea nā memo hou mai nā mea hoʻopuka?

Maanei pono ʻoe e noʻonoʻo i kēia mau mea:

  • Hiki paha i ka mea hoʻopuka ke hoʻihoʻi i kahi hewa a hoʻāʻo hou ka lawelawe ma luna a i ʻole ka mea hoʻohana ma hope?
  • Hiki i ka mea hoʻopuka ke mālama i ka memo ma ka ʻāina a i ʻole ma kahi waihona e hoʻāʻo hou ma hope?

Inā hiki i ka mea hoʻopuka ke hoʻolei wale i ka memo, a laila, ʻo ka hoʻomaikaʻi ʻana i ka hiki ke hoʻomaikaʻi i ka palekana ʻikepili.

No laila, pono e ʻimi ʻia kahi kaulike, a pili ka hopena i ke kūlana kikoʻī.

Nā pilikia me ka ha-promote-on-failure=when-synced

Manaʻo ha-promote-on-failure= i ka wa-synced ʻo ia ke pale aku i ka hoʻololi ʻana i ke aniani unsynchronized a no laila e pale aku ai i ka nalowale ʻikepili. ʻAʻole hiki ke heluhelu ʻia a hiki ke kākau ʻia ka pila. Akā, ke hoʻāʻo nei mākou e hoʻihoʻi i ka mea hoʻolimalima i hāʻule me kāna ʻikepili i hiki ke hoʻomau i ka hana ma ke ʻano he haku me ka ʻole o ka nalowale ʻana o ka ʻikepili.

Akā (a he mea nui kēia akā) inā ua nalowale ka mea hoʻolimalima i kāna ʻikepili, a laila loaʻa iā mākou kahi pilikia nui: ua nalowale ka pila! Ua pau ka ʻikepili! ʻOiai inā loaʻa iā ʻoe nā aniani i ʻike nui ʻia i ka laina nui, hoʻolei ʻia kēlā mau aniani.

No ka hoʻohui hou ʻana i kahi node me ka inoa like, ʻōlelo mākou i ka hui e poina i ka node nalowale (me ke kauoha rabbitmqctl poina_cluster_node) a hoʻomaka i kahi mea hoʻolimalima hou me ka inoa inoa like. ʻOiai e hoʻomanaʻo ana ka puʻupuʻu i ka node nalowale, hoʻomanaʻo ia i ka pila kahiko a me nā aniani i hoʻonohonoho ʻole ʻia. Ke ʻōlelo ʻia ka puʻupuʻu e poina i kahi node makua ʻole, poina pū ʻia kēlā pila. I kēia manawa pono mākou e haʻi hou. Ua nalowale mākou i nā ʻikepili āpau, ʻoiai ua loaʻa iā mākou nā aniani me kahi ʻāpana ʻikepili. ʻOi aku ka maikaʻi o ka hoʻololi ʻana i kahi aniani i hoʻonohonoho ʻole ʻia!

No laila, ʻo ka hoʻonohonoho lima lima (a me ka hiki ʻole ke hoʻonohonoho) i hui pū me ha-promote-on-failure=when-synced, i ko'u manao, pilikia loa. Wahi a nā docs aia kēia koho no ka palekana ʻikepili, akā he pahi ʻelua ʻaoʻao.

Ka hoʻoponopono hou ʻana

E like me ka mea i hoʻohiki ʻia, hoʻi mākou i ka pilikia o ka hōʻiliʻili ʻana o nā haku āpau ma hoʻokahi a i ʻole kekahi mau nodes. Hiki i kēia ke hana ma muli o kahi hōʻano hou o ka hui. I loko o kahi puʻupuʻu puʻupuʻu ʻekolu, e hōʻuluʻulu ʻia nā queues haku āpau ma hoʻokahi a ʻelua paha node.

Hiki ke pilikia ka hoʻoponopono hou ʻana i nā haku no nā kumu ʻelua:

  • ʻAʻohe mea hana maikaʻi e hana i ka rebalance
  • Ka hoʻonohonoho laina laina

Aia kekahi ʻaoʻao ʻekolu no ka hoʻoponopono hou ʻana plugin, ʻaʻole i kākoʻo ʻia. E pili ana i nā plugins ʻaoʻao ʻekolu i ka manual RabbitMQ wahi a: "Hāʻawi ka plugin i kahi hoʻonohonoho hou a me nā mea hana hōʻike, akā ʻaʻole kākoʻo ʻia a hōʻoia ʻia e ka hui RabbitMQ. E hoʻohana i kāu pilikia ponoʻī. "

Aia kekahi hoʻopunipuni e hoʻoneʻe i ka laina nui ma o nā kulekele HA. ʻŌlelo ka manual palapala no keia. E hana ana penei:

  • Wehe i nā aniani a pau me ka hoʻohana ʻana i kahi kulekele pōkole i ʻoi aku ka nui ma mua o ke kulekele HA.
  • Hoʻololi i ke kulekele pōkole HA no ka hoʻohana ʻana i ke ʻano node, e kuhikuhi ana i ka node kahi e hoʻoili ʻia ai ka queue master.
  • Hoʻoponopono i ka pila no ka neʻe ʻana.
  • Ma hope o ka pau ʻana o ka neʻe ʻana, holoi ʻia ke kulekele no ka manawa lōʻihi. Hoʻohana ʻia ke kulekele HA mua a hana ʻia ka helu o nā aniani i makemake ʻia.

ʻO ka ʻaoʻao haʻahaʻa, ʻaʻole hiki ke hoʻohana ʻia kēia ala inā loaʻa iā ʻoe nā pila nui a i ʻole nā ​​​​koi hoʻemi koʻikoʻi.

I kēia manawa e ʻike kākou pehea e hana ai nā pūʻulu RabbitMQ me nā ʻāpana pūnaewele.

Nalo o ka pilina

Hoʻopili ʻia nā nodes o kahi ʻōnaehana puʻupuʻu e nā loulou pūnaewele, a hiki ke hoʻopau ʻia nā loulou pūnaewele. ʻO ka pinepine o ka pau ʻana e pili ana i ka ʻōnaehana kūloko a i ʻole ka hilinaʻi o ke ao i koho ʻia. I kēlā me kēia hihia, pono e hiki i nā ʻōnaehana hoʻolaha ke hoʻokō iā lākou. Loaʻa hou iā mākou kahi koho ma waena o ka loaʻa a me ke kūpaʻa, a ʻo ka nūhou maikaʻi e hāʻawi ʻo RabbitMQ i nā koho ʻelua (ʻaʻole wale i ka manawa like).

Me RabbitMQ loaʻa iā mākou ʻelua mau koho nui:

  • E ʻae i ka māhele lokahi (split-brain). Mālama kēia i ka loaʻa ʻana, akā hiki ke hoʻopau i ka ʻikepili.
  • Hoʻopau i ka hoʻokaʻawale ʻana. Hiki ke hopena i ka nalowale o ka loaʻa pōkole ma muli o ke ʻano o ka hoʻopili ʻana o nā mea kūʻai aku i ka pūʻulu. Hiki ke alakaʻi i ka loaʻa ʻole i loko o kahi pūʻulu node ʻelua.

Akā, he aha ka hoʻokaʻawale logical? ʻO kēia ka wā e hoʻokaʻawale ai kahi puʻupuʻu i ʻelua ma muli o ka nalowale o nā pilina pūnaewele. Ma kēlā ʻaoʻao kēia ʻaoʻao, hoʻokiʻekiʻe ʻia nā aniani i haku, no laila he nui nā haku i kēlā me kēia queue.

RabbitMQ vs Kafka: Hoʻomanawanui hewa a me ka loaʻa kiʻekiʻe ma nā Clusters
Laiki. 17. ʻO ka laina nui a me nā aniani ʻelua, kēlā me kēia ma kahi node ʻokoʻa. A laila hiki mai ka hemahema o ka pūnaewele a wehe ʻia kekahi aniani. ʻIke ka node i hoʻokaʻawale ʻia ua hāʻule nā ​​​​ʻelua ʻē aʻe a hāpai i kāna mau aniani i ka haku. Loaʻa iā mākou ʻelua pila nui, hiki ke kākau a hiki ke heluhelu ʻia.

Inā hoʻouna nā mea hoʻopuka i ka ʻikepili i nā haku ʻelua, hoʻopau mākou i ʻelua kope ʻokoʻa o ka pila.

Hāʻawi nā ʻano ʻano like ʻole o RabbitMQ i ka loaʻa a i ʻole ka paʻa.

Haʻalele i ke ʻano (paʻamau)

Mālama kēia ʻano i ka hiki ke komo. Ma hope o ka nalo ʻana o ka hoʻohui ʻana, loaʻa kahi kaʻawale kūpono. Ma hope o ka hoʻihoʻi ʻia ʻana o ka pilina, pono ka luna hoʻoponopono e hoʻoholo i ka ʻāpana e hāʻawi i ka mea nui. E hoʻomaka hou ka ʻaoʻao nalo a nalowale nā ​​ʻikepili i hōʻiliʻili ʻia ma kēlā ʻaoʻao.

RabbitMQ vs Kafka: Hoʻomanawanui hewa a me ka loaʻa kiʻekiʻe ma nā Clusters
Laiki. 18. Hoʻopili ʻia ʻekolu mea hoʻolaha me ʻekolu mau mea hoʻolaha. Ma loko, e hele ka hui i nā noi āpau i ka laina nui ma Broker 2.

I kēia manawa ke nalowale nei mākou i Broker 3. ʻIke ʻo ia ua hāʻule nā ​​​​mea kūʻai aku a hoʻolaha i kāna aniani i ka haku. ʻO kēia ke ʻano o ka hoʻokaʻawale logical.

RabbitMQ vs Kafka: Hoʻomanawanui hewa a me ka loaʻa kiʻekiʻe ma nā Clusters
Laiki. 19. Māhele logical (split-brain). Hele nā ​​moʻolelo i ʻelua laina nui, a ʻokoʻa nā kope ʻelua.

Hoʻihoʻi hou ʻia ka pilina, akā mau ka kaʻawale kūpono. Pono ka luna hoʻoponopono e koho lima i ka ʻaoʻao nalowale. Ma ka hihia ma lalo nei, hoʻomaka hou ka luna hoʻomalu iā Broker 3. Ua nalowale nā ​​memo a pau āna i hoʻokele ʻole ai e hoʻouna.

RabbitMQ vs Kafka: Hoʻomanawanui hewa a me ka loaʻa kiʻekiʻe ma nā Clusters
Laiki. 20. Hoʻopau ka luna hoʻomalu i ka Broker 3.

RabbitMQ vs Kafka: Hoʻomanawanui hewa a me ka loaʻa kiʻekiʻe ma nā Clusters
Laiki. 21. Hoʻomaka ka luna hoʻomalu i ka Broker 3 a hui pū ʻo ia i ka hui, nalowale nā ​​​​memo a pau i waiho ʻia ma laila.

I ka nalo ʻana o ka pilina a ma hope o kona hoʻihoʻi ʻana, ua loaʻa ka pūʻulu a me kēia pila no ka heluhelu a me ke kākau ʻana.

ʻO ke ʻano hoʻōla

Hana like me ka Ignore mode, koe wale nō ke koho ʻokoʻa i ka ʻaoʻao nalowale ma hope o ka hoʻokaʻawale ʻana a me ka hoʻihoʻi ʻana i ka pilina. Hoʻi ka ʻaoʻao nalo i ka pūʻulu me ka nele, a nalowale ka pila i nā memo a pau i hoʻouna ʻia i kēlā ʻaoʻao wale nō.

Hoʻomaha i ke ʻano liʻiliʻi

Inā ʻaʻole makemake mākou e ʻae i ka hoʻokaʻawale ʻana, a laila ʻo kā mākou koho wale nō e hoʻolei i ka heluhelu a kākau ʻana ma ka ʻaoʻao liʻiliʻi ma hope o ka ʻāpana hui. I ka ʻike ʻana o ka mea kūʻai aku aia ma ka ʻaoʻao liʻiliʻi, hoʻokuʻu ʻo ia i ka hana, ʻo ia hoʻi, pani i nā pilina āpau a hōʻole i nā mea hou. Hoʻokahi manawa i kēlā me kēia kekona e nānā no ka hoʻihoʻi hou ʻana o ka pilina. Ke hoʻihoʻi hou ʻia ka pilina, hoʻomaka ia i ka hana a hui pū i ka pūʻulu.

RabbitMQ vs Kafka: Hoʻomanawanui hewa a me ka loaʻa kiʻekiʻe ma nā Clusters
Laiki. 22. Hoʻopili ʻia ʻekolu mea hoʻolaha me ʻekolu mau mea hoʻolaha. Ma loko, e hele ka hui i nā noi āpau i ka laina nui ma Broker 2.

Hoʻokaʻawale ʻo Brokers 1 a me 2 mai Broker 3. Ma kahi o ka hoʻolaha ʻana i kā lākou aniani i haku, hoʻokuʻu ʻia ʻo Broker 3 a lilo ʻole.

RabbitMQ vs Kafka: Hoʻomanawanui hewa a me ka loaʻa kiʻekiʻe ma nā Clusters
Laiki. 23. Hoʻomaha ʻo Broker 3, wehe i nā mea kūʻai aku āpau, a hōʻole i nā noi pili.

Ke hoʻihoʻi hou ʻia ka pilina, hoʻi ia i ka pūʻulu.

E nānā kākou i kahi laʻana ʻē aʻe kahi o ka pila nui ma Broker 3.

RabbitMQ vs Kafka: Hoʻomanawanui hewa a me ka loaʻa kiʻekiʻe ma nā Clusters
Laiki. 24. Ka laina nui ma Broker 3.

A laila ua like ka nalowale o ka pilina. Hoʻomaha ʻo Broker 3 no ka mea aia ma ka ʻaoʻao liʻiliʻi. Ma ka ʻaoʻao ʻē aʻe, ʻike nā nodes ua hāʻule ʻo Broker 3, no laila ua hāpai ʻia ke aniani kahiko mai Brokers 1 a me 2 i haku.

RabbitMQ vs Kafka: Hoʻomanawanui hewa a me ka loaʻa kiʻekiʻe ma nā Clusters
Laiki. 25. Hoʻololi i ka Broker 2 inā ʻaʻole i loaʻa ʻo Broker 3.

Ke hoʻihoʻi ʻia ka pilina, e hui pū ʻo Broker 3 i ka hui.

RabbitMQ vs Kafka: Hoʻomanawanui hewa a me ka loaʻa kiʻekiʻe ma nā Clusters
Laiki. 26. Ua hoʻi ka hui i ka hana maʻamau.

ʻO ka mea nui e hoʻomaopopo ma aneʻi ʻo ka loaʻa ʻana o ke kūlike, akā hiki iā mākou ke loaʻa ka loaʻa, inā E hoʻololi maikaʻi mākou i nā mea kūʻai aku i ka hapa nui o ka ʻāpana. No ka hapanui o nā kūlana, koho wau i ka mode Pause Minority, akā pili maoli ia i ka hihia pākahi.

No ka hōʻoia ʻana i ka loaʻa, he mea nui e hōʻoia i ka hoʻopili pono ʻana o nā mea kūʻai aku i ka mea hoʻokipa. E nānā i kā mākou mau koho.

E hōʻoia i ka pilina o nā mea kūʻai aku

Loaʻa iā mākou nā koho no ke kuhikuhi ʻana i nā mea kūʻai aku i ka ʻāpana nui o ka pūʻulu a i ʻole nā ​​​​nodes hana (ma hope o ka pau ʻana o hoʻokahi node) ma hope o ka nalowale o ka pilina. ʻO ka mea mua, e hoʻomanaʻo kākou ua hoʻokipa ʻia kahi pila kikoʻī ma kahi node kikoʻī, akā ua hoʻopili hou ʻia ke alahele a me nā kulekele ma nā node āpau. Hiki i nā mea kūʻai ke hoʻohui i kekahi node, a na ke ala i loko e kuhikuhi iā lākou i kahi e pono ai lākou e hele. Akā ke hoʻokuʻu ʻia kahi node, hōʻole ia i nā pilina, no laila pono nā mea kūʻai aku e hoʻopili i kekahi node. Inā hāʻule ka node, ʻaʻohe mea hiki iā ia ke hana.

ʻO kā mākou mau koho:

  • Loaʻa ʻia ka pūʻulu me ka hoʻohana ʻana i kahi mea hoʻohālikelike ukana e holo wale ana ma nā nodes a hoʻāʻo hou nā mea kūʻai aku e hoʻopili a hiki i ka holomua. Inā hāʻule a hoʻopaneʻe ʻia kahi node, a laila e hāʻule ka hoʻāʻo e hoʻopili i kēlā node, akā e hele nā ​​hoʻāʻo ma hope i nā kikowaena ʻē aʻe (ma ke ʻano round-robin). He kūpono kēia no ka nalowale o ka pilina a i ʻole kahi kikowaena hoʻohaʻahaʻa e hoʻihoʻi koke ʻia.
  • E kiʻi i ka pūʻulu ma o kahi mea kaulike hoʻouka a wehe i nā node i hoʻokuʻu ʻia/ʻaʻole i hāʻule mai ka papa inoa i ka wā e ʻike ʻia ai. Inā mākou e hana wikiwiki, a inā hiki i nā mea kūʻai ke hoʻāʻo hou i ka pilina, a laila e hoʻokō mākou i ka loaʻa mau.
  • Hāʻawi i kēlā me kēia mea kūʻai i ka papa inoa o nā node a pau, a koho ka mea kūʻai aku i kekahi o lākou i ka wā e hoʻopili ai. Inā loaʻa iā ia kahi hewa i ka wā e hoʻāʻo ai e hoʻopili, neʻe ia i ka node aʻe ma ka papa inoa a hiki i ka hoʻopili ʻana.
  • Wehe i nā kaʻa mai kahi node ʻaʻole i hoʻopaneʻe ʻia me DNS. Hana ʻia kēia me ka hoʻohana ʻana i kahi TTL liʻiliʻi.

haʻina

Loaʻa i ka hui ʻana o RabbitMQ kona mau pono a me nā hemahema. ʻO nā pōʻino koʻikoʻi loa:

  • i ka hui ʻana i kahi hui, hoʻolei nā nodes i kā lākou ʻikepili;
  • ke ālai 'ana i ka synchronization ke kumu i loa'a 'ole ai ka pila.

Loaʻa nā hoʻoholo paʻakikī a pau mai kēia mau hiʻohiʻona hale ʻelua. Inā hiki iā RabbitMQ ke mālama i ka ʻikepili i ka wā e hui hou ai ka pūʻulu, a laila ʻoi aku ka wikiwiki o ka hoʻonohonoho ʻana. Inā hiki iā ia ke pale ʻole i ka synchronization, ʻoi aku ka maikaʻi o ke kākoʻo ʻana i nā pila nui. ʻO ka hoʻoponopono ʻana i kēia mau pilikia ʻelua e hoʻomaikaʻi maikaʻi loa i ka hana a RabbitMQ ma ke ʻano he ʻenehana leka hoʻomanawanui a loaʻa loa. Manaʻo wau e ʻōlelo aku iā RabbitMQ me ka clustering i kēia mau kūlana:

  • Pūnaewele hilinaʻi ʻole.
  • Waihona hilinaʻi ʻole.
  • Nā laina lōʻihi loa.

I ka wā e pili ana i nā hoʻonohonoho hoʻonohonoho kiʻekiʻe, e noʻonoʻo i kēia:

  • ha-promote-on-failure=always
  • ha-sync-mode=manual
  • cluster_partition_handling=ignore (ai ole autoheal)
  • mau memo mau
  • e hōʻoia i ka hoʻopili ʻana o nā mea kūʻai aku i ka node hana ke hāʻule kekahi node

No ka paʻa (palekana ʻikepili), e noʻonoʻo i kēia mau hoʻonohonoho:

  • Hōʻoia ka Mea Hoʻopuka a me ka Hoʻomaikaʻi Manual ma ka ʻaoʻao kūʻai
  • ha-promote-on-failure=when-synced, inā hiki i nā mea hoʻopuka ke hoʻāʻo hou ma hope a inā he waihona hilinaʻi loa kāu! A i ʻole e kau =always.
  • ha-sync-mode=automatic (akā, no nā queues nui ʻole e koi ʻia ke ʻano manual; e noʻonoʻo hoʻi inā ʻaʻole i loaʻa ka mea e nalowale ai nā memo)
  • Hoʻomaha i ke ʻano liʻiliʻi
  • mau memo mau

ʻAʻole mākou i uhi i nā pilikia āpau o ka hoʻomanawanui hewa a me ka loaʻa kiʻekiʻe; no ka laʻana, pehea e hoʻokō paʻa ai i nā kaʻina hana hoʻokele (e like me nā loli hou). Pono mākou e kamaʻilio e pili ana i ka federation a me ka plugin Shovel.

Inā ua hala au i kekahi mea ʻē aʻe, e ʻoluʻolu e haʻi mai iaʻu.

E nana hoi i ka'u leka, kahi aʻu e hana ai i kahi pōʻino ma kahi puʻupuʻu RabbitMQ me ka hoʻohana ʻana iā Docker a me Blockade e hoʻāʻo ai i kekahi o nā hiʻohiʻona o ka memo i wehewehe ʻia ma kēia ʻatikala.

Nā ʻatikala ma mua o ka moʻo:
Helu 1 - habr.com/ru/company/itsumma/blog/416629
Helu 2 - habr.com/ru/company/itsumma/blog/418389
Helu 3 - habr.com/ru/company/itsumma/blog/437446

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka