Äau Habr!
AtgÄdinÄm, ka sekojot grÄmatai par
PagaidÄm sabiedrÄ«ba tikai apgÅ«st Ŕī spÄcÄ«gÄ rÄ«ka robežas. TÄtad, nesen tika publicÄts raksts, ar kura tulkojumu mÄs vÄlamies jÅ«s iepazÄ«stinÄt. No savas pieredzes autors stÄsta, kÄ Kafka Streams pÄrvÄrst par izkliedÄtu datu krÄtuvi. Izbaudi lasÄ«Å”anu!
Apache bibliotÄka
Å ajÄ rakstÄ pastÄstÄ«Å”u, kÄ mÅ«su uzÅÄmumam izdevÄs izdevÄ«gi izmantot Å”o iespÄju, izstrÄdÄjot produktu mÄkoÅa aplikÄciju droŔībai. Izmantojot Kafka Streams, mÄs izveidojÄm koplietojamus stÄvokļa mikropakalpojumus, no kuriem katrs kalpo kÄ kļūdu izturÄ«gs un ļoti pieejams uzticamas informÄcijas avots par sistÄmas objektu stÄvokli. Mums tas ir solis uz priekÅ”u gan uzticamÄ«bas, gan atbalsta viegluma ziÅÄ.
Ja jÅ«s interesÄ alternatÄ«va pieeja, kas ļauj izmantot vienu centrÄlo datu bÄzi, lai atbalstÄ«tu jÅ«su objektu formÄlo stÄvokli, izlasiet to, tas bÅ«s interesanti...
KÄpÄc mÄs domÄjÄm, ka ir pienÄcis laiks mainÄ«t veidu, kÄ mÄs strÄdÄjam ar kopÄ«gu stÄvokli
Mums bija jÄuztur dažÄdu objektu stÄvoklis, pamatojoties uz aÄ£entu ziÅojumiem (piemÄram: vai vietne tika uzbrukta)? Pirms migrÄÅ”anas uz Kafka Streams mÄs bieži paļÄvÄmies uz vienu centrÄlo datu bÄzi (+ pakalpojuma API) valsts pÄrvaldÄ«bai. Å ai pieejai ir savi trÅ«kumi:
1. attÄls. Tipisks sadalÄ«tÄ stÄvokļa scenÄrijs, kas redzams pirms pÄrejas uz
Kafka un Kafka Streams: aÄ£enti paziÅo savus uzskatus, izmantojot API, atjauninÄtais stÄvoklis tiek aprÄÄ·inÄts, izmantojot centrÄlo datu bÄzi
Iepazīstieties ar Kafka Streams, kas atvieglo koplietojamo valsts mikropakalpojumu izveidi
ApmÄram pirms gada mÄs nolÄmÄm rÅ«pÄ«gi izskatÄ«t mÅ«su kopÄ«gos stÄvokļa scenÄrijus, lai risinÄtu Ŕīs problÄmas. MÄs nekavÄjoties nolÄmÄm izmÄÄ£inÄt Kafka Streams ā mÄs zinÄm, cik tas ir mÄrogojams, ļoti pieejams un izturÄ«gs pret kļūmÄm, kÄda ir bagÄtÄ«ga straumÄÅ”anas funkcionalitÄte (pÄrveidojumi, ieskaitot statusu). TieÅ”i tas, kas mums bija vajadzÄ«gs, nemaz nerunÄjot par to, cik nobriedusi un uzticama ir kļuvusi Kafkas ziÅojumapmaiÅas sistÄma.
Katrs mÅ«su izveidotais status mikropakalpojums tika izveidots, izmantojot Kafka Streams gadÄ«jumu ar diezgan vienkÄrÅ”u topoloÄ£iju. Tas sastÄvÄja no 1) avota 2) procesora ar pastÄvÄ«gu atslÄgu vÄrtÄ«bu krÄtuvi 3) izlietnes:
2. attÄls. MÅ«su straumÄÅ”anas gadÄ«jumu noklusÄjuma topoloÄ£ija statusu saturoÅ”iem mikropakalpojumiem. Å
emiet vÄrÄ, ka Å”eit ir arÄ« repozitorijs, kurÄ ir plÄnoÅ”anas metadati.
Å ajÄ jaunajÄ pieejÄ aÄ£enti veido ziÅojumus, kas tiek ievadÄ«ti avota tÄmÄ, un patÄrÄtÄji, piemÄram, pasta paziÅojumu pakalpojums, saÅem aprÄÄ·inÄto koplietoto stÄvokli caur izlietni (izvades tÄmu).
3. attÄls. Jauns uzdevuma plÅ«smas piemÄrs scenÄrijam ar koplietotiem mikropakalpojumiem: 1) aÄ£ents Ä£enerÄ ziÅojumu, kas nonÄk Kafkas avota tÄmÄ; 2) mikropakalpojums ar koplietojamo stÄvokli (izmantojot Kafka Streams) to apstrÄdÄ un ieraksta aprÄÄ·inÄto stÄvokli galÄ«gajÄ Kafkas tÄmÄ; pÄc kura 3) patÄrÄtÄji pieÅem jauno stÄvokli
Hei, Å”is iebÅ«vÄtais atslÄgu vÄrtÄ«bu veikals patiesÄ«bÄ ir ļoti noderÄ«gs!
KÄ minÄts iepriekÅ”, mÅ«su koplietojamÄ stÄvokļa topoloÄ£ija satur atslÄgu vÄrtÄ«bu krÄtuvi. MÄs atradÄm vairÄkas tÄ izmantoÅ”anas iespÄjas, un divas no tÄm ir aprakstÄ«tas tÄlÄk.
1. iespÄja: aprÄÄ·iniem izmantojiet atslÄgu vÄrtÄ«bu krÄtuvi
MÅ«su pirmajÄ atslÄgu vÄrtÄ«bu krÄtuvÄ bija aprÄÄ·iniem nepiecieÅ”amie papildu dati. PiemÄram, dažos gadÄ«jumos dalÄ«tÄ valsts tika noteikta pÄc "vairÄkuma balsu" principa. RepozitorijÄ varÄtu bÅ«t visi jaunÄkie aÄ£enta ziÅojumi par kÄda objekta statusu. PÄc tam, kad mÄs saÅÄmÄm jaunu ziÅojumu no viena vai otra aÄ£enta, mÄs varÄjÄm to saglabÄt, izgÅ«t no visiem citiem aÄ£entiem ziÅojumus par tÄ paÅ”a objekta stÄvokli no krÄtuves un atkÄrtot aprÄÄ·inu.
TÄlÄk 4. attÄlÄ parÄdÄ«ts, kÄ atslÄgu/vÄrtÄ«bu krÄtuve tika pakļauta procesora apstrÄdes metodei, lai pÄc tam varÄtu apstrÄdÄt jauno ziÅojumu.
4. attÄls. MÄs atveram piekļuvi atslÄgu vÄrtÄ«bu krÄtuvei procesora apstrÄdes metodei (pÄc tam katram skriptam, kas darbojas koplietotÄ stÄvoklÄ«, Ŕī metode ir jÄievieÅ” doProcess
)
2. iespÄja: CRUD API izveide Kafka straumju augÅ”daļÄ
Kad bija izveidota mÅ«su pamata uzdevumu plÅ«sma, mÄs sÄkÄm mÄÄ£inÄt rakstÄ«t RESTful CRUD API mÅ«su koplietotajiem valsts mikropakalpojumiem. MÄs vÄlÄjÄmies, lai varÄtu izgÅ«t dažu vai visu objektu stÄvokli, kÄ arÄ« iestatÄ«t vai noÅemt objekta stÄvokli (noderÄ«gs aizmugursistÄmas atbalstam).
Lai atbalstÄ«tu visas Get State API, kad mums apstrÄdes laikÄ bija jÄpÄrrÄÄ·ina stÄvoklis, mÄs to ilgstoÅ”i glabÄjÄm iebÅ«vÄtÄ atslÄgu vÄrtÄ«bu krÄtuvÄ. Å ajÄ gadÄ«jumÄ ir diezgan vienkÄrÅ”i ieviest Å”Ädu API, izmantojot vienu Kafka Streams gadÄ«jumu, kÄ parÄdÄ«ts tÄlÄk esoÅ”ajÄ sarakstÄ:
5. attÄls. IebÅ«vÄtÄ atslÄgu vÄrtÄ«bu krÄtuves izmantoÅ”ana, lai iegÅ«tu objekta iepriekÅ” aprÄÄ·inÄto stÄvokli
ArÄ« objekta stÄvokļa atjauninÄÅ”ana, izmantojot API, ir viegli Ä«stenojama. BÅ«tÄ«bÄ viss, kas jums jÄdara, ir izveidot Kafka producentu un izmantot to, lai izveidotu ierakstu, kas satur jauno stÄvokli. Tas nodroÅ”ina, ka visi ziÅojumi, kas Ä£enerÄti, izmantojot API, tiks apstrÄdÄti tÄpat kÄ tie, kas saÅemti no citiem ražotÄjiem (piemÄram, aÄ£entiem).
6. attÄls. Varat iestatÄ«t objekta stÄvokli, izmantojot Kafka producentu
Neliela komplikÄcija: Kafkai ir daudz nodalÄ«jumu
TÄlÄk mÄs vÄlÄjÄmies sadalÄ«t apstrÄdes slodzi un uzlabot pieejamÄ«bu, katram scenÄrijam nodroÅ”inot koplietojamo mikropakalpojumu kopu. IestatÄ«Å”ana bija vienkÄrÅ”a: tiklÄ«dz mÄs konfigurÄjÄm visas instances, lai tÄs darbotos ar vienu un to paÅ”u lietojumprogrammas ID (un tiem paÅ”iem sÄknÄÅ”anas serveriem), gandrÄ«z viss pÄrÄjais tika darÄ«ts automÄtiski. MÄs arÄ« norÄdÄ«jÄm, ka katra avota tÄma sastÄvÄs no vairÄkiem nodalÄ«jumiem, lai katrai instancei varÄtu pieŔķirt Å”Ädu nodalÄ«jumu apakÅ”kopu.
PieminÄÅ”u arÄ« to, ka ir ierasta prakse veidot valsts veikala rezerves kopiju, lai, piemÄram, atkopÅ”anas gadÄ«jumÄ pÄc kļūmes pÄrsÅ«tÄ«tu Å”o kopiju uz citu instanci. Katram Å”tata veikalam pakalpojumÄ Kafka Streams tiek izveidota atkÄrtota tÄma ar izmaiÅu žurnÄlu (kas izseko vietÄjos atjauninÄjumus). TÄdÄjÄdi Kafka pastÄvÄ«gi dublÄ valsts veikalu. TÄpÄc vienas vai otras Kafka Streams instances kļūmes gadÄ«jumÄ statusa veikalu var Ätri atjaunot citÄ instancÄ, kur nonÄks attiecÄ«gie nodalÄ«jumi. MÅ«su testi ir parÄdÄ«juÅ”i, ka tas tiek paveikts dažu sekunžu laikÄ, pat ja veikalÄ ir miljoniem ierakstu.
PÄrejot no viena mikropakalpojuma ar kopÄ«gu stÄvokli uz mikropakalpojumu kopu, Get State API ievieÅ”ana kļūst mazÄk triviÄla. JaunajÄ situÄcijÄ katra mikropakalpojuma stÄvokļa veikalÄ ir tikai daļa no kopÄjÄ attÄla (tie objekti, kuru atslÄgas tika kartÄtas uz noteiktu nodalÄ«jumu). Mums bija jÄnosaka, kurÄ instancÄ bija vajadzÄ«gÄ objekta stÄvoklis, un mÄs to izdarÄ«jÄm, pamatojoties uz pavediena metadatiem, kÄ parÄdÄ«ts tÄlÄk:
7. attÄls. Izmantojot straumes metadatus, mÄs nosakÄm, no kuras instances vaicÄt vÄlamÄ objekta stÄvokli; lÄ«dzÄ«ga pieeja tika izmantota ar GET ALL API
Galvenie secinÄjumi
Valsts veikali Kafka Streams var kalpot kÄ de facto izplatÄ«ta datubÄze,
- pastÄvÄ«gi replicÄts KafkÄ
- Å Ädai sistÄmai var viegli izveidot CRUD API
- VairÄku nodalÄ«jumu apstrÄde ir nedaudz sarežģītÄka
- StraumÄÅ”anas topoloÄ£ijai ir iespÄjams arÄ« pievienot vienu vai vairÄkus stÄvokļa krÄtuves, lai saglabÄtu papildu datus. Å o opciju var izmantot:
- AprÄÄ·iniem nepiecieÅ”amo datu ilgstoÅ”a glabÄÅ”ana straumes apstrÄdes laikÄ
- IlgtermiÅa datu glabÄÅ”ana, kas var bÅ«t noderÄ«ga nÄkamreiz, kad tiks nodroÅ”inÄta straumÄÅ”anas instance
- daudz vairÄk...
Å Ä«s un citas priekÅ”rocÄ«bas padara Kafka Streams piemÄrotu globÄlÄ stÄvokļa uzturÄÅ”anai tÄdÄ izplatÄ«tÄ sistÄmÄ kÄ mÅ«su. Kafka Streams ir izrÄdÄ«jies ļoti uzticams ražoÅ”anÄ (kopÅ” tÄ izvietoÅ”anas mÄs praktiski neesam zaudÄjuÅ”i ziÅojumus), un mÄs esam pÄrliecinÄti, ka tÄ iespÄjas neapstÄsies!
Avots: www.habr.com