Mitte ainult töötlemine: kuidas me Kafka Streamsist hajutatud andmebaasi tegime ja mis sellest tuli

Tere Habr!

Tuletame meelde, et jÀrgides raamatut umbes Kafka oleme avaldanud sama huvitava teose raamatukogust Kafka Streams API.

Mitte ainult töötlemine: kuidas me Kafka Streamsist hajutatud andmebaasi tegime ja mis sellest tuli

Praegu Ôpib kogukond selle vÔimsa tööriista piire tundma. Niisiis, hiljuti ilmus artikkel, mille tÔlget tahaksime teile tutvustada. Autor rÀÀgib oma kogemusest, kuidas muuta Kafka Streams hajutatud andmesalvestuseks. Nautige lugemist!

Apache raamatukogu Kafka ojad kasutatakse kogu maailmas ettevĂ”tetes hajutatud vootöötluseks peale Apache Kafka. Üks selle raamistiku alahinnatud aspekte on see, et see vĂ”imaldab salvestada niidi töötlemisel pĂ”hinevat kohalikku olekut.

Selles artiklis rÀÀgin teile, kuidas meie ettevĂ”ttel Ă”nnestus pilverakenduste turvalisuse toote arendamisel seda vĂ”imalust kasumlikult kasutada. Kafka Streamsi abil lĂ”ime jagatud oleku mikroteenused, millest igaĂŒks toimib tĂ”rketaluvusega ja vĂ€ga kĂ€ttesaadava usaldusvÀÀrse teabe allikana sĂŒsteemis olevate objektide oleku kohta. Meie jaoks on see samm edasi nii töökindluse kui ka toe lihtsuse osas.

Kui olete huvitatud alternatiivsest lĂ€henemisest, mis vĂ”imaldab teil kasutada ĂŒhtset keskandmebaasi, et toetada oma objektide formaalset seisukorda, lugege seda, see on huvitav...

Miks me arvasime, et on aeg muuta seda, kuidas me jagatud olekuga töötame?

Meil oli vaja sĂ€ilitada erinevate objektide seisukord agentide aruannete pĂ”hjal (nĂ€iteks: kas saiti rĂŒnnati)? Enne Kafka Streamsile ĂŒleminekut kasutasime oleku haldamisel sageli ĂŒhte keskandmebaasi (+ teenuse API). Sellel lĂ€henemisviisil on oma puudused: kohtingu intensiivsed olukorrad jĂ€rjepidevuse ja sĂŒnkroonimise sĂ€ilitamine muutub tĂ”eliseks vĂ€ljakutseks. Andmebaas vĂ”ib muutuda kitsaskohaks vĂ”i sattuda sinna rassi seisukord ja kannatavad ettearvamatuse kĂ€es.

Mitte ainult töötlemine: kuidas me Kafka Streamsist hajutatud andmebaasi tegime ja mis sellest tuli

Joonis 1: TĂŒĂŒpiline jagatud oleku stsenaarium, mida nĂ€hti enne ĂŒleminekut
Kafka ja Kafka Streams: agendid edastavad oma vaateid API kaudu, vÀrskendatud olek arvutatakse keskandmebaasi kaudu

Tutvuge Kafka Streamsiga, mis muudab jagatud osariigi mikroteenuste loomise lihtsaks

Umbes aasta tagasi otsustasime nende probleemide lahendamiseks oma ĂŒhiseid stsenaariume pĂ”hjalikult lĂ€bi vaadata. Otsustasime kohe proovida Kafka Streamsi – teame, kui skaleeritav, hĂ€sti kĂ€ttesaadav ja tĂ”rketaluvus see on, millised rikkalikud voogedastusfunktsioonid sellel on (teisendused, sealhulgas olekupĂ”hised). Just see, mida vajasime, rÀÀkimata sellest, kui kĂŒpseks ja usaldusvÀÀrseks on Kafka sĂ”numisĂŒsteem muutunud.

KĂ”ik meie loodud olekupĂ”hised mikroteenused ehitati ĂŒsna lihtsa topoloogiaga Kafka Streamsi eksemplari peale. See koosnes 1) allikast 2) pĂŒsiva vĂ”tmevÀÀrtuse hoidjaga protsessorist 3) valamust:

Mitte ainult töötlemine: kuidas me Kafka Streamsist hajutatud andmebaasi tegime ja mis sellest tuli

Joonis 2. Meie voogesituse eksemplaride vaiketopoloogia olekupÔhiste mikroteenuste jaoks. Pange tÀhele, et siin on ka hoidla, mis sisaldab planeerimise metaandmeid.

Selle uue lĂ€henemisviisi korral koostavad agendid sĂ”numeid, mis suunatakse lĂ€hteteemasse, ja tarbijad – nĂ€iteks meiliteatiste teenus – saavad arvutatud jagatud oleku lĂ€bi valamu (vĂ€ljundteema).

Mitte ainult töötlemine: kuidas me Kafka Streamsist hajutatud andmebaasi tegime ja mis sellest tuli

Joonis 3: Uus ĂŒlesandevoo nĂ€ide jagatud mikroteenustega stsenaariumi jaoks: 1) agent genereerib sĂ”numi, mis jĂ”uab Kafka lĂ€hteteema juurde; 2) jagatud olekuga mikroteenus (kasutades Kafka Streams) töötleb seda ja kirjutab arvutatud oleku lĂ”plikku Kafka teemasse; mille jĂ€rel 3) tarbijad aktsepteerivad uut olekut

Hei, see sisseehitatud vÔtmevÀÀrtuste pood on tegelikult vÀga kasulik!

Nagu eespool mainitud, sisaldab meie jagatud oleku topoloogia vÔtmevÀÀrtuste salvestust. Leidsime selle kasutamiseks mitu vÔimalust ja kahte neist kirjeldatakse allpool.

Valik nr 1: kasutage arvutusteks vÔtmevÀÀrtuste salvestust

Meie esimene vĂ”tmevÀÀrtuste pood sisaldas arvutusteks vajalikke abiandmeid. NĂ€iteks mĂ”nel juhul mÀÀrati jagatud riik "enamuse hÀÀlte" pĂ”himĂ”ttel. Hoidlas vĂ”iks olla kĂ”ik viimased agendiaruanded mĂ”ne objekti oleku kohta. SeejĂ€rel, kui saime ĂŒhelt vĂ”i teiselt agendilt uue aruande, saime selle salvestada, hankida salvestuselt kĂ”igi teiste agentide aruanded sama objekti oleku kohta ja arvutust korrata.
Alloleval joonisel 4 on nÀidatud, kuidas me avasime vÔtme/vÀÀrtuste hoidla protsessori töötlemismeetodile, et uut sÔnumit saaks seejÀrel töödelda.

Mitte ainult töötlemine: kuidas me Kafka Streamsist hajutatud andmebaasi tegime ja mis sellest tuli

Illustratsioon 4: avame protsessori töötlemismeetodi vÔtmevÀÀrtuste hoidlale juurdepÀÀsu (pÀrast seda peab iga jagatud olekuga töötav skript seda meetodit rakendama doProcess)

Valik nr 2: CRUD API loomine Kafka Streamsi peal

Olles loonud oma pĂ”hiĂŒlesannete voo, hakkasime meie jagatud riigi mikroteenuste jaoks proovima kirjutada RESTful CRUD API-d. Tahtsime, et oleks vĂ”imalik hankida mĂ”ne vĂ”i kĂ”igi objektide olekut, samuti mÀÀrata vĂ”i eemaldada objekti olekut (kasulik taustaprogrammi toe jaoks).

KĂ”igi Get State API-de toetamiseks salvestasime selle pikka aega sisseehitatud vĂ”tmevÀÀrtuste salves, kui meil oli vaja olek töötlemise ajal ĂŒmber arvutada. Sel juhul muutub sellise API juurutamine ĂŒhe Kafka Streamsi eksemplari abil ĂŒsna lihtsaks, nagu on nĂ€idatud allolevas loendis:

Mitte ainult töötlemine: kuidas me Kafka Streamsist hajutatud andmebaasi tegime ja mis sellest tuli

Joonis 5. Sisseehitatud vÔtmevÀÀrtuste salvestusruumi kasutamine objekti eelarvutatud oleku saamiseks

Samuti on lihtne rakendada objekti oleku vÀrskendamist API kaudu. PÔhimÔtteliselt pole vaja teha muud, kui luua Kafka produtsent ja kasutada seda uut olekut sisaldava plaadi tegemiseks. See tagab, et kÔiki API kaudu genereeritud sÔnumeid töödeldakse samamoodi nagu teistelt tootjatelt (nt agentidelt) saadud sÔnumeid.

Mitte ainult töötlemine: kuidas me Kafka Streamsist hajutatud andmebaasi tegime ja mis sellest tuli

Joonis 6: Kafka tootja abil saate mÀÀrata objekti oleku

VĂ€ike komplikatsioon: Kafkal on palju vaheseinu

JÀrgmisena soovisime jagada töötlemiskoormust ja parandada saadavust, pakkudes jagatud oleku mikroteenuste klastri stsenaariumi kohta. Seadistamine oli imelihtne: kui konfigureerisime kÔik eksemplarid töötama sama rakenduse ID (ja samade alglaadimisserverite) all, tehti peaaegu kÔik muu automaatselt. Samuti tÀpsustasime, et iga lÀhteteema koosneb mitmest partitsioonist, nii et iga eksemplari saab mÀÀrata selliste partitsioonide alamhulga.

Mainin ka Ă€ra, et tavaks on teha osariigipoest varukoopia, et nĂ€iteks pĂ€rast tĂ”rget taastumise korral see koopia teisele eksemplarile ĂŒle kanda. Iga Kafka Streamsi osariigi poe jaoks luuakse paljundatud teema koos muudatuste logiga (mis jĂ€lgib kohalikke vĂ€rskendusi). Seega varustab Kafka pidevalt riigipoodi. SeetĂ”ttu saab ĂŒhe vĂ”i teise Kafka Streamsi eksemplari rikke korral olekusalve kiiresti taastada teisel eksemplaril, kuhu vastavad partitsioonid lĂ€hevad. Meie testid on nĂ€idanud, et seda tehakse mĂ”ne sekundiga, isegi kui poes on miljoneid plaate.

Liikudes ĂŒhelt jagatud olekuga mikroteenuselt mikroteenuste klastrile, muutub Get State API juurutamine vĂ€hem triviaalseks. Uues olukorras sisaldab iga mikroteenuse olekupood ainult osa tervikpildist (need objektid, mille vĂ”tmed olid seotud konkreetse partitsiooniga). Pidime kindlaks mÀÀrama, milline eksemplar sisaldab vajaliku objekti olekut, ja tegime seda lĂ”ime metaandmete pĂ”hjal, nagu allpool nĂ€idatud:

Mitte ainult töötlemine: kuidas me Kafka Streamsist hajutatud andmebaasi tegime ja mis sellest tuli

Joonis 7: Voo metaandmete abil mÀÀrame, millisest eksemplarist soovitud objekti olekut kĂŒsida; sarnast lĂ€henemist kasutati GET ALL API puhul

Peamised jÀreldused

Kafka Streamsi osariigi kauplused vÔivad toimida de facto hajutatud andmebaasina,

  • pidevalt paljundatud Kafkas
  • Sellise sĂŒsteemi peale saab hĂ”lpsasti ehitada CRUD API
  • Mitme partitsiooni kĂ€sitlemine on veidi keerulisem
  • Samuti on vĂ”imalik lisaandmete salvestamiseks lisada voogedastustopoloogiasse ĂŒks vĂ”i mitu olekusalvesti. Seda valikut saab kasutada:
  • Arvutusteks vajalike andmete pikaajaline sĂ€ilitamine voo töötlemise ajal
  • Andmete pikaajaline salvestamine, mis vĂ”ib olla kasulik voogesituse eksemplari jĂ€rgmisel korral
  • palju rohkem...

Need ja muud eelised muudavad Kafka Streamsi hĂ€sti sobivaks globaalse seisundi sĂ€ilitamiseks meie omaga sarnases hajutatud sĂŒsteemis. Kafka Streams on osutunud tootmises vĂ€ga töökindlaks (meil pole pĂ€rast selle kasutuselevĂ”ttu praktiliselt ĂŒhtegi sĂ”numit kadunud) ja oleme kindlad, et selle vĂ”imalused ei piirdu sellega!

Allikas: www.habr.com

Ostke DDoS-kaitsega saitide jaoks usaldusvÀÀrne hostimine, VPS VDS-serverid đŸ”„ Osta usaldusvÀÀrne veebimajutus DDoS-kaitsega, VPS VDS serverid | ProHoster