Pag-unawa sa mga broker ng mensahe. Pag-aaral ng mekanika ng pagmemensahe gamit ang ActiveMQ at Kafka. Kabanata 1

Kumusta sa lahat!

Nagsimulang magsalin ng isang maliit na aklat:
Β«Pag-unawa sa Mga Broker ng MensaheΒ«
may-akda: Jakub Korab, publisher: O'Reilly Media, Inc., petsa ng publikasyon: Hunyo 2017, ISBN: 9781492049296.

Mula sa pagpapakilala sa aklat:
"... Ituturo sa iyo ng aklat na ito kung paano mag-isip tungkol sa mga brokered messaging system sa pamamagitan ng paghahambing at paghahambing ng dalawang sikat na teknolohiya ng brokering: Apache ActiveMQ at Apache Kafka. Ito ay magbabalangkas ng mga kaso ng paggamit at mga insentibo sa pag-unlad na nagbunsod sa kanilang mga developer na gumawa ng napakaraming iba't ibang mga diskarte sa parehong lugar ng brokered na pagmemensahe sa pagitan ng mga system. Titingnan natin ang mga teknolohiyang ito mula sa simula at i-highlight ang epekto ng iba't ibang mga pagpipilian sa disenyo sa daan. Magkakaroon ka ng malalim na pag-unawa sa parehong mga produkto, isang pag-unawa sa kung paano dapat at hindi dapat gamitin ang mga ito, at isang pag-unawa sa kung ano ang dapat abangan kapag isinasaalang-alang ang iba pang mga teknolohiya sa pagmemensahe sa hinaharap. ... "

Mga bahaging isinalin sa ngayon:
Kabanata 1 Panimula
Kabanata 3. Kafka

Ipo-post ko ang mga natapos na kabanata habang sila ay isinalin.

KABANATA 1

Pagpapakilala

Ang intersystem messaging ay isa sa mga hindi gaanong naiintindihan na mga lugar ng IT. Bilang isang developer o arkitekto, maaaring pamilyar ka sa iba't ibang mga framework at database. Gayunpaman, malamang na may sulyap ka lang kung paano gumagana ang mga teknolohiya sa pagmemensahe na nakabatay sa broker. Kung ganyan ang nararamdaman mo, huwag kang mag-alala, you're in good company.

Karaniwang limitado ang pakikipag-ugnayan ng mga tao sa imprastraktura ng pagmemensahe. Kadalasan ay kumonekta sila sa isang system na nilikha ng matagal na ang nakalipas, o nag-download ng isang distribution kit mula sa Internet, i-install ito sa PROM at simulan ang pagsulat ng code para dito. Pagkatapos patakbuhin ang imprastraktura sa PROM, maaaring magkahalo ang mga resulta: nawawala ang mga mensahe sa mga pag-crash, hindi gumagana ang mga pagpapadala gaya ng iyong inaasahan, o ibinitin ng mga broker ang iyong mga producer o hindi magpadala ng mga mensahe sa iyong mga consumer.

Parang pamilyar?

Isang karaniwang senaryo kung saan gumagana nang maayos ang iyong messaging code, pansamantala. Hanggang sa tumigil ito sa paggana. Ang panahong ito ay nagpapahina sa pagbabantay at nagbibigay ng maling pakiramdam ng seguridad, na humahantong sa higit pang code batay sa mga maling ideya tungkol sa pangunahing gawi ng teknolohiya. Kapag nagsimulang magkamali ang mga bagay, nahaharap ka sa isang hindi komportableng katotohanan: na talagang hindi mo naiintindihan ang pinagbabatayan na gawi ng produkto, o ang mga trade-off na pinili ng mga may-akda, gaya ng pagganap laban sa katatagan, o transaksyon laban sa pahalang. scalability.

Nang walang malalim na pag-unawa sa kung paano gumagana ang mga broker, ang mga tao ay gumagawa ng tila makatwirang paghahabol tungkol sa kanilang mga sistema ng pagmemensahe, gaya ng:

  • Ang sistema ay hindi kailanman mawawalan ng mga mensahe
  • Ang mga mensahe ay ipoproseso nang sunud-sunod
  • Ang pagdaragdag ng mga mamimili ay gagawing mas mabilis ang system
  • Isang beses lang ihahatid ang mga mensahe

Sa kasamaang palad, ang ilan sa mga pahayag na ito ay batay sa mga pagpapalagay na nalalapat lamang sa ilalim ng ilang mga pangyayari, habang ang iba ay hindi totoo.

Ituturo sa iyo ng aklat na ito kung paano mangatuwiran tungkol sa mga brokered messaging system sa pamamagitan ng paghahambing at paghahambing ng dalawang sikat na teknolohiya ng broker: Apache ActiveMQ at Apache Kafka. Ito ay magbabalangkas ng mga kaso ng paggamit at mga insentibo sa pag-unlad na nagbunsod sa kanilang mga developer na gumawa ng napakaraming iba't ibang mga diskarte sa parehong lugar ng brokered na pagmemensahe sa pagitan ng mga system. Titingnan natin ang mga teknolohiyang ito mula sa simula at i-highlight ang epekto ng iba't ibang mga pagpipilian sa disenyo sa daan. Magkakaroon ka ng malalim na pag-unawa sa parehong mga produkto, isang pag-unawa sa kung paano dapat at hindi dapat gamitin ang mga ito, at isang pag-unawa sa kung ano ang dapat abangan kapag isinasaalang-alang ang iba pang mga teknolohiya sa pagmemensahe sa hinaharap.

Bago tayo magsimula, balikan natin ang mga pangunahing kaalaman.

Ano ang isang sistema ng pagmemensahe at bakit ito kinakailangan

Upang makipag-usap ang dalawang application sa isa't isa, kailangan muna nilang tukuyin ang isang interface. Kasama sa kahulugan ng interface na ito ang pagpili ng transport o protocol gaya ng HTTP, MQTT, o SMTP, at negosasyon sa mga format ng mensahe na ipapalitan ng mga system. Ito ay maaaring isang mahigpit na proseso, tulad ng pagtukoy ng isang XML schema na may mga kinakailangan sa halaga ng payload para sa isang mensahe, o maaari itong maging hindi gaanong pormal, tulad ng isang kasunduan sa pagitan ng dalawang developer na ang ilang bahagi ng isang kahilingan sa HTTP ay maglalaman ng isang client identifier. .

Hangga't ang format ng mga mensahe at ang pagkakasunud-sunod ng pagpapadala ng mga ito ay pare-pareho sa pagitan ng mga system, magagawa nilang makipag-usap sa isa't isa nang hindi nababahala tungkol sa pagpapatupad ng ibang sistema. Ang mga panloob ng mga system na ito, tulad ng programming language o framework na ginamit, ay maaaring magbago sa paglipas ng panahon. Hangga't ang kontrata mismo ay pinananatili, ang pakikipag-ugnayan ay maaaring magpatuloy nang hindi nagbabago sa kabilang panig. Ang dalawang sistema ay epektibong na-decoupled (na pinaghihiwalay) ng interface na ito.

Ang mga sistema ng pagmemensahe ay karaniwang nagsasangkot ng isang tagapamagitan sa pagitan ng dalawang sistema na nakikipag-ugnayan upang higit pang ihiwalay (paghiwalayin) ang nagpadala mula sa tatanggap o mga tatanggap. Sa kasong ito, pinapayagan ng system ng pagmemensahe ang nagpadala na magpadala ng mensahe nang hindi alam kung saan matatagpuan ang tatanggap, kung siya ay aktibo o kung ilan sa kanilang mga pagkakataon.

Tingnan natin ang ilang pagkakatulad para sa mga uri ng mga problema na nalulutas ng isang sistema ng pagmemensahe at ipakilala ang ilang pangunahing termino.

Punto-sa-Punto

Pumunta si Alexandra sa post office para magpadala ng package kay Adam. Pumunta siya sa bintana at ibinigay ang parsela sa empleyado. Kinuha ng empleyado ang pakete at binigyan si Alexandra ng resibo. Hindi kailangang nasa bahay si Adam kapag ipinadala ang pakete. Tiwala si Alexandra na maihahatid ang package kay Adam sa isang punto sa hinaharap at maaaring magpatuloy sa kanyang negosyo. Nang maglaon, sa isang punto, nakatanggap si Adam ng isang pakete.

Ito ay isang halimbawa ng isang modelo ng pagmemensahe punto sa punto. Ang post office dito ay gumaganap bilang isang mekanismo ng pamamahagi ng pakete, na tinitiyak na ang bawat pakete ay maihahatid nang isang beses. Ang paggamit ng post office ay naghihiwalay sa pagkilos ng pagpapadala ng parsela mula sa paghahatid ng parsela.
Sa mga klasikong sistema ng pagmemensahe, ang point-to-point na modelo ay ipinapatupad sa pamamagitan ng nakapila. Ang pila ay gumaganap bilang isang FIFO (first in, first out) buffer na maaaring i-subscribe ng isa o higit pang mga consumer. Ang bawat mensahe ay inihahatid lamang isa sa mga naka-subscribe na mamimili. Karaniwang sinusubukan ng mga pila na ipamahagi ang mga mensahe nang patas sa mga mamimili. Isang consumer lang ang makakatanggap ng mensaheng ito.

Ang terminong "matibay" ay inilapat sa mga pila. Pagkamaaasahan ay isang pag-aari ng serbisyo na ginagarantiyahan na ang sistema ng pagmemensahe ay magpapanatili ng mga mensahe sa kawalan ng mga aktibong subscriber hanggang sa mag-subscribe ang consumer sa pila ng paghahatid ng mensahe.

Ang pagiging maaasahan ay kadalasang nalilito sa pagpupursige at, kahit na ang dalawang termino ay mapagpapalit, gumaganap ang mga ito ng magkakaibang mga pag-andar. Tinutukoy ng pagtitiyaga kung ang isang mensahe ay isinulat ng sistema ng pagmemensahe sa ilang uri ng imbakan sa pagitan ng pagtanggap nito at pagpapadala nito sa mamimili. Ang mga mensaheng ipinadala sa queue ay maaaring maging paulit-ulit o hindi.
Ginagamit ang point-to-point na pagmemensahe kapag ang isang use case ay nangangailangan ng isang aksyon sa isang mensahe. Kasama sa mga halimbawa ang pagdedeposito ng mga pondo sa isang account o pagtupad sa isang delivery order. Tatalakayin natin sa ibang pagkakataon kung bakit ang isang sistema ng pagmemensahe mismo ay hindi kayang magbigay ng isang beses na paghahatid at kung bakit ang mga pila ay maaaring magbigay ng garantiya sa paghahatid. kahit isang beses.

Publisher-Subscriber

Dinial ni Gabriella ang conference number. Habang nakakonekta siya sa kumperensya, naririnig niya ang lahat ng sinasabi ng tagapagsalita, kasama ang iba pang kalahok sa tawag. Kapag nag-black out siya, nami-miss niya ang sinabi. Nang muling kumonekta, patuloy niyang naririnig ang sinasabi.

Ito ay isang halimbawa ng isang modelo ng pagmemensahe publish-subscribe. Ang conference call ay gumaganap bilang isang mekanismo ng broadcast. Walang pakialam ang taong nagsasalita kung gaano karaming tao ang kasalukuyang tumatawag - tinitiyak ng system na maririnig ng sinumang kasalukuyang konektado ang sinasabi.
Sa mga klasikong sistema ng pagmemensahe, ang modelo ng pagmemensahe sa pag-publish-subscribe ay ipinapatupad sa pamamagitan ng tuktok. Ang isang paksa ay nagbibigay ng parehong paraan ng pag-broadcast gaya ng mekanismo ng kumperensya. Kapag ang isang mensahe ay nai-post sa isang paksa, ito ay ipinamamahagi para sa lahat ng naka-subscribe na user.

Karaniwang mga paksa hindi mapagkakatiwalaan (nondurable). Tulad ng isang tagapakinig na hindi marinig kung ano ang sinasabi sa isang conference call, kapag ang tagapakinig ay nag-offline, ang mga subscriber ng paksa ay nakakaligtaan ang anumang mga mensahe na ipinadala habang sila ay offline. Para sa kadahilanang ito, maaari naming sabihin na ang mga tuktok ay nagbibigay ng garantiya ng paghahatid. hindi hihigit sa isang beses para sa bawat mamimili.

Karaniwang ginagamit ang pagmemensahe ng Publish-Subscribe kapag ang mga mensahe ay likas na nagbibigay-kaalaman at ang pagkawala ng isang mensahe ay hindi partikular na mahalaga. Halimbawa, ang isang paksa ay maaaring magpadala ng mga pagbabasa ng temperatura mula sa isang pangkat ng mga sensor isang beses bawat segundo. Ang isang system na interesado sa kasalukuyang temperatura at nag-subscribe sa isang paksa ay hindi mag-aalala kung makaligtaan ito ng isang mensahe - darating ang isa pa.

hybrid na mga modelo

Inilalagay ng website ng tindahan ang mga mensahe ng order sa isang "queue ng mensahe." Ang pangunahing mamimili ng mga mensaheng ito ay ang executive system. Bilang karagdagan, ang sistema ng pag-audit ay dapat may mga kopya ng mga mensahe ng order na ito para sa pagsubaybay sa ibang pagkakataon. Ang parehong mga system ay hindi maaaring makaligtaan ng mga mensahe, kahit na ang mga system mismo ay hindi magagamit sa loob ng ilang panahon. Hindi dapat malaman ng website ang iba pang mga system.

Ang mga kaso ng paggamit ay kadalasang nangangailangan ng kumbinasyon ng mga modelo ng pag-publish-subscribe at point-to-point na pagmemensahe, tulad ng kapag maraming system ang nangangailangan ng kopya ng isang mensahe at pareho ang pagiging maaasahan at pagtitiyaga upang maiwasan ang pagkawala ng mensahe.

Sa mga kasong ito, kinakailangan ang isang patutunguhan (pangkalahatang termino para sa mga pila at paksa), na namamahagi ng mga mensahe na karaniwang tulad ng isang paksa, upang ang bawat mensahe ay maipadala sa isang hiwalay na system na interesado sa mga mensaheng ito, ngunit kung saan ang bawat sistema ay maaaring tumukoy ng ilang mga mamimili na tumatanggap ng mga papasok na mensahe, na parang isang pila. Ang uri ng pagbasa sa kasong ito ay βˆ’ isang beses para sa bawat stakeholder. Ang mga hybrid na destinasyong ito ay kadalasang nangangailangan ng tibay upang kung ang isang mamimili ay magdiskonekta, ang mga mensahe na ipinadala sa oras na iyon ay tinatanggap kapag ang mamimili ay muling kumonekta.

Ang mga hybrid na modelo ay hindi bago at maaaring ilapat sa karamihan ng mga sistema ng pagmemensahe, kabilang ang ActiveMQ (sa pamamagitan ng virtual o pinagsama-samang mga patutunguhan na pinagsasama ang mga paksa at pila) at Kafka (implicitly, bilang isang pangunahing katangian ng disenyo ng patutunguhan nito).

Ngayon na mayroon na tayong ilang pangunahing terminolohiya at pag-unawa sa kung para saan ang isang sistema ng pagmemensahe ay maaaring maging kapaki-pakinabang, tingnan natin ang mga detalye.

Tapos na ang pagsasalin: tele.gg/middle_java

Susunod na isinalin na bahagi: Kabanata 3. Kafka

Upang patuloy ...

Pinagmulan: www.habr.com

Magdagdag ng komento