На танҳо коркард: Чӣ гуна мо аз Kafka Streams пойгоҳи додаи тақсимшуда сохтем ва аз он чӣ ба вуҷуд омад

Эй Ҳабр!

Хотиррасон мекунем, ки аз паи китоб дар бораи Кафка дар бораи китобхона як асари шавковар чоп кардем API Streams Кафка.

На танҳо коркард: Чӣ гуна мо аз Kafka Streams пойгоҳи додаи тақсимшуда сохтем ва аз он чӣ ба вуҷуд омад

Ҳоло, ҷомеа танҳо ҳудуди ин абзори пурқувватро меомӯзад. Инак, чанде пеш маколае чоп шуд, ки тарчумаи онро бо шумо шинос карданием. Муаллиф аз таҷрибаи худ нақл мекунад, ки чӣ тавр Кафка Streams-ро ба анбори додаҳои тақсимшуда табдил додан мумкин аст. Аз хондан лаззат баред!

Китобхонаи Apache Ҷараёни Кафка дар саросари ҷаҳон дар корхонаҳо барои коркарди ҷараёни тақсимшуда дар болои Apache Kafka истифода мешавад. Яке аз ҷанбаҳои қадрношудаи ин чаҳорчӯба он аст, ки он ба шумо имкон медиҳад, ки ҳолати маҳаллиро дар асоси коркарди ришта нигоҳ доред.

Дар ин мақола, ман ба шумо мегӯям, ки чӣ гуна ширкати мо тавонист ин имкониятро ҳангоми таҳияи маҳсулот барои амнияти барномаҳои абрӣ самаранок истифода барад. Бо истифода аз ҷараёни Кафка, мо хидматрасониҳои муштараки давлатиро эҷод кардем, ки ҳар яки онҳо ҳамчун манбаи ба хатогиҳо таҳаммулпазир ва дастраси маълумоти боэътимод дар бораи ҳолати объектҳо дар система хидмат мекунанд. Барои мо ин ҳам аз ҷиҳати эътимоднокӣ ва ҳам аз ҷиҳати осонии дастгирӣ як қадам ба пеш аст.

Агар шумо ба равиши алтернативӣ таваҷҷӯҳ дошта бошед, ки ба шумо имкон медиҳад, ки пойгоҳи ягонаи марказиро барои дастгирии ҳолати расмии объектҳои худ истифода баред, онро хонед, ҷолиб хоҳад буд...

Чаро мо фикр мекардем, ки вақти он расидааст, ки тарзи корамонро бо давлати муштарак тағир диҳем

Ба мо лозим буд, ки ҳолати объектҳои гуногунро дар асоси гузоришҳои агент нигоҳ дорем (масалан: оё сайт таҳти ҳамла қарор дошт)? Пеш аз гузаштан ба Streams Кафка, мо аксар вақт ба як махзани ягонаи марказӣ (+ API Service) барои идоракунии давлатӣ такя мекардем. Ин усул камбудиҳои худро дорад: вазъиятҳои пуршиддат сана нигоҳ доштани мувофиқат ва ҳамоҳангсозӣ як мушкилоти воқеӣ мегардад. Пойгоҳи маълумот метавонад ба монеа мубаддал гардад ё ба он дучор ояд ҳолати мусобиқа ва аз ногаҳонӣ азоб мекашанд.

На танҳо коркард: Чӣ гуна мо аз Kafka Streams пойгоҳи додаи тақсимшуда сохтем ва аз он чӣ ба вуҷуд омад

Тасвири 1: Сенарияи маъмулии ҳолати тақсимшуда пеш аз гузариш ба
Ҷараёни Кафка ва Кафка: агентҳо нуқтаи назари худро тавассути API иртибот медиҳанд, ҳолати навшуда тавассути пойгоҳи додаҳои марказӣ ҳисоб карда мешавад

Бо Кафка Streams вохӯред, ки эҷоди микросервисҳои муштараки давлатиро осон мекунад

Тақрибан як сол пеш мо тасмим гирифтем, ки барои ҳалли ин масъалаҳо сенарияҳои муштараки давлатиамонро аз назар гузаронем. Мо дарҳол тасмим гирифтем, ки Streams Кафкаро санҷем - мо медонем, ки он то чӣ андоза миқёспазир, дастрас ва ба хатоҳо таҳаммулпазир аст, чӣ гуна функсияҳои ҷараёнро ғанӣ дорад (тағйиротҳо, аз ҷумла аҳдҳои давлатӣ). Маҳз он чизе ки ба мо лозим буд, нагуфтаем, ки системаи паёмнависӣ дар Кафка то чӣ андоза пухта ва боэътимод шудааст.

Ҳар яке аз микросервисҳои давлатӣ, ки мо офаридаем, дар болои мисоли Кафка Streams бо топологияи хеле содда сохта шудаанд. Он аз 1) сарчашма иборат буд 2) протсессор бо захираи доимии калидҳо 3) раковина:

На танҳо коркард: Чӣ гуна мо аз Kafka Streams пойгоҳи додаи тақсимшуда сохтем ва аз он чӣ ба вуҷуд омад

Тасвири 2: Топологияи пешфарзии инстансияҳои ҷараёнҳои мо барои хидматҳои микросервисҳои давлатӣ. Дар хотир доред, ки дар ин ҷо як репозиторий мавҷуд аст, ки метамаълумоти банақшагириро дар бар мегирад.

Дар ин равиши нав, агентҳо паёмҳоеро эҷод мекунанд, ки ба мавзӯи манбаъ ворид карда мешаванд ва истеъмолкунандагон, масалан, хидмати огоҳиномаи почта - ҳолати муштараки ҳисобшударо тавассути танӯр (мавзуи баромад) мегиранд.

На танҳо коркард: Чӣ гуна мо аз Kafka Streams пойгоҳи додаи тақсимшуда сохтем ва аз он чӣ ба вуҷуд омад

Расми 3: Ҷараёни вазифаҳои намунаи нав барои сенария бо хидматрасониҳои муштарак: 1) агент паёмеро тавлид мекунад, ки ба мавзӯи сарчашмаи Кафка мерасад; 2) хидматрасонии хурд бо ҳолати муштарак (бо истифода аз ҷараёни Кафка) онро коркард мекунад ва ҳолати ҳисобшударо ба мавзӯи ниҳоии Кафка менависад; пас аз он 3) истеъмолкунандагон ҳолати навро қабул мекунанд

Ҳей, ин мағозаи дарунсохт дар асл хеле муфид аст!

Тавре ки дар боло зикр гардид, топологияи давлатии мо дорои мағозаи калидӣ мебошад. Мо якчанд вариантҳоро барои истифодаи он пайдо кардем ва дутои онҳо дар зер тавсиф карда мешаванд.

Варианти №1: Барои ҳисобҳо мағозаи арзишҳои калидиро истифода баред

Аввалин мағозаи арзиши калидии мо дорои маълумоти ёрирасоне буд, ки барои ҳисобҳо лозим буд. Масалан, дар баъзе мавридхо давлати муштарак бо принципи «аксарияти овозхо» муайян карда мешуд. Анбор метавонад ҳама гузоришҳои охирини агентро дар бораи ҳолати ягон объект нигоҳ дорад. Сипас, вақте ки мо аз ин ё он агент гузориши нав гирифтем, мо метавонем онро захира кунем, гузоришҳоро аз ҳама агентҳои дигар дар бораи ҳолати ҳамон объект аз нигаҳдорӣ гирем ва ҳисобро такрор кунем.
Дар расми 4 дар зер нишон дода шудааст, ки чӣ тавр мо калид/мағозаи арзишро ба усули коркарди протсессор фош кардем, то паёми нав коркард шавад.

На танҳо коркард: Чӣ гуна мо аз Kafka Streams пойгоҳи додаи тақсимшуда сохтем ва аз он чӣ ба вуҷуд омад

Тасвири 4: Мо дастрасиро ба мағозаи арзишҳои калидӣ барои усули коркарди протсессор мекушоем (баъд аз ин, ҳар як скрипте, ки бо ҳолати муштарак кор мекунад, бояд усулро амалӣ кунад. doProcess)

Варианти №2: Эҷоди API CRUD дар болои ҷараёни Кафка

Пас аз таъсис додани ҷараёни асосии вазифаҳои худ, мо кӯшиш кардем, ки API-и RESTful CRUD-ро барои микросервисҳои муштараки давлатиамон нависем. Мо мехостем, ки ҳолати баъзе ё ҳама объектҳоро барқарор кунем ва инчунин ҳолати объектро муқаррар кунем ё хориҷ кунем (барои дастгирии пуштибонӣ муфид).

Барои дастгирии ҳама API-ҳои Get State, вақте ки ба мо лозим буд, ки ҳолати коркардро дубора ҳисоб кунем, мо онро дар мағозаи дарунсохташудаи калидҳо барои муддати тӯлонӣ нигоҳ медоштем. Дар ин ҳолат, татбиқи чунин API бо истифода аз як мисоли ягонаи Streams Кафка, тавре ки дар рӯйхат дар зер нишон дода шудааст, хеле содда мешавад:

На танҳо коркард: Чӣ гуна мо аз Kafka Streams пойгоҳи додаи тақсимшуда сохтем ва аз он чӣ ба вуҷуд омад

Тасвири 5: Истифодаи мағозаи дарунсохт-арзиш барои ба даст овардани ҳолати пешакӣ ҳисобшудаи объект

Навсозии ҳолати объект тавассути API низ татбиқи осон аст. Асосан, танҳо ба шумо лозим аст, ки продюсери Кафка эҷод кунед ва онро барои сабти сабти дорои ҳолати нав истифода баред. Ин кафолат медиҳад, ки ҳама паёмҳои тавассути API тавлидшуда ҳамон тавре коркард мешаванд, ки аз дигар истеҳсолкунандагон (масалан, агентҳо) гирифта мешаванд.

На танҳо коркард: Чӣ гуна мо аз Kafka Streams пойгоҳи додаи тақсимшуда сохтем ва аз он чӣ ба вуҷуд омад

Тасвири 6: Шумо метавонед ҳолати объектро бо истифода аз истеҳсолкунандаи Кафка танзим кунед

Мушкилоти хурд: Кафка қисмҳои зиёде дорад

Баъдан, мо мехостем, ки сарбории коркардро тақсим кунем ва дастрасиро тавассути пешниҳоди кластери хидматрасониҳои муштараки давлатӣ дар як сенария беҳтар созем. Насбкунӣ осон буд: вақте ки мо ҳама мисолҳоро барои кор дар зери як ID-и барнома (ва ҳамон серверҳои пурборкунанда) танзим кардем, қариб ҳама чизи дигар ба таври худкор анҷом дода мешуд. Мо инчунин муайян кардем, ки ҳар як мавзӯи сарчашма аз якчанд қисмҳо иборат хоҳад буд, то ба ҳар як мисол як зермаҷмӯаи чунин қисмҳо таъин карда шавад.

Ман инчунин ёдовар мешавам, ки як нусхаи эҳтиётии мағозаи давлатӣ маъмул аст, то масалан, дар сурати барқароршавӣ пас аз нокомӣ, ин нусхаро ба нусхаи дигар интиқол диҳед. Барои ҳар як мағозаи давлатӣ дар Streams Кафка, мавзӯи такрорӣ бо сабти тағирот (ки навсозиҳои маҳаллиро пайгирӣ мекунад) эҷод карда мешавад. Хамин тавр, Кафка магозаи давлатиро доимо захира мекунад. Аз ин рӯ, дар сурати аз кор баромадани ин ё он инстанси Кафка Streams, мағозаи давлатиро метавон ба зудӣ дар инстанси дигар барқарор кард, ки қисмҳои мувофиқ ба он ҷо хоҳанд рафт. Санҷишҳои мо нишон доданд, ки ин кор дар тӯли чанд сония анҷом дода мешавад, ҳатто агар дар мағоза миллионҳо сабтҳо мавҷуд бошанд.

Гузариш аз як хидматрасонии ягонаи дорои ҳолати муштарак ба кластери хидматрасониҳои хурд, татбиқи Get State API камтар ночиз мешавад. Дар ҳолати нав, мағозаи давлатии ҳар як хидматрасонии хурд танҳо як қисми тасвири умумиро дар бар мегирад (он объектҳое, ки калидҳояшон ба қисмати мушаххас харита шуда буданд). Мо бояд муайян кунем, ки кадом намуна ҳолати объекти ба мо лозимиро дар бар мегирад ва мо инро дар асоси метамаълумоти ришта иҷро кардем, тавре ки дар зер нишон дода шудааст:

На танҳо коркард: Чӣ гуна мо аз Kafka Streams пойгоҳи додаи тақсимшуда сохтем ва аз он чӣ ба вуҷуд омад

Расми 7: Бо истифода аз метамаълумоти ҷараён, мо муайян мекунем, ки аз кадом мисол ҳолати объекти дилхоҳро пурсед; равиши шабеҳ бо GET ALL API истифода шудааст

Хулосаҳои асосӣ

Мағозаҳои давлатӣ дар Кафка Streams метавонанд ҳамчун пойгоҳи додаҳои тақсимшуда хидмат кунанд,

  • доимо дар Кафка такрор карда мешавад
  • API-и CRUD метавонад ба осонӣ дар болои чунин система сохта шавад
  • Мубориза бо қисмҳои сершумор каме мушкилтар аст
  • Инчунин мумкин аст, ки як ё якчанд мағозаҳои давлатиро ба топологияи ҷараён барои нигоҳ доштани маълумоти ёрирасон илова кунед. Ин хосият метавонад барои:
  • Нигоҳдории дарозмуддати маълумоте, ки барои ҳисобҳо ҳангоми коркарди ҷараён лозим аст
  • Нигоҳдории дарозмуддати маълумоте, ки метавонад дафъаи оянда дар таъмин намудани нусхаи ҷараён муфид бошад
  • бештар ...

Ин ва дигар бартариҳо Ҷараёни Кафкаро барои нигоҳ доштани ҳолати ҷаҳонӣ дар системаи тақсимшуда ба монанди системаи мо хеле мувофиқ мекунанд. Кафка Streams дар истеҳсолот хеле боэътимод будани худро исбот кард (аз замони ҷойгиркунии он мо амалан ҳеҷ гуна талафоти паёмро надоштем) ва мо итминон дорем, ки қобилиятҳои он дар ин ҷо бас намешаванд!

Манбаъ: will.com

Илова Эзоҳ