Разуменне брокераў паведамленняў. Вывучэнне механікі абмену паведамленнямі з дапамогай ActiveMQ і Kafka. Кіраўнік 1

Усім прывітанне!

Пачаў пераклад невялікай кнігі:
«Understanding Message Brokers»,
аўтар: Jakub Korab, выдавецтва: O'Reilly Media, Inc., дата выдання: June 2017, ISBN: 9781492049296.

З увядзення да кнігі:
»... Гэтая кніга навучыць вас разважаць аб сістэмах абмену паведамленнямі на брокерах, параўноўваючы і супрацьпастаўляючы дзве папулярныя тэхналогіі брокераў: Apache ActiveMQ і Apache Kafka. Тут будуць выкладзены прыклады выкарыстання і стымулы распрацоўкі, якія прывялі да таго, што іх распрацоўшчыкі выкарыстоўвалі зусім розныя падыходы да адной і той жа вобласці – абмену паведамленнямі паміж сістэмамі з прамежкавым брокерам. Мы разгледзім гэтыя тэхналогіі з нуля і вылучым уплыў розных варыянтаў дызайну на гэтым шляху. Вы атрымаеце глыбокае разуменне абодвух прадуктаў, разуменне таго, як іх трэба і не трэба выкарыстоўваць, і разуменне таго, на што трэба звяртаць увагу пры разглядзе іншых тэхналогій абмену паведамленнямі ў будучыні. ... »

Перакладзеныя да цяперашняга моманту часткі:
Кіраўнік 1. Увядзенне
Кіраўнік 3. Kafka

Буду выкладваць закончаныя главы па меры пераводу.

ГЛАВА 1

Увядзенне

Міжсістэмны абмен паведамленнямі – гэта адна з найменш разумеемых абласцей ІТ. Як распрацоўшчык або архітэктар, вы можаце быць добра знаёмыя з рознымі фрэймфоркамі і базамі дадзеных. Аднак, цалкам верагодна, што ў вас ёсць толькі мімалётнае знаёмства з тым, як працуюць тэхналогіі абмену паведамленнямі, заснаваныя на брокеры. Калі вы так сябе і адчуваеце, не хвалюйцеся, вы ў добрай кампаніі.

Людзі звычайна кантактуюць з інфраструктурай абмену паведамленнямі вельмі абмежавана. Нярэдка падлучаюцца да сістэмы, створанай даўным-даўно, ці загружаюць дыстрыбутыў з інтэрнэту, усталёўваюць яго ў ПРАМ і пачынаюць пісаць пад яго код. Пасля запуску інфраструктуры ў ПРАМ, вынікі могуць быць неадназначнымі: страта паведамленняў пры збоях, адпраўка не працуе так, як вы чакалі, або брокеры "падвешваюць" вашых прад'юсараў або не адпраўляюць паведамленні вашым спажыўцам.

Гучыць знаёма?

Распаўсюджаны сцэнар, калі ваш код абмену паведамленнямі працуе выдатна, да пары да часу. Пакуль не перастае працаваць. Гэты перыяд усыпляе пільнасць і дае ілжывае пачуццё бяспекі, што прыводзіць да яшчэ большага кода, заснаванаму на ілжывых уяўленнях аб фундаментальных паводзінах тэхналогіі. Калі нешта пачынае ісці не так, вы сутыкаецеся з няёмкай праўдай: што вы сапраўды не зразумелі базавыя паводзіны прадукта ці кампрамісы, абраныя аўтарамі, такія як, прадукцыйнасць супраць надзейнасці, ці транзакцыйнасць супраць гарызантальнай маштабаванасці.

Без глыбокага разумення таго, як працуюць брокеры, людзі робяць, здавалася б, разумныя сцвярджэнні аб іх сістэмах абмену паведамленнямі, такія як:

  • Сістэма ніколі не страціць паведамленні
  • Паведамленні будуць апрацоўвацца паслядоўна
  • Даданне кансьюмераў зробіць сістэму хутчэй
  • Паведамленні будуць дастаўлены толькі адзін раз

Нажаль, некаторыя з гэтых сцвярджэнняў заснаваныя на здагадках, якія дастасавальныя толькі пры вызначаных абставінах, у той час як іншыя, проста няслушныя.

Гэтая кніга навучыць вас разважаць аб сістэмах абмену паведамленнямі, заснаваных на брокерах, параўноўваючы і супрацьпастаўляючы дзве папулярныя тэхналогіі брокераў: Apache ActiveMQ і Apache Kafka. Тут будуць выкладзены прыклады выкарыстання і стымулы распрацоўкі, якія прывялі да таго, што іх распрацоўшчыкі выкарыстоўвалі зусім розныя падыходы да адной і той жа вобласці – абмену паведамленнямі паміж сістэмамі з прамежкавым брокерам. Мы разгледзім гэтыя тэхналогіі з нуля і вылучым уплыў розных варыянтаў дызайну на гэтым шляху. Вы атрымаеце глыбокае разуменне абодвух прадуктаў, разуменне таго, як іх трэба і не трэба выкарыстоўваць, і разуменне таго, на што трэба звяртаць увагу пры разглядзе іншых тэхналогій абмену паведамленнямі ў будучыні.

Перш чым мы пачнем, давайце пройдземся па асновах.

Што такое Сістэма абмену паведамленнямі і навошта яна патрэбна

Каб два прыкладанні маглі мець зносіны сябар з сябрам, яны павінны спачатку вызначыць інтэрфейс. Вызначэнне гэтага інтэрфейсу ўключае выбар транспарта ці пратаколу, такога як HTTP, MQTT ці SMTP і ўзгадненне фарматаў паведамленняў, якімі будуць абменьвацца сістэмы. Гэта можа быць строгі працэс, такі як вызначэнне схемы XML з патрабаваннямі да выдаткаў на карысную нагрузку (payload) паведамлення, ці гэта можа быць значна меней фармальна, напрыклад, дамова паміж двума распрацоўнікамі аб тым, што некаторая частка HTTP-запыту будзе ўтрымоўваць ідэнтыфікатар кліента .

Пакуль фармат паведамленняў і парадак іх адпраўкі паміж сістэмамі ўзгоднены, яны змогуць узаемадзейнічаць адна з адной, не клапоцячыся аб рэалізацыі іншай сістэмы. Унутранасці гэтых сістэм, такія як мова праграмавання або выкарыстаны фрэймфорк, могуць з часам мяняцца. Да таго часу, пакуль падтрымліваецца сам кантракт, узаемадзеянне можа працягвацца без зменаў з іншага боку. Гэтыя дзве сістэмы эфектыўна расчэпленыя (падзеленыя) гэтым інтэрфейсам.

Сістэмы абмену паведамленнямі, як правіла, прадугледжваюць удзел пасярэдніка паміж дзвюма сістэмамі, якія ўзаемадзейнічаюць для далейшага расчаплення (падзелы) адпраўніка ад атрымальніка ці атрымальнікаў. Пры гэтым сістэма абмену паведамленнямі дазваляе адпраўніку адправіць паведамленне, не ведаючы, дзе знаходзіцца атрымальнік, ці актыўны ён ці колькі іх асобнікаў.

Разгледзім пару аналогій разнавіднасцяў праблем, якія вырашае сістэма абмену паведамленнямі, і ўвядзем некаторыя асноўныя тэрміны.

Кропка-кропка

Аляксандра ідзе на пошту, каб адправіць Адаму пасылку. Яна падыходзіць да акенца і ўручае супрацоўніку пасылку. Супрацоўнік забірае пасылку і выдае Аляксандры квітанцыю. Адаму не трэба быць дома ў момант адпраўкі пасылкі. Аляксандра ўпэўнена, што пасылка будзе дастаўлена Адаму ў нейкі момант у будучыні і можа працягваць займацца сваімі справамі. Пазней у нейкі момант Адам атрымлівае пасылку.

Гэта прыклад мадэлі абмену паведамленнямі кропка-кропка. Паштовае аддзяленне тут дзейнічае як механізм размеркавання пасылак, гарантуючы, што кожная пасылка будзе дастаўлена адзін раз. Выкарыстанне паштовага аддзялення аддзяляе акт адпраўкі пасылкі ад дастаўкі пасылкі.
У класічных сістэмах абмену паведамленнямі мадэль "кропка-кропка" рэалізуецца праз чарзе. Чарга дзейнічае, як буфер FIFO (першы ўвайшоў, першы выйшаў), на які можа падпісацца адзін ці некалькі спажыўцоў. Кожнае паведамленне дастаўляецца толькі аднаму з падпісаных спажыўцоў. Чэргі звычайна спрабуюць справядліва размяркоўваць паведамленні паміж спажыўцамі. Толькі адзін спажывец атрымае гэтае паведамленне.

Да чэргаў прымяняецца тэрмін «надзейныя» («durable»). Надзейнасць - гэта ўласцівасць сэрвісу, якое гарантуе, што сістэма абмену паведамленнямі будзе захоўваць паведамленні пры адсутнасці актыўных падпісчыкаў да таго часу, пакуль спажывец не падпішацца на чаргу для дастаўкі паведамленняў.

Надзейнасць часта блытаюць з персістэнтнасцю і, хоць гэтыя два тэрміны ўзаемазаменныя, яны выконваюць розныя функцыі. Персістэнтнасць вызначае, ці запісвае паведамленне сістэма абмену паведамленнямі ў які-небудзь роды сховішча паміж атрыманнем і адпраўкай яго спажыўцу. Паведамленні, якія адпраўляюцца ў чаргу, могуць быць ці не быць персістэнтнымі.
Абмен паведамленнямі тыпу "Кропка-кропка" выкарыстоўваецца, калі варыянт выкарыстання патрабуе аднаразовага дзеяння з паведамленнем. У якасці прыкладу можна прывесці занясенне сродкаў на рахунак або выкананне замовы на дастаўку. Мы абмяркуем пазней, чаму сістэма абмену паведамленнямі сама па сабе няздольная забяспечыць аднаразовую дастаўку і чаму чэргі могуць у лепшым выпадку забяспечыць гарантыю дастаўкі. хаця б адзін раз.

Выдавец-падпісчык

Габрыэла набірае нумар канферэнцыі. Пакуль яна падключана да канферэнцыі, яна чуе ўсё, што гаворыць спікер, разам з астатнімі ўдзельнікамі выкліку. Калі яна адключаецца, яна прапускае тое, што сказана. Пры паўторным падключэнні яна працягвае чуць, што гавораць.

Гэта прыклад мадэлі абмену паведамленнямі публікацыя-падпіска. Канферэнц-сувязь выступае як шырокавяшчальны механізм. Які казаў чалавек не клапоціцца аб тым, колькі людзей у цяперашні час далучыліся да званка - сістэма гарантуе, што любы які падключыўся ў сапраўдны момант пачуе, што гаворыцца.
У класічных сістэмах абмену паведамленнямі мадэль абмену паведамленнямі "публікацыя-падпіска" рэалізуецца праз топікі. Топік дае такі ж спосаб шырокавяшчання, як і механізм канферэнц-сувязі. Калі паведамленне адпраўляецца ў топік, яно размяркоўваецца па ўсіх падпісаных карыстальнікам.

Топікі звычайна ненадзейныя (nondurable). Як і слухач, які не чуе, што гаворыцца на канферэнц-званку, калі слухач адключаецца, падпісчыкі топіка прапускаюць любыя паведамленні, якія дасылаюцца ў той момант, калі яны знаходзяцца ў аўтаномным рэжыме. Па гэтай прычыне можна сказаць, што топікі падаюць гарантыю дастаўкі не больш за адзін раз для кожнага спажыўца.

Абмен паведамленнямі тыпу "публікацыя-падпіска" звычайна выкарыстоўваецца, калі паведамленні носяць інфармацыйны характар, і страта аднаго паведамлення - не асабліва значная. Напрыклад, топік можа перадаваць паказанні тэмпературы ад групы датчыкаў адзін раз у секунду. Сістэма, якая цікавіцца бягучай тэмпературай і якая падпісваецца на топік, не будзе перажываць, калі яна прапусціць паведамленне - іншае паступіць у бліжэйшы час.

гібрыдныя мадэлі

Вэб-сайт крамы змяшчае паведамленні аб замовах у "чаргу паведамленняў". Асноўным спажыўцом гэтых паведамленняў з'яўляецца выканаўчая сістэма. Акрамя таго, сістэма аўдыту павінна мець копіі гэтых паведамленняў аб замовах для наступнага адсочвання. Абедзве сістэмы не могуць прапускаць паведамленні, нават калі самі сістэмы на працягу некаторага часу недаступныя. Вэб-сайт не павінен ведаць аб іншых сістэмах.

Сцэнары выкарыстання часта патрабуюць сумяшчэння мадэляў абмену паведамленнямі "публікацыя-падпіска" і "кропка-кропка", напрыклад, калі некалькім сістэмам патрабуецца копія паведамлення, і для прадухілення страты паведамлення патрабуецца як надзейнасць, так і персістэнтнасць.

У гэтых выпадках патрабуецца адрасат (destination) (агульны тэрмін для чэргаў і топікаў), які размяркоўвае паведамленні ў асноўным як топік, так, што кожнае паведамленне адпраўляецца ў асобную сістэму, зацікаўленую ў гэтых паведамленнях, але і таксама ў якой кожная сістэма можа вызначыць некалькі спажыўцоў, якія атрымліваюць уваходныя паведамленні, што больш падобна на чаргу. Тып чытання ў гэтым выпадку - адзін раз для кожнага зацікаўленага боку. Гэтыя гібрыдныя адрасаты часта патрабуюць надзейнасці (durability), так што, калі спажывец адключаецца, паведамленні, якія адпраўляюцца тым часам, прымаюцца пасля паўторнага падлучэння спажыўца.

Гібрыдныя мадэлі не новыя і могуць ужывацца ў большасці сістэм абмену паведамленнямі, уключаючы як ActiveMQ (праз віртуальныя ці складовыя адрасаты, якія аб'ядноўваюць топікі і чэргі), так і Kafka (няяўна, як фундаментальная ўласцівасць дызайну яе адрасата).

Цяпер, калі ў нас ёсць некаторая базавая тэрміналогія і разуменне таго, для чаго нам магла б спатрэбіцца сістэма абмену паведамленнямі, давайце пяройдзем да дэталяў.

Пераклад выкананы: tele.gg/middle_java

Наступная перакладзеная частка: Кіраўнік 3. Kafka

Працяг будзе…

Крыніца: habr.com

Дадаць каментар