Ne tenê pêvajo: Me çawa databasek belavkirî ji Kafka Streams çêkir, û çi jê hat

Hey Habr!

Em bi bîr tînin ku li pey pirtûkê li ser Kafka Me di derbarê pirtûkxaneyê de xebateke bi heman rengî ya balkêş weşand Kafka Streams API.

Ne tenê pêvajo: Me çawa databasek belavkirî ji Kafka Streams çêkir, û çi jê hat

Heya nuha, civak tenê sînorên vê amûra hêzdar fêr dibe. Ji ber vê yekê, vê dawiyê gotarek hate weşandin, ku wergera wê em dixwazin we bidin nasîn. Ji ezmûna xwe, nivîskar vedibêje ka meriv çawa Kafka Streams veguhezîne depoyek daneya belavkirî. Ji xwendinê kêfxweş bibin!

Pirtûkxaneya Apache Kafka Streams li çaraliyê cîhanê di pargîdaniyan de ji bo hilberandina tîrêja belavkirî li ser Apache Kafka tê bikar anîn. Yek ji hêmanên vê çarçoweyê yên ku nayên pejirandin ev e ku ew dihêle hûn dewleta herêmî ya ku li ser bingeha pêvajoya tîrê hatî hilberandin hilînin.

Di vê gotarê de, ez ê ji we re vebêjim ka pargîdaniya me çawa karî dema ku hilberek ji bo ewlehiya serîlêdana cloudê pêşve dike, vê derfetê bi qezenc bikar bîne. Bi karanîna Kafka Streams, me mîkroxizmetên dewletê yên hevbeş afirandin, ku her yek ji wan wekî çavkaniyek agahdariya pêbawer a agahdariya pêbawer a di derheqê rewşa tiştên pergalê de kar dike. Ji bo me ev hem di warê pêbawerî û hem jî ji hêla hêsaniya piştgiriyê de gavek pêş de ye.

Ger hûn bala xwe bidin nêzîkatiyek alternatîf ku destûrê dide we ku hûn databasek navendî ya yekane bikar bînin da ku rewşa fermî ya tiştên xwe piştgirî bikin, wê bixwînin, ew ê balkêş be…

Çima me difikirî ku dem hatiye ku em awayê xebata bi dewleta hevpar re biguherînin

Me hewce bû ku li ser bingeha raporên ajansê rewşa tiştên cihêreng biparêzin (mînak: malper di bin êrîşê de bû)? Berî ku em koçî Kafka Streams bikin, me pir caran ji bo rêveberiya dewletê xwe dispêre databasek navendî (+ API-ya karûbarê). Vê nêzîkbûnê kêmasiyên xwe hene: date rewşên giran domandina hevgirtin û hevdemkirinê dibe dijwariyek rastîn. Database dibe ku bibe tengek an jî bi dawî bibe rewşa nijadê û ji bêpêşbînîbûnê diêşin.

Ne tenê pêvajo: Me çawa databasek belavkirî ji Kafka Streams çêkir, û çi jê hat

Figure 1: Senaryoyek tîpîk a dewleta perçebûnê ya ku berî veguheztinê tê dîtin
Kafka û Kafka Streams: ajan nerînên xwe bi API-ê re radigihînin, rewşa nûvekirî bi databasek navendî tê hesibandin

Bi Kafka Streams re hevdîtin bikin, çêkirina mîkroxizmetên dewletê yên hevpar hêsan dike

Nêzîkî salek berê, me biryar da ku em bi hûrgulî li senaryoyên dewleta xwe ya hevpar binêrin da ku van pirsgirêkan çareser bikin. Me tavilê biryar da ku em Kafka Streams biceribînin - em dizanin ku ew çiqas berbelav e, pir berdest û tolerans e, çi fonksiyona weşana dewlemend heye (veguhertin, tevî yên dewletdar). Tiştê ku ji me re lazim bû, nebêjin ka pergala peyamberdanê di Kafka de çiqas gihîştî û pêbawer bûye.

Her yek ji mîkroxizmetên dewletparêz ên ku me afirandin, li ser mînakek Kafka Streams bi topolojîyek pir hêsan hatî çêkirin. Ew ji 1) çavkaniyek 2) pêvajoyek bi firotgehek nirxa domdar 3) lavekek pêk dihat:

Ne tenê pêvajo: Me çawa databasek belavkirî ji Kafka Streams çêkir, û çi jê hat

Wêneyê 2: Topolojiya xwerû ya mînakên meya guheztinê ji bo mîkroxizmetên dewletî. Têbînî ku li vir depoyek jî heye ku metadata plansaziyê vedihewîne.

Di vê nêzîkatiya nû de, ajan peyamên ku di mijara çavkaniyê de têne xwarin çêdikin, û xerîdar - bêje, karûbarek ragihandina e-nameyê - rewşa hevpar a hesabkirî bi navgîniyê (mijara derketinê) werdigirin.

Ne tenê pêvajo: Me çawa databasek belavkirî ji Kafka Streams çêkir, û çi jê hat

Wêne 3: Mînakek nû ya peywirê ji bo senaryoyek bi mîkroxizmetên hevpar: 1) ajan peyamek diafirîne ku digihîje mijara çavkaniya Kafka; 2) mîkroxizmeteke bi dewleta hevpar (bikaranîna Kafka Streams) wê pêvajo dike û rewşa hesapkirî ji mijara Kafka ya dawî re dinivîse; piştî ku 3) xerîdar dewleta nû qebûl dikin

Heye, ev firotgeha nirx-kilît a çêkirî bi rastî pir bikêr e!

Wekî ku li jor hatî behs kirin, topolojiya dewleta meya hevpar dikanek nirx-kilît dihewîne. Me ji bo karanîna wê gelek vebijark dît, û du ji wan li jêr têne diyar kirin.

Vebijêrk #1: Ji bo hesaban dikanek nirx-kilît bikar bînin

Yekem firotgeha meya nirx-kilît daneyên alîkar ku ji bo hesabên me hewce bûn dihewand. Mînak di hin rewşan de dewleta hevpar bi prensîba "dengên piraniyê" dihat diyarkirin. Depo dikare hemî raporên ajansê yên herî dawî li ser rewşa hin tiştan bigire. Dûv re, dema ku me raporek nû ji karmendek an yekî din werdigirt, me dikaribû wê xilas bike, raporên ji hemî ajanên din ên li ser rewşa heman tiştê ji hilanînê bistînin, û hesabê dubare bikin.
Xifta 4-a jêrîn nîşan dide ku me çawa dikana mifteyê/nirxê bi rêbaza pêvajoyê ya pêvajoyê re eşkere kir da ku wê hingê peyama nû were pêvajo kirin.

Ne tenê pêvajo: Me çawa databasek belavkirî ji Kafka Streams çêkir, û çi jê hat

Nimûne 4: Em ji bo rêbaza hilberandina pêvajoyê gihîştina dikana nirx-kilît vedikin (piştî vê yekê, her skrîpta ku bi dewleta hevpar re dixebite divê rêbazê bicîh bîne doProcess)

Vebijêrk #2: Çêkirina CRUD API-ê li ser Kafka Streams

Piştî ku herikîna peywira xweya bingehîn saz kir, me dest bi hewldana nivîsandina API-ya RESTful CRUD ji bo mîkroxizmetên dewleta xwe ya hevpar kir. Me xwest ku em karibin rewşa hin an hemî tiştan vegerînin, û hem jî rewşa objeyekê saz bikin an jêbirin (ji bo piştgirîya piştê bikêr e).

Ji bo piştgirîkirina hemî API-yên Get State, gava ku me hewce kir ku di dema pêvajoyê de dewletê ji nû ve hesab bikin, me ew ji bo demek dirêj di firotgehek nirx-kilît a çêkirî de hilanî. Di vê rewşê de, pêkanîna API-ya weha bi karanîna yek mînakek Kafka Streams, wekî ku di navnîşa jêrîn de tê xuyang kirin, pir hêsan dibe:

Ne tenê pêvajo: Me çawa databasek belavkirî ji Kafka Streams çêkir, û çi jê hat

Figure 5: Bikaranîna dikana nirx-kilît a çêkirî ji bo bidestxistina rewşa pêş-hejmarkirî ya tiştekê

Nûvekirina rewşa tiştek bi riya API-ê jî hêsan e ku were bicîh kirin. Di bingeh de, ya ku hûn hewce ne bikin ev e ku hûn hilberînerek Kafka biafirînin û ji bo çêkirina tomarek ku dewleta nû tê de ye bikar bînin. Ev piştrast dike ku hemî peyamên ku bi navgîniya API-yê têne hilberandin dê bi heman rengî wekî yên ku ji hilberînerên din têne wergirtin (mînak ajan) bêne pêvajo kirin.

Ne tenê pêvajo: Me çawa databasek belavkirî ji Kafka Streams çêkir, û çi jê hat

Figure 6: Hûn dikarin bi karanîna hilberînerê Kafka rewşa objeyekê saz bikin

Tevliheviya piçûk: Kafka gelek dabeşan hene

Dûv re, me xwest ku bi peydakirina komek mîkroxizmetên dewleta hevbeş li her senaryoyê barkirina pêvajoyê belav bikin û hebûna xwe baştir bikin. Sazkirin bi lez bû: Gava ku me hemî mînak mîheng kirin ku di bin heman nasnameya serîlêdanê de (û heman pêşkêşkerên bootstrap) bimeşin, hema hema her tiştê din bixweber hate kirin. Her weha me diyar kir ku her mijarek çavkaniyê dê ji çend dabeşan pêk were, da ku her mînakek ji van dabeşan were veqetandin.

Ez ê her weha behs bikim ku pratîkek hevpar e ku meriv kopiyek hilanînê ya firotgeha dewletê çêbike da ku, mînakî, di rewşek başbûnê de piştî têkçûnekê, vê kopiyê veguhezîne mînakek din. Ji bo her firotgeha dewletê ya li Kafka Streams, mijarek dubarekirî bi têketinek guheztinê (ku nûvekirinên herêmî dişopîne) tê afirandin. Ji ber vê yekê, Kafka bi berdewamî pişta xwe dide dikana dewletê. Ji ber vê yekê, di bûyera têkçûna yek an mînakek din a Kafka Streams de, dikana dewletê dikare zû li ser mînakek din were vegerandin, ku dê dabeşên têkildar biçin wir. Testên me destnîşan kirin ku ev yek di nav çend saniyan de tê kirin, her çend di firotgehê de bi mîlyonan tomar hebin.

Ji mîkroxizmetek yekane ya bi dewletek hevbeş berbi komek mîkroxizmetan ve diçin, pêkanîna API-ya Get State kêm kêm kêm dibe. Di rewşa nû de, firotgeha dewletê ya her mîkroxizmetê tenê beşek ji wêneya giştî dihewîne (ew tiştên ku mifteyên wan li ser dabeşek taybetî hatine nexşe kirin). Diviya bû ku me diyar bikira ka kîjan nimûne rewşa tiştê ku ji me re lazim e dihewîne, û me ev yek li ser bingeha metadata têxê kir, wekî ku li jêr tê xuyang kirin:

Ne tenê pêvajo: Me çawa databasek belavkirî ji Kafka Streams çêkir, û çi jê hat

Figure 7: Bi karanîna metadata stream, em destnîşan dikin ku ji kîjan nimûneyê rewşa tiştê xwestinê bipirsin; nêzîkatiyek wusa bi GET ALL API-yê re hate bikar anîn

Lêgerînên Key

Firotgehên dewletê yên li Kafka Streams dikarin wekî databasek belavkirî ya de facto xizmet bikin,

  • bi berdewamî li Kafka tê dubarekirin
  • CRUD API dikare bi hêsanî li ser pergalek wusa were çêkirin
  • Birêvebirina gelek dabeşan hinekî tevlihevtir e
  • Di heman demê de gengaz e ku meriv yek an çend firotgehên dewletê li topolojiya streaming lê zêde bike da ku daneyên alîkar hilîne. Ev vebijêrk dikare ji bo bikaranîn:
  • Depokirina dirêj-dirêj a daneyên ku ji bo hesabên di dema pêvajoya herikînê de hewce ne
  • Hilberîna demdirêj a daneyan ku dibe ku gava din ku mînaka streaming tê peyda kirin bikêr be
  • pir zêde...

Van û avantajên din, Kafka Streams ji bo domandina dewleta gerdûnî di pergalek belavkirî ya mîna ya me de guncan e. Kafka Streams îspat kiriye ku di hilberînê de pir pêbawer e (ji dema ku em hatine bicîh kirin ve hema hema tu windabûna peyamê tune ye), û em pê bawer in ku dê kapasîteyên wê li wir nemînin!

Source: www.habr.com

Add a comment