Mhux biss l-ipproċessar: Kif għamilna database mqassma minn Kafka Streams, u x'ġara minnha

Ħej Habr!

Infakkrukom li wara l-ktieb dwar Kafka ppubblikajna xogħol daqstant interessanti dwar il-librerija Kafka Streams API.

Mhux biss l-ipproċessar: Kif għamilna database mqassma minn Kafka Streams, u x'ġara minnha

Għalissa, il-komunità qed titgħallem il-limiti ta 'din l-għodda qawwija. Għalhekk, dan l-aħħar ġie ppubblikat artiklu, li t-traduzzjoni tiegħu nixtiequ nintroduċukom. Mill-esperjenza tiegħu stess, l-awtur jgħidlek kif iddawwar Kafka Streams f'ħażna ta 'dejta distribwita. Igawdu l-qari!

Librerija Apache Kafka Streams użat mad-dinja kollha f'intrapriżi għall-ipproċessar ta 'flussi distribwiti fuq Apache Kafka. Wieħed mill-aspetti sottovalutati ta 'dan il-qafas huwa li jippermettilek taħżen l-istat lokali prodott ibbażat fuq l-ipproċessar tal-ħajt.

F'dan l-artikolu, ser ngħidlek kif il-kumpanija tagħna rnexxielha tuża din l-opportunità bi profitt meta tiżviluppa prodott għas-sigurtà tal-applikazzjoni tal-cloud. Bl-użu Kafka Streams, ħloqna mikroservizzi tal-istat kondiviżi, li kull wieħed minnhom iservi bħala sors tolleranti għall-ħsarat u disponibbli ħafna ta’ informazzjoni affidabbli dwar l-istat tal-oġġetti fis-sistema. Għalina, dan huwa pass 'il quddiem kemm f'termini ta' affidabbiltà kif ukoll faċilità ta 'appoġġ.

Jekk inti interessat f'approċċ alternattiv li jippermettilek tuża database ċentrali waħda biex tappoġġja l-istat formali tal-oġġetti tiegħek, aqrah, ikun interessanti...

Għaliex ħsibna li kien wasal iż-żmien li nbiddlu l-mod kif naħdmu mal-istat kondiviż

Kellna nżommu l-istat ta 'diversi oġġetti bbażati fuq rapporti tal-aġenti (per eżempju: is-sit kien taħt attakk)? Qabel ma ngħaddu għal Kafka Streams, ħafna drabi konna niddependu fuq database ċentrali waħda (+ API tas-servizz) għall-ġestjoni tal-istat. Dan l-approċċ għandu l-iżvantaġġi tiegħu: data sitwazzjonijiet intensivi iż-żamma tal-konsistenza u s-sinkronizzazzjoni ssir sfida reali. Id-database tista' ssir konġestjoni jew tispiċċa fiha kundizzjoni tat-tellieqa u jbatu minn imprevedibbiltà.

Mhux biss l-ipproċessar: Kif għamilna database mqassma minn Kafka Streams, u x'ġara minnha

Figura 1: Xenarju tipiku ta' stat maqsum li jidher qabel it-tranżizzjoni lejn
Kafka u Kafka Streams: l-aġenti jikkomunikaw il-fehmiet tagħhom permezz tal-API, l-istat aġġornat huwa kkalkulat permezz ta’ database ċentrali

Iltaqa' ma' Kafka Streams, li jagħmilha faċli biex jinħolqu mikroservizzi tal-istat kondiviżi

Madwar sena ilu, iddeċidejna li nagħtu ħarsa sew lejn ix-xenarji tal-istat kondiviżi tagħna biex nindirizzaw dawn il-kwistjonijiet. Immedjatament iddeċidejna li nippruvaw Kafka Streams - nafu kemm hi skalabbli, disponibbli ħafna u tolleranti għall-ħsarat, liema funzjonalità rikka ta 'streaming għandha (trasformazzjonijiet, inklużi dawk stateful). Eżatt dak li kellna bżonn, biex ma nsemmux kemm is-sistema tal-messaġġi saret matura u affidabbli f'Kafka.

Kull wieħed mill-mikroservizzi stateful li ħloqna nbniet fuq istanza Kafka Streams b'topoloġija pjuttost sempliċi. Din kienet tikkonsisti minn 1) sors 2) proċessur b'maħżen persistenti ta' valur ewlieni 3) sink:

Mhux biss l-ipproċessar: Kif għamilna database mqassma minn Kafka Streams, u x'ġara minnha

Figura 2: It-topoloġija default tal-istanzi ta' streaming tagħna għal mikroservizzi bi stat. Innota li hawn ukoll repożitorju li fih metadejta tal-ippjanar.

F'dan l-approċċ il-ġdid, l-aġenti jikkomponu messaġġi li jiddaħħlu fis-suġġett tas-sors, u l-konsumaturi—jiġifieri, servizz ta 'notifika bil-posta—jirċievu l-istat kondiviż ikkalkulat permezz tas-sink (suġġett tal-ħruġ).

Mhux biss l-ipproċessar: Kif għamilna database mqassma minn Kafka Streams, u x'ġara minnha

Figura 3: Eżempju ġdid tal-fluss tal-kompiti għal xenarju b'mikroservizzi kondiviżi: 1) l-aġent jiġġenera messaġġ li jasal fis-suġġett tas-sors Kafka; 2) mikroservizz bi stat kondiviż (bl-użu Kafka Streams) jipproċessah u jikteb l-istat ikkalkulat fis-suġġett Kafka finali; wara li 3) il-konsumaturi jaċċettaw l-istat il-ġdid

Ħej, dan il-maħżen ta' valur ewlieni integrat huwa fil-fatt utli ħafna!

Kif imsemmi hawn fuq, it-topoloġija tal-istat kondiviża tagħna fiha maħżen tal-valur ewlieni. Sibna diversi għażliet għall-użu tiegħu, u tnejn minnhom huma deskritti hawn taħt.

Għażla #1: Uża maħżen tal-valur ewlieni għall-kalkoli

L-ewwel maħżen tal-valur ewlieni tagħna kien fih id-dejta awżiljarja li kellna bżonn għall-kalkoli. Pereżempju, f'xi każijiet l-istat kondiviż kien determinat mill-prinċipju ta' "voti tal-maġġoranza". Ir-repożitorju jista' jżomm l-aħħar rapporti tal-aġenti kollha dwar l-istatus ta' xi oġġett. Imbagħad, meta rċevejna rapport ġdid minn aġent jew ieħor, nistgħu nsalvawh, inġibu rapporti mill-aġenti l-oħra kollha dwar l-istat tal-istess oġġett mill-ħażna, u rrepeti l-kalkolu.
Il-Figura 4 hawn taħt turi kif esponejna l-maħżen taċ-ċavetta/valur għall-metodu ta 'proċessar tal-proċessur sabiex il-messaġġ il-ġdid ikun jista' mbagħad jiġi pproċessat.

Mhux biss l-ipproċessar: Kif għamilna database mqassma minn Kafka Streams, u x'ġara minnha

Illustrazzjoni 4: Aħna niftħu aċċess għall-maħżen tal-valur ewlieni għall-metodu tal-ipproċessar tal-proċessur (wara dan, kull skript li jaħdem bi stat kondiviż għandu jimplimenta l-metodu doProcess)

Għażla #2: Il-ħolqien ta' API CRUD fuq Kafka Streams

Wara li stabbilixxa l-fluss tal-kompitu bażiku tagħna, bdejna nippruvaw niktbu API CRUD RESTful għall-mikroservizzi tal-istat kondiviżi tagħna. Ridna li nkunu nistgħu nġibu l-istat ta 'uħud jew l-oġġetti kollha, kif ukoll nissettjaw jew ineħħu l-istat ta' oġġett (utli għall-appoġġ backend).

Biex tappoġġja l-APIs Get State kollha, kull meta kellna bżonn nikkalkulaw mill-ġdid l-istat waqt l-ipproċessar, ħżinha f'maħżen ta 'valur ewlieni integrat għal żmien twil. F'dan il-każ, isir pjuttost sempliċi li timplimenta tali API bl-użu ta 'istanza waħda ta' Kafka Streams, kif muri fil-lista hawn taħt:

Mhux biss l-ipproċessar: Kif għamilna database mqassma minn Kafka Streams, u x'ġara minnha

Figura 5: L-użu tal-maħżen tal-valur taċ-ċavetta inkorporat biex jinkiseb l-istat ikkalkulat minn qabel ta 'oġġett

L-aġġornament tal-istat ta 'oġġett permezz tal-API huwa wkoll faċli biex jiġi implimentat. Bażikament, kull ma trid tagħmel hu li toħloq produttur Kafka u tużah biex tagħmel rekord li jkun fih l-istat il-ġdid. Dan jiżgura li l-messaġġi kollha ġġenerati permezz tal-API jiġu pproċessati bl-istess mod bħal dawk riċevuti minn produtturi oħra (eż. aġenti).

Mhux biss l-ipproċessar: Kif għamilna database mqassma minn Kafka Streams, u x'ġara minnha

Figura 6: Tista 'tissettja l-istat ta' oġġett billi tuża l-produttur Kafka

Kumplikazzjoni żgħira: Kafka għandu ħafna diviżorji

Sussegwentement, ridna nqassmu t-tagħbija tal-ipproċessar u ntejbu d-disponibbiltà billi nipprovdu grupp ta 'mikroservizzi ta' stat kondiviż għal kull xenarju. Is-setup kien faċli: ladarba kkonfigurajna l-istanzi kollha biex jaħdmu taħt l-istess ID tal-applikazzjoni (u l-istess servers bootstrap), kważi kull ħaġa oħra saret awtomatikament. Aħna speċifikajna wkoll li kull suġġett sors ikun jikkonsisti f'diversi diviżorji, sabiex kull istanza tkun tista' tiġi assenjata subsett ta' tali diviżorji.

Se nsemmi wkoll li hija prattika komuni li tagħmel kopja ta 'backup tal-maħżen tal-istat sabiex, pereżempju, f'każ ta' rkupru wara falliment, tittrasferixxi din il-kopja għal istanza oħra. Għal kull maħżen tal-istat f'Kafka Streams, tinħoloq suġġett replikat b'reġistru tal-bidliet (li jsegwi aġġornamenti lokali). Għalhekk, Kafka kontinwament jappoġġja l-maħżen tal-istat. Għalhekk, fil-każ ta 'falliment ta' każ wieħed jew ieħor ta 'Kafka Streams, il-maħżen tal-istat jista' jiġi rrestawrat malajr f'istanza oħra, fejn se jmorru l-ħitan korrispondenti. It-testijiet tagħna wrew li dan isir fi ftit sekondi, anke jekk hemm miljuni ta’ rekords fil-maħżen.

Nimxu minn mikroservizz wieħed bi stat kondiviż għal raggruppament ta 'mikroservizzi, isir inqas trivjali li timplimenta l-API Get State. Fis-sitwazzjoni l-ġdida, il-maħżen tal-istat ta 'kull mikroservizz fih biss parti mill-istampa ġenerali (dawk l-oġġetti li ċ-ċwievet tagħhom kienu mmappjati għal partizzjoni speċifika). Kellna niddeterminaw liema istanza kien fiha l-istat tal-oġġett li kellna bżonn, u għamilna dan ibbażat fuq il-metadata tal-ħajt, kif muri hawn taħt:

Mhux biss l-ipproċessar: Kif għamilna database mqassma minn Kafka Streams, u x'ġara minnha

Figura 7: Bl-użu tal-metadata tan-nixxiegħa, aħna niddeterminaw minn liema istanza nistaqsu l-istat tal-oġġett mixtieq; intuża approċċ simili mal-API GET ALL

Sejbiet ewlenin

Il-ħwienet tal-istat f'Kafka Streams jistgħu jservu bħala database distribwita de facto,

  • kontinwament replikat f’Kafka
  • API CRUD tista' faċilment tinbena fuq sistema bħal din
  • L-immaniġġjar ta 'diviżorji multipli huwa ftit aktar ikkumplikat
  • Huwa wkoll possibbli li żżid maħżen tal-istat wieħed jew aktar mat-topoloġija tal-istrimjar biex taħżen data awżiljarja. Din l-għażla tista’ tintuża għal:
  • Ħażna fit-tul tad-dejta meħtieġa għall-kalkoli waqt l-ipproċessar tan-nixxiegħa
  • Ħażna fit-tul ta' data li tista' tkun utli ladarba li jmiss tiġi pprovduta l-istanza ta' streaming
  • hafna aktar...

Dawn u vantaġġi oħra jagħmlu Kafka Streams adattati tajjeb għaż-żamma tal-istat globali f'sistema distribwita bħal tagħna. Kafka Streams wera li huwa affidabbli ħafna fil-produzzjoni (konna prattikament ma kellna l-ebda telf ta 'messaġġi minn meta użajna), u aħna kunfidenti li l-kapaċitajiet tiegħu mhux se jieqfu hemm!

Sors: www.habr.com

Żid kumment