Ahụmịhe n'ịzụlite ọrụ Nkwụghachi ụgwọ yana API asynchronous na Kafka

Kedu ihe nwere ike ịmanye nnukwu ụlọ ọrụ dị ka Lamoda, nke nwere usoro nhazi na ọtụtụ ọrụ jikọrọ ọnụ, ịgbanwe ụzọ ya nke ọma? Mkpali nwere ike ịdị iche kpamkpam: site na ndị omebe iwu na ọchịchọ ịnwale ihe dị n'ime ndị mmemme niile.

Mana nke a apụtaghị na ịgaghị atụkwasị uru ndị ọzọ. Sergey Zaika ga-agwa gị ihe ị nwere ike imeri ma ọ bụrụ na i mejuputa API ihe omume na Kafka (ole na ole). A ga-enwekwa okwu banyere nnukwu gbaa na nchọpụta ndị na-adọrọ mmasị - nnwale ahụ enweghị ike ime na-enweghị ha.

Ahụmịhe n'ịzụlite ọrụ Nkwụghachi ụgwọ yana API asynchronous na Kafka

Disclaimer: Edemede a dabere na ihe sitere na nzukọ nke Sergey mere na Nọvemba 2018 na HighLoad ++. Ahụmahụ ndụ Lamoda na-arụ ọrụ na Kafka dọtara ndị na-ege ntị na-erughị akụkọ ndị ọzọ na nhazi oge. Anyị na-eche na nke a bụ ihe atụ magburu onwe ya nke eziokwu ahụ bụ na ị nwere ike ịchọta ndị nwere mmasị mgbe niile, na ndị na-ahazi HighLoad ++ ga-anọgide na-agbalị ịmepụta ikuku dị mma maka nke a.

Banyere usoro

Lamoda bụ nnukwu ikpo okwu e-azụmahịa nke nwere ebe kọntaktị nke ya, ọrụ nnyefe (na ọtụtụ ndị mmekọ), ụlọ ọrụ foto, nnukwu ụlọ nkwakọba ihe, ihe a niile na-arụkwa na ngwanrọ nke ya. Enwere ọtụtụ ụzọ ịkwụ ụgwọ, ndị mmekọ b2b nwere ike iji ụfọdụ ma ọ bụ ọrụ ndị a niile ma chọọ ịmata ozi ọhụụ na ngwaahịa ha. Na mgbakwunye, Lamoda na-arụ ọrụ na mba atọ ma e wezụga Russian Federation na ihe niile dịtụ iche n'ebe ahụ. Na mkpokọta, enwere ike ịnwe ihe karịrị otu narị ụzọ iji hazie usoro ọhụrụ, nke a ga-edozirịrị n'ụzọ nke ya. Ihe a niile na-arụ ọrụ site n'enyemaka nke ọtụtụ ọrụ ndị na-ekwurịta okwu mgbe ụfọdụ n'ụzọ na-abụghị nke doro anya. E nwekwara usoro etiti nke isi ọrụ ya bụ iwu statuses. Anyị na-akpọ ya BOB, mụ na ya na-arụkọ ọrụ.

Ngwa nkwụghachi nke API na-ebute mmemme

Okwu ihe omume na-ebute ụzọ bụ nke a na-emebi emebi; ntakịrị n'ihu anyị ga-akọwa n'ụzọ zuru ezu ihe nke a pụtara. Aga m ebido site na ihe gbara ya gburugburu nke anyị kpebiri ịnwale usoro API na-ebute ihe omume na Kafka.

Ahụmịhe n'ịzụlite ọrụ Nkwụghachi ụgwọ yana API asynchronous na Kafka

N'ụlọ ahịa ọ bụla, na mgbakwunye na iwu nke ndị ahịa na-akwụ ụgwọ, e nwere oge a chọrọ ka ụlọ ahịa ahụ weghachi ego n'ihi na ngwaahịa ahụ adabaghị onye ahịa. Nke a bụ usoro dị mkpụmkpụ: anyị na-akọwapụta ozi ahụ, ọ bụrụ na ọ dị mkpa, ma nyefee ego ahụ.

Mana nloghachi ahụ bịara bụrụ ihe gbagwojuru anya n'ihi mgbanwe nke iwu, anyị ga-emejuputa microservice dị iche maka ya.

Ahụmịhe n'ịzụlite ọrụ Nkwụghachi ụgwọ yana API asynchronous na Kafka

Ihe mkpali anyị:

  1. Iwu FZ-54 - na nkenke, iwu chọrọ ịkọrọ ụlọ ọrụ ụtụ isi gbasara azụmahịa ego ọ bụla, ma ọ bụ nloghachi ma ọ bụ nnata, n'ime obere SLA dị mkpirikpi nke nkeji ole na ole. Anyị, dị ka ụlọ ọrụ e-azụmahịa, na-arụ ọtụtụ ọrụ. Na teknụzụ, nke a pụtara ọrụ ọhụrụ (ya mere ọrụ ọhụrụ) yana nkwalite na sistemụ niile metụtara.
  2. BOB kewara bụ ọrụ dị n'ime ụlọ ọrụ ahụ iji wepụ BOB site n'ọtụtụ ọrụ na-abụghị isi ma belata mgbagwoju anya ya.

Ahụmịhe n'ịzụlite ọrụ Nkwụghachi ụgwọ yana API asynchronous na Kafka

Eserese a na-egosi sistemụ Lamoda bụ isi. Ugbu a, ọtụtụ n'ime ha dị ọtụtụ ìgwè kpakpando nke 5-10 microservices gburugburu monolith na-ebelata. Ha na-eji nwayọọ nwayọọ na-eto eto, ma anyị na-agbalị ime ka ha dị ntakịrị, n'ihi na ịdebe iberibe ahọpụtara n'etiti dị egwu - anyị enweghị ike ikwe ka ọ daa. A na-amanye anyị idobe mgbanwe niile (akụ) wee buru n'uche na nke ọ bụla n'ime ha nwere ike pụta na ọ dịghị.

BOB nwekwara ọtụtụ mgbanwe: usoro ịkwụ ụgwọ, usoro nnyefe, sistemụ ngosi, wdg.

Teknụzụ BOB bụ:

  • ~ 150k ahịrị nke koodu + ~ 100k ahịrị nke ule;
  • php7.2 + Zend 1 & Ngwa Symfony 3;
  • > 100 API & ~ 50 ntinye ọpụpụ;
  • Mba 4 nwere mgbagha azụmahịa nke ha.

Ịkwanye BOB dị oke ọnụ ma na-egbu mgbu, ọnụọgụ koodu na nsogbu ọ na-edozi bụ na ọ dịghị onye nwere ike itinye ya niile n'isi ha. N'ozuzu, enwere ọtụtụ ihe mere a ga-eji mee ka ọ dị mfe.

Usoro nloghachi

Na mbụ, usoro abụọ na-etinye aka na usoro a: BOB na Payment. Ugbu a abụọ ọzọ pụtara:

  • Ọrụ mmefu ego, nke ga-elekọta nsogbu na mmefu ego na nkwurịta okwu na ọrụ mpụga.
  • Ngwá ọrụ nkwụghachi, nke nwere naanị mgbanwe ọhụrụ ka ọ ghara ibunye BOB.

Ugbu a usoro a dị ka nke a:

Ahụmịhe n'ịzụlite ọrụ Nkwụghachi ụgwọ yana API asynchronous na Kafka

  1. BOB na-anata arịrịọ maka nkwụghachi.
  2. BOB na-ekwu maka ngwa nkwụghachi a.
  3. Ngwá Ọrụ Nkwụghachi na-agwa Ịkwụ Ụgwọ: "Weghachite ego ahụ."
  4. Ịkwụ ụgwọ na-eweghachi ego ahụ.
  5. Ngwá ọrụ nkwụghachi na BOB na-emekọrịta ọkwa na ibe ha, n'ihi na ugbu a ha abụọ chọrọ ya. Anyị adịbeghị njikere ịgbanwe kpamkpam na Ngwá Ọrụ Nkwụghachi, ebe BOB nwere UI, akụkọ maka ndekọ ego, yana n'ozuzu ọtụtụ data nke enweghị ike ibufe ngwa ngwa. Ị ga-anọdụ ala n'oche abụọ.
  6. Arịrịọ maka mmefu ego na-apụ apụ.

N'ihi ya, anyị mere ụdị ụgbọ ala ihe omume na Kafka - ihe omume-ụgbọ ala, nke ihe niile malitere. Ngwa ngwa, ugbu a, anyị nwere otu isi ihe ọdịda (okwu mkparị).

Ahụmịhe n'ịzụlite ọrụ Nkwụghachi ụgwọ yana API asynchronous na Kafka

Uru na ọghọm ndị mara mma doro anya. Anyị mere ụgbọ ala, nke pụtara na ugbu a ọrụ niile dabere na ya. Nke a na-eme ka nhazi ahụ dị mfe, ma na-ewebata otu ebe ọdịda n'ime usoro ahụ. Kafka ga-adaba, usoro ahụ ga-akwụsị.

Gịnị bụ API ihe omume na-ebute

Azịza dị mma maka ajụjụ a dị na akụkọ Martin Fowler (GOTO 2017) "Ọtụtụ nkọwa nke ihe owuwu ihe omume na-ebute".

Na nkenke ihe anyị mere:

  1. Kechie mgbanwe niile asynchronous site na nchekwa ihe omume. Kama ịgwa onye ọ bụla nwere mmasị na-azụ ahịa banyere mgbanwe ọnọdụ na netwọk, anyị na-ede ihe omume banyere mgbanwe ọnọdụ na ebe nchekwa etiti, na ndị na-azụ ahịa nwere mmasị na isiokwu ahụ na-agụ ihe niile na-apụta site n'ebe ahụ.
  2. Ihe omume na nke a bụ ngosi (Ịma Ọkwa) na ihe agbanweela ebe. Dịka ọmụmaatụ, ọkwa usoro agbanweela. Onye na-azụ ahịa nke nwere mmasị na ụfọdụ data na-esonyere mgbanwe ọnọdụ nke na-adịghị etinye na ngosi ahụ nwere ike ịchọpụta ọnọdụ ya n'onwe ya.
  3. Nhọrọ kachasị mma bụ ị nweta mmemme mmemme zuru oke, nyefe steeti, nke ihe omume nwere ozi niile dị mkpa maka nhazi: ebe o si bịa na ọnọdụ ọ gara, otú kpọmkwem data gbanwere, wdg. Naanị ajụjụ bụ ike na ego ole ozi ị nwere ike ịchekwa.

Dịka akụkụ nke mmalite nke Ngwá Ọrụ Nkwụghachi, anyị jiri nhọrọ nke atọ. Nhazi mmemme a dị mfe ebe ọ bụ na ọ dịghị mkpa iwepụta ozi zuru ezu, gbakwunyere na ọ wepụrụ ọnọdụ ahụ ebe mmemme ọhụrụ ọ bụla na-eme ka ọ pụta ìhè na-enweta arịrịọ sitere n'aka ndị na-azụ ahịa.

Ọrụ Ngwá Ọrụ Nkwụghachi anaghị ebu, yabụ Kafka enwere ihe ụtọ nke pen karịa ihe dị mkpa. Echeghị m na ọ bụrụ na ọrụ nkwụghachi ahụ ghọrọ ọrụ dị elu, azụmahịa ga-enwe obi ụtọ.

Async mgbanwe AS bụ

Maka mgbanwe asynchronous, ngalaba PHP na-ejikarị RabbitMQ eme ihe. Anyị nakọtara data maka arịrịọ ahụ, tinye ya na kwụ n'ahịrị, na ndị na-azụ ahịa otu ọrụ na-agụ ya ma zipụ ya (ma ọ bụ ezipụghị ya). Maka API n'onwe ya, Lamoda na-eji Swagger arụ ọrụ. Anyị na-echepụta API, kọwaa ya na Swagger, wee mepụta koodu ahịa na koodu sava. Anyị na-ejikwa JSON RPC 2.0 emelitere.

N'ebe ụfọdụ a na-eji ụgbọ ala ESB, ụfọdụ na-ebi na MQ na-arụ ọrụ, mana, n'ozuzu, RabbitMQ - ọkọlọtọ.

Async mgbanwe TO BE

Mgbe ị na-emepụta mgbanwe site na bọs mmemme, enwere ike ịchọta ntụnyere. N'otu aka ahụ, anyị na-akọwa mgbanwe data n'ọdịnihu site na nkọwa nhazi mmemme. Usoro yaml, anyị ga-eme koodu ọgbọ n'onwe anyị, onye na-emepụta ihe na-emepụta DTO dịka nkọwapụta ma na-akụziri ndị ahịa na sava ka ha na ha rụọ ọrụ. Ọgbọ na-aga n'asụsụ abụọ - golang na php. Nke a na-enyere aka idobe ụlọ akwụkwọ n'otu n'otu. Edere generator na Golang, nke mere o ji nweta aha gogi.

Ịmepụta ihe omume na Kafka bụ ihe a na-ahụkarị. Enwere ngwọta sitere na ụdị ụlọ ọrụ nke Kafka Confluent, enwere nkadi, ihe ngwọta sitere n'aka ụmụnna anyị Zalando. Anyị mkpali ịmalite na vanilla Kafka - nke a pụtara ịhapụ ngwọta ahụ n'efu ruo mgbe anyị mechara kpebie ma anyị ga-eji ya ebe niile, ma hapụkwa onwe anyị ohere maka ịmegharị na mmezi: anyị chọrọ nkwado maka anyị. JSON RPC 2.0, generators maka asụsụ abụọ ka anyị hụ ihe ọzọ.

Ọ bụ ihe ijuanya na ọbụlagodi n'ọnọdụ obi ụtọ dị otú ahụ, mgbe enwere azụmaahịa yiri ya, Zalando, nke mere ihe ngwọta yiri nke ahụ, anyị enweghị ike iji ya rụọ ọrụ nke ọma.

Ụkpụrụ ụkpụrụ ụlọ na mmalite bụ ndị a: anyị na-agụ kpọmkwem site na Kafka, ma dee naanị site na ihe omume-bọs. Enwere ọtụtụ ihe dị njikere maka ịgụ na Kafka: ndị na-ere ahịa, ndị na-edozi ihe, na ọ dị njikere ma ọ bụ na-erughị njikere maka nhazi ihu igwe, achọrọ m idobe nke a. Anyị chọrọ imecha ndekọ ahụ site na otu Gateway aka Events-bus, ma nke a bụ ihe kpatara ya.

Ihe omume-ụgbọ ala

Ma ọ bụ ụgbọ ala mmemme. Nke a bụ naanị ọnụ ụzọ http enweghị steeti, nke na-arụ ọtụtụ ọrụ dị mkpa:

  • Na-emepụta nkwado - anyị na-elele na ihe omume na-emezu anyị nkọwa.
  • Usoro mmemme mmemme, ya bụ, nke a bụ isi na naanị usoro na ụlọ ọrụ na-aza ajụjụ nke ihe omume nke ihe owuwu na-ewere dị irè. Nkwado na-agụnye naanị ụdị data na ọnụọgụ iji kọwapụta ọdịnaya nke ọma.
  • Hash ọrụ maka sharding - usoro ozi Kafka bụ isi-uru na iji hash nke igodo na-agbakọ ebe a ga-etinye ya.

Gịnị mere

Anyị na-arụ ọrụ na nnukwu ụlọ ọrụ nwere usoro nhazi. Gịnị kpatara ịgbanwe ihe ọ bụla? Nke a bụ nnwale, anyị na-atụkwa anya inweta ọtụtụ uru.

1: n+1 mgbanwe (otu na ọtụtụ)

Kafka na-eme ka ọ dị mfe ijikọ ndị ahịa ọhụrụ na API.

Ka anyị kwuo na ị nwere ndekọ nke ịchọrọ ka ị na-emelite n'ọtụtụ usoro n'otu oge (na na ụfọdụ ọhụrụ). Na mbụ, anyị chepụtara otu ùkwù na-emejuputa atumatu set-API, na a maara usoro nke nna ukwu adreesị nke ndị ahịa. Ugbu a usoro nna ukwu na-eziga mmelite na isiokwu, na onye ọ bụla nwere mmasị na-agụ ya. Usoro ọhụrụ apụtala - anyị debanyere aha ya maka isiokwu ahụ. Ee, nakwa ùkwù, ma dị mfe.

N'ihe banyere nkwụghachi-ngwaọrụ, nke bụ mpempe BOB, ọ dị anyị mma ime ka ha mekọrịta site na Kafka. Ịkwụ ụgwọ na-ekwu na e weghachiri ego ahụ: BOB, RT chọpụtara banyere nke a, gbanwee ọnọdụ ha, Fiscalization Service chọpụtara banyere nke a ma nye ego.

Ahụmịhe n'ịzụlite ọrụ Nkwụghachi ụgwọ yana API asynchronous na Kafka

Anyị nwere atụmatụ imepụta Ọrụ Ịma Ọkwa dị n'otu nke ga-eme ka onye ahịa mara gbasara ozi gbasara iwu/ nloghachi ya. Ugbu a ọrụ a na-agbasa n'etiti usoro. Ọ ga-ezuru anyị ịkụziri ọrụ ngosi iji nweta ozi dị mkpa sitere na Kafka wee zaghachi ya (ma gbanyụọ ọkwa ndị a na sistemụ ndị ọzọ). Ọ dịghị mgbanwe ọhụrụ kpọmkwem ga-achọrọ.

Data chụpụrụ

Ozi n'etiti sistemụ na-apụta ìhè - n'agbanyeghị "ụlọ ọrụ na-agba ọbara" ị nwere na n'agbanyeghị otú ndekọghachi azụ gị siri gbakọọ. Lamoda nwere ngalaba nyocha data nke na-anakọta data sitere na sistemụ wee tinye ya n'ụdị enwere ike iji ya, ma maka azụmaahịa yana maka sistemụ nwere ọgụgụ isi. Kafka na-enye gị ohere ịnye ha ọtụtụ data ngwa ngwa ma mee ka ozi ahụ na-aga n'ihu ruo ugbu a.

Ndekọ ndegharị

Ozi anaghị apụ apụ ma agụchaa ya, dịka ọ dị na RabbitMQ. Mgbe ihe omume nwere ozi zuru oke maka nhazi, anyị nwere akụkọ ihe mere eme nke mgbanwe na-adịbeghị anya na ihe ahụ, na, ọ bụrụ na achọrọ, ikike itinye mgbanwe ndị a.

Oge nchekwa nke ndekọ ntugharị na-adabere n'ịdị ike nke ide ihe na isiokwu a; Kafka na-enye gị ohere ịmegharị oke na oge nchekwa na oke data. Maka isiokwu kpụ ọkụ n'ọnụ, ọ dị mkpa ka ndị niile na-azụ ahịa nwee oge iji gụọ ozi ahụ tupu ọ pụọ, ọbụlagodi n'ọnọdụ adịghị arụ ọrụ dị mkpirikpi. Ọ na-enwekarị ike ịchekwa data maka nkeji ụbọchị, nke zuru oke maka nkwado.

Ahụmịhe n'ịzụlite ọrụ Nkwụghachi ụgwọ yana API asynchronous na Kafka

Na-esote, ntakịrị ịkọgharị akwụkwọ ahụ, maka ndị na-amaghị Kafka (foto ahụ sikwa na akwụkwọ ahụ)

AMQP nwere ahịrị: anyị na-ede ozi na kwụ n'ahịrị maka ndị ahịa. Dịka, a na-ahazi otu kwụ n'ahịrị site na otu sistemụ nwere otu mgbagha azụmahịa. Ọ bụrụ na ịchọrọ ịkọwapụta ọtụtụ sistemụ, ị nwere ike ịkụziri ngwa ahụ ka ọ dee ọtụtụ kwụ n'ahịrị ma ọ bụ hazie mgbanwe na usoro fanout, nke na-emechi ha n'onwe ya.

Kafka nwere abstraction yiri ya isiokwu, nke ị na-ede ozi, ma ha anaghị apụ apụ mgbe ị gụchara. Na ndabara, mgbe ị jikọọ na Kafka, ị na-enweta ozi niile ma nwee nhọrọ ịchekwa ebe ị kwụsịrị. Ya bụ, ị na-agụ usoro, ị nwere ike ị gaghị akara ozi dị ka agụ, ma chekwaa id nke ị nwere ike ịga n'ihu na-agụ ya. A na-akpọ Id ahụ ị kwụsịrị na ya, na-emezigharị usoro ahụ.

N'ihi nke a, enwere ike itinye mgbagha dị iche iche. Dịka ọmụmaatụ, anyị nwere BOB na oge 4 maka mba dị iche iche - Lamoda dị na Russia, Kazakhstan, Ukraine, Belarus. Ebe ọ bụ na a na-ebuga ha iche iche, ha nwere nhazi nhazi dịtụ iche na mgbagha azụmahịa nke ha. Anyị na-egosi na ozi nke mba ọ na-ezo aka. Onye ọ bụla na-azụ BOB na obodo ọ bụla na-eji otu GroupId dị iche na-agụ akwụkwọ, ma ọ bụrụ na ozi ahụ emetụtaghị ha, ha na-awụpụ ya, ya bụ. ozugbo na-eme ihe nkwụghachi ụgwọ +1. Ọ bụrụ na ndị ọrụ ịkwụ ụgwọ na-agụ otu isiokwu ahụ, mgbe ahụ ọ na-eme ya na otu dị iche iche, ya mere, nkwụghachi ụgwọ anaghị agbakọ.

Ihe omume chọrọ:

  • Nzuzu data. Ọ ga-amasị m ka mmemme ahụ nweta data zuru oke ka enwere ike ịhazi ya.

  • Iguzosi ike n'ezi ihe. Anyị na-enyefe na Events-bus nkwenye na mmemme ahụ na-agbanwe agbanwe na ọ nwere ike hazie ya.
  • Usoro dị mkpa. N'ihe banyere nlọghachi, a na-amanye anyị ịrụ ọrụ na akụkọ ihe mere eme. Site na ngosi, usoro ahụ adịghị mkpa, ọ bụrụ na ha bụ ọkwa ọkwa, email ahụ ga-abụ otu n'agbanyeghị nke mbụ rutere. N'ihe banyere nkwụghachi ụgwọ, enwere usoro doro anya; ọ bụrụ na anyị agbanwee usoro ahụ, ndị ọzọ ga-ebili, a gaghị emepụta nkwụghachi ma ọ bụ hazie - anyị ga-ejedebe n'ọnọdụ dị iche.
  • Nkwenye. Anyị nwere ụlọ ahịa, ma ugbu a anyị na-emepụta mmemme kama API. Anyị chọrọ ụzọ ngwa ngwa na ọnụ ala nyefee ozi gbasara ihe ọhụrụ na mgbanwe ndị dị na ọrụ anyị. A na-enweta nke a site na nkọwapụta ọnụ na ebe nchekwa git dị iche na ndị na-emepụta koodu. Ya mere, ndị ahịa na ihe nkesa na ọrụ dị iche iche na-ahazi.

Kafka na Lamoda

Anyị nwere nrụnye Kafka atọ:

  1. Ndekọ;
  2. R&D;
  3. Ihe omume-ụgbọ ala.

Taa, anyị na-ekwu naanị banyere isi ihe ikpeazụ. Na mmemme-ụgbọ ala, anyị enweghị nnukwu nrụnye - ndị na-ere ahịa 3 (sava) yana naanị isiokwu 27. Dị ka a na-achị, otu isiokwu bụ otu usoro. Mana nke a bụ isi okwu dị nro, anyị ga-emetụ ya aka ugbu a.

Ahụmịhe n'ịzụlite ọrụ Nkwụghachi ụgwọ yana API asynchronous na Kafka

N'elu bụ eserese rps. Usoro nkwụghachi ahụ bụ akara turquoise (ee, nke dị na axis X), na ahịrị pink bụ usoro mmelite ọdịnaya.

Katalọgụ Lamoda nwere nde ngwaahịa, a na-emelite data ahụ oge niile. Ụfọdụ nchịkọta na-apụ na ejiji, a na-ahapụ ndị ọhụrụ iji dochie ha, na ụdị ọhụrụ na-apụta mgbe niile na katalọgụ. Anyị na-agbalị ịkọ ihe ga-amasị ndị ahịa anyị echi, ya mere, anyị na-azụta ihe ọhụrụ mgbe niile, na-ese foto ma na-emelite ihe ngosi.

Oke pink bụ mmelite ngwaahịa, ya bụ, mgbanwe na ngwaahịa. Enwere ike ịhụ na ụmụ okorobịa ahụ sere foto, see foto, na ọzọ! - kwajuru mkpọ mmemme.

Ihe omume Lamoda na-eji ikpe

Anyị na-eji architecture arụrụ arụ ọrụ ndị a:

  • Weghachite nsochi ọkwa: oku na-eme ihe na nsochi ọkwa sitere na sistemụ niile metụtara. Ịkwụ ụgwọ, statuses, mmefu ego, ngosi. N'ebe a, anyị nwalere ụzọ ahụ, rụọ ngwá ọrụ, chịkọta ahụhụ niile, dee akwụkwọ ma gwa ndị ọrụ ibe anyị otu esi eji ya.
  • Na-emelite kaadị ngwaahịa: nhazi, meta-data, njirimara. Otu sistemụ na-agụ (nke gosipụtara), yana ọtụtụ dee.
  • Email, push na sms: achịkọtala iwu ahụ, iwu ahụ erutela, a nabatara nloghachi, wdg, enwere ọtụtụ n'ime ha.
  • Ngwaahịa, mmeghari ụlọ nkwakọba ihe - mmelite ọnụọgụ nke ihe, naanị ọnụọgụ: mbata n'ụlọ nkwakọba ihe, laghachi. Ọ dị mkpa na sistemụ niile jikọtara na idobe ngwaahịa na-arụ ọrụ na data kachasị ugbu a. Ugbu a, usoro mmelite ngwaahịa dị mgbagwoju anya; Kafka ga-eme ka ọ dị mfe.
  • Nyocha data (Ngalaba R&D), Ngwa ML, nyocha, ọnụ ọgụgụ. Anyị chọrọ ka ozi doo anya - Kafka dabara nke ọma maka nke a.

Ugbu a akụkụ na-adọrọ mmasị karị banyere nnukwu ihe mgbagwoju anya na nchọpụta ndị na-adọrọ mmasị mere n'ime ọnwa isii gara aga.

Nsogbu imewe

Ka anyị kwuo na anyị chọrọ ime ihe ọhụrụ - dịka ọmụmaatụ, nyefee usoro nnyefe niile na Kafka. Ugbu a akụkụ nke usoro a na-emejuputa atumatu na Order Processing na BOB. Enwere ụdị ọnọdụ n'azụ ịnyefe iwu na ọrụ nnyefe, ịkwaga na ụlọ nkwakọba ihe etiti, na ihe ndị ọzọ. Enwere monolith dum, ọbụlagodi abụọ, gbakwunyere ụyọkọ API ndị a raara nye maka nnyefe. Ha maara ọtụtụ ihe gbasara nnyefe.

Ndị a dị ka mpaghara ndị yiri ya, mana Usoro nhazi na BOB na Sistemụ Mbupu nwere ọkwa dị iche iche. Dịka ọmụmaatụ, ụfọdụ ọrụ ndị na-ebuga ozi anaghị eziga ọkwa etiti, kama ọ bụ naanị ndị ikpeazụ: "wetara" ma ọ bụ "efu". Ndị ọzọ, n'ụzọ megidere nke ahụ, na-akọ n'ụzọ zuru ezu banyere mmegharị nke ngwaahịa. Onye ọ bụla nwere iwu nkwado nke ya: maka ụfọdụ, email ahụ dị irè, nke pụtara na a ga-edozi ya; maka ndị ọzọ ọ abaghị uru, mana a ka ga-edozi usoro ahụ n'ihi na enwere nọmba ekwentị maka ịkpọtụrụ, mmadụ ga-ekwukwa na agaghị edozi ụdị iwu ahụ ma ọlị.

iyi data

N'ihe banyere Kafka, ajụjụ nke ịhazi data data na-ebilite. Ọrụ a gụnyere ịhọrọ atụmatụ dabere n'ọtụtụ isi; ka anyị gafee ha niile.

N'otu isiokwu ma ọ bụ na dị iche iche?

Anyị nwere nkọwa mmemme. Na BOB anyị na-ede na ọ dị mkpa ka a nyefee ụdị na ụdị a, ma gosi: nọmba usoro, ihe mejupụtara ya, ụfọdụ SKU na koodu mmanya, wdg. Mgbe ngwongwo ahụ rutere n'ụlọ nkwakọba ihe, nnyefe ga-enwe ike ịnata ọkwa, timestamps na ihe niile dị mkpa. Mana anyị chọrọ ịnata mmelite na data a na BOB. Anyị nwere usoro mgbagha nke ịnweta data site na nnyefe. Nke a ọ bụ otu ihe omume? Ma ọ bụ nke a bụ mgbanwe dị iche iche nke kwesịrị isiokwu nke ya?

O yikarịrị, ha ga-adị nnọọ ka, na ọnwụnwa ime otu isiokwu abụghị ihe ndabere, n'ihi na a iche iche isiokwu pụtara iche iche na-eji ọkụ, iche iche configs, a iche iche ọgbọ nke ihe a niile. Ma ọ bụghị eziokwu.

Ogige ọhụrụ ka ọ bụ mmemme ọhụrụ?

Ma ọ bụrụ na ị na-eji otu ihe omume, mgbe ahụ, nsogbu ọzọ na-ebilite. Dịka ọmụmaatụ, ọ bụghị usoro nnyefe niile nwere ike ịmepụta ụdị DTO nke BOB nwere ike ịmepụta. Anyị na-ezigara ha id, ma ha anaghị echekwa ya n'ihi na ha achọghị ya, na site n'echiche nke ịmalite usoro ihe omume-ụgbọ ala, a chọrọ ubi a.

Ọ bụrụ na anyị ewebata iwu maka mmemme-bọs na mpaghara a chọrọ, mgbe ahụ, a na-amanye anyị ịtọọ iwu nkwado ọzọ na BOB ma ọ bụ na onye na-ahụ maka mmemme mmalite. Nkwado na-amalite ịgbasa n'ime ọrụ niile - nke a adịghị mma.

Nsogbu ọzọ bụ ọnwụnwa nke mmepe mmụba. A gwara anyị na ekwesịrị ịgbakwunye ihe omume ahụ, ma eleghị anya, ọ bụrụ na anyị eche banyere ya, ọ ga-abụrịrị ihe omume dị iche. Mana na atụmatụ anyị, ihe omume dị iche bụ isiokwu dị iche. Isiokwu dị iche bụ usoro niile m kọwara n'elu. A nwara onye nrụpụta ka ọ tinye mpaghara ọzọ na atụmatụ JSON wee megharịa ya.

N'ihe banyere nkwụghachi ụgwọ, anyị rutere ihe omume nke ihe omume na ọkara afọ. Anyị nwere otu ihe omume meta nke akpọrọ mmelite nkwụghachi, nke nwere ụdị ubi na-akọwa ihe mmelite a bụ n'ezie. N'ihi nke a, anyị nwere "ọmma" switches na validators ndị gwara anyị otu esi akwado ihe omume a na ụdị.

Ụdị mmemme

Iji kwado ozi na Kafka ị nwere ike iji AVRO, ma ọ dị mkpa ozugbo dina na ya ma jiri Confluent. N'ọnọdụ anyị, anyị ga-akpachara anya na nsụgharị. Ọ bụghị mgbe niile ka ọ ga-ekwe omume ịgụgharị ozi sitere na ndekọ mmegharị n'ihi na ihe nlereanya ahụ nwere "aka ekpe". N'ụzọ bụ isi, ọ na-atụgharị iji wuo nsụgharị ka ihe nlereanya ahụ wee laghachi azụ: dịka ọmụmaatụ, mee ka ubi nwee nhọrọ nwa oge. Ọ bụrụ na ndịiche dị oke ike, anyị na-amalite ide na isiokwu ọhụrụ, ma nyefee ndị ahịa mgbe ha gụchara nke ochie.

Usoro nkebi akwadoro agụ

A na-ekewa isiokwu dị n'ime Kafka na nkebi. Nke a adịghị mkpa mgbe anyị na-emepụta ụlọ ọrụ na mgbanwe, mana ọ dị mkpa mgbe ị na-ekpebi otu esi eri ya na ọnụ.

N'okwu a na-emekarị, ị na-ede otu isiokwu na Kafka. Site na ndabara, a na-eji otu akụkụ, ozi niile dị na isiokwu a na-aga na ya. N'ihi ya, onye ahịa na-agụ ozi ndị a n'usoro. Ka anyị kwuo ugbu a, anyị kwesịrị ịgbasa sistemu ka ndị ahịa abụọ dị iche iche gụọ ozi. Ọ bụrụ na, dịka ọmụmaatụ, ị na-ezipụ SMS, ị nwere ike ịgwa Kafka ka ọ mee akụkụ ọzọ, na Kafka ga-amalite kewaa ozi n'ime akụkụ abụọ - ọkara ebe a, ọkara ebe a.

Kedu ka Kafka si ekewa ha? Ozi ọ bụla nwere ahụ (nke anyị na-echekwa JSON) na igodo. Ị nwere ike itinye ọrụ hash na igodo a, nke ga-ekpebi akụkụ nke ozi ahụ ga-abanye.

N'ọnọdụ anyị na nkwụghachi ụgwọ, nke a dị mkpa, ọ bụrụ na anyị ewere akụkụ abụọ, mgbe ahụ enwere ohere na onye na-azụ ahịa yiri ya ga-edozi ihe omume nke abụọ tupu nke mbụ na a ga-enwe nsogbu. Ọrụ hash na-achọpụta na ozi nwere otu igodo na-ejedebe n'otu akụkụ.

Ihe omume vs iwu

Nke a bụ nsogbu ọzọ anyị zutere. Ihe omume bụ ihe omume ụfọdụ: anyị na-ekwu na ihe mere ebe (ihe_mere), dịka ọmụmaatụ, a kagburu ihe ma ọ bụ nkwụghachi mere. Ọ bụrụ na mmadụ ege ntị na mmemme ndị a, mgbe ahụ dịka "ihe akagbuola," a ga-emepụta ụlọ ọrụ nkwụghachi, na "nkwụghachi mere" ka a ga-ede ebe na nhazi.

Ma na-emekarị, mgbe ị na-emepụta ihe omume, ị chọghị ide ha n'efu - ị na-adabere n'eziokwu na mmadụ ga-agụ ha. Enwere nnukwu ọnwụnwa ịde ọ bụghị ihe_mere (ihe_canceled, refund_refunded), mana ihe_kwesịrị_eme. Dịka ọmụmaatụ, ihe adịla njikere iweghachi ya.

N'otu aka ahụ, ọ na-atụ aro ka a ga-esi mee ihe omume ahụ. N'aka nke ọzọ, ọ na-ada nnọọ obere ka aha mmemme nkịtị. E wezụga nke ahụ, ọ bụghị n'ebe a ka ime_something iwu. Mana ị nweghị nkwa na mmadụ gụrụ ihe omume a; ma ọ bụrụ na ị gụọ ya, ị ga-agụ ya nke ọma; ma ọ bụrụ na ị na-agụ ya nke ọma, mgbe ahụ, i mere ihe, na na ihe na-aga nke ọma. Ozugbo ihe omume ghọrọ ime_something, nzaghachi ga-adị mkpa, na nke ahụ bụ nsogbu.

Ahụmịhe n'ịzụlite ọrụ Nkwụghachi ụgwọ yana API asynchronous na Kafka

Na mgbanwe asynchronous na RabbitMQ, mgbe ị na-agụ ozi ahụ, gaa na http, ị nwere nzaghachi - ọbụlagodi na enwetara ozi ahụ. Mgbe ị na-edegara Kafka, enwere ozi ị degara Kafka, mana ị maghị ihe ọ bụla gbasara otu esi edozi ya.

Ya mere, n'ọnọdụ anyị, anyị ga-ewebata ihe omume nzaghachi ma guzobe nlekota nke mere na ọ bụrụ na e zigara ọtụtụ ihe omume, mgbe ndị dị otú ahụ na oge dị otú ahụ, otu ọnụ ọgụgụ nke nzaghachi omume kwesịrị ịbịarute. Ọ bụrụ na nke a emeghị, ọ ga-adị ka ọ̀ na-agazighị nke ọma. Dịka ọmụmaatụ, ọ bụrụ na anyị ezipụ ihe omume "item_ready_to_refund", anyị na-atụ anya na a ga-emepụta nkwụghachi, a ga-enyeghachi onye ahịa ego ahụ, a ga-ezigara anyị ihe omume "money_refunded". Mana nke a ejighị n'aka, yabụ nleba anya dị mkpa.

Nuances

Enwere nsogbu doro anya: ọ bụrụ na ị gụọ isiokwu n'usoro, ma ị nwere ozi ọjọọ, onye na-azụ ahịa ga-adaba, ị gaghị aga n'ihu. Ị chọrọ kwụsị ndị ahịa niile, mebie n'ihu iji gaa n'ihu na-agụ akwụkwọ.

Anyị maara banyere ya, anyị tụkwasịrị ya obi, ma o mere. Ma nke a mere n'ihi na ihe omume ahụ dị irè site n'echiche nke ihe omume-ụgbọ ala, ihe omume ahụ dị irè site n'echiche nke ngwa validator, ma ọ bụghị irè site n'echiche nke PostgreSQL, n'ihi na anyị usoro MySQL. na UNsigned INT sistemụ nwere PostgreSQL naanị na INT. Ogo ya dị ntakịrị ntakịrị, na Id adabaghị. Symfony nwụrụ ma ewezuga ya. Anyị, n'ezie, ejidere ihe dị iche n'ihi na anyị dabere na ya, ma na-aga ime nke a, ma tupu nke ahụ, anyị chọrọ ịbawanye ebe nsogbu ahụ, ebe ọ bụ na edozighị ozi ahụ nke ọma. Ndị na-agụ akwụkwọ na ọrụ a dịkwa na nchekwa data, Symfony emechielarị nkwukọrịta na nchekwa data, ma nke abụọ gbukwara usoro niile na-enweghị ohere ịmebi.

Ọrụ ahụ dina ala ruo oge ụfọdụ - ọ dabara nke ọma, na Kafka nke a adịghị njọ, n'ihi na ozi ahụ ka dị. Mgbe arụghachiri ọrụ, ị nwere ike ịgụcha ha. Ọ dị mma.

Kafka nwere ikike ịtọ nkwụghachi aka ike site na iji ngwá ọrụ. Ma iji mee nke a, ịkwesịrị ịkwụsị ndị na-azụ ahịa niile - n'ọnọdụ anyị, kwadebe ntọhapụ dị iche iche nke na-agaghị enwe ndị na-azụ ahịa, redeployments. Mgbe ahụ na Kafka ị nwere ike ịgbanwee nkwụsị site na ngwá ọrụ, na ozi ga-agafe.

Ọzọ nuance - log replication vs rdkafka.so - metụtara nkọwa nke ọrụ anyị. Anyị na-eji PHP, na PHP, dịka iwu, ụlọ akwụkwọ niile na-ekwurịta okwu na Kafka site na ebe nchekwa rdkafka.so, mgbe ahụ enwere ụdị ihe mkpuchi. Ma eleghị anya, ihe ndị a bụ ihe isi ike nke onwe anyị, ma ọ bịara bụrụ na nanị ịgụghachi otu akụkụ nke ihe anyị gụwororị adịghị mfe. N'ozuzu, enwere nsogbu ngwanrọ.

Ịlaghachi na nkọwapụta nke ịrụ ọrụ na nkebi, edere ya nke ọma na akwụkwọ ndị na-azụ ahịa >= akụkụ isiokwu. Ma achọpụtara m nke a ka oge na-aga karịa ka m gaara achọ. Ọ bụrụ na ịchọrọ ịgbatị ma nwee ndị ahịa abụọ, ị ga-achọ opekata mpe akụkụ abụọ. Ya bụ, ọ bụrụ na ị nwere otu nkebi nke 20 puku ozi chịkọbara, na ị mere nke ọhụrụ, ọnụ ọgụgụ nke ozi agaghị nhata n'oge na-adịghị. Ya mere, iji nwee ndị na-eri ihe abụọ yiri ya, ịkwesịrị ịmekọrịta akụkụ.

Nlekota oru

Echere m na ụzọ anyị si enyocha ya ga-edo anya karịa nsogbu ndị dị na ụzọ dị ugbu a.

Dịka ọmụmaatụ, anyị na-agbakọ ngwaahịa ole dị na nchekwa data gbanwere ọnọdụ ha n'oge na-adịbeghị anya, na, ya mere, ihe omume kwesịrị ime dabere na mgbanwe ndị a, anyị na-eziga nọmba a na usoro nlekota anyị. Mgbe ahụ site na Kafka anyị na-enweta nọmba nke abụọ, ole ihe omume e dekọrọ n'ezie. N'ụzọ doro anya, ọdịiche dị n'etiti ọnụọgụ abụọ a kwesịrị ịbụ efu mgbe niile.

Ahụmịhe n'ịzụlite ọrụ Nkwụghachi ụgwọ yana API asynchronous na Kafka

Na mgbakwunye, ịkwesịrị inyocha ka onye nrụpụta na-eme, ma ihe omume-bọs enwetara ozi, yana otu onye ahịa na-eme. Dịka ọmụmaatụ, na eserese dị n'okpuru, Ngwá Ọrụ Nkwụghachi na-eme nke ọma, mana BOB nwere nsogbu ụfọdụ (elu-acha anụnụ anụnụ).

Ahụmịhe n'ịzụlite ọrụ Nkwụghachi ụgwọ yana API asynchronous na Kafka

Ekwuru m ndị ahịa-otu lag. N'ikwu okwu, nke a bụ ọnụọgụ ozi a na-agụghị. N'ozuzu, ndị na-azụ ahịa anyị na-arụ ọrụ ngwa ngwa, ya mere, nkwụsị na-abụkarị 0, ma mgbe ụfọdụ enwere ike inwe ọnụ ọgụgụ dị mkpirikpi. Kafka nwere ike ime nke a site na igbe ahụ, mana ịkwesịrị ịtọ oge ụfọdụ.

Enwere oru ngo Burrownke ga-enye gị ozi ndị ọzọ na Kafka. Ọ na-eji API ndị ahịa-otu iji nye ọkwa ka otu a si eme. Na mgbakwunye na OK na Failed, enwere ịdọ aka ná ntị, ma ị nwere ike ịchọpụta na ndị na-azụ gị enweghị ike ịnagide ọsọ ọsọ nke mmepụta - ha enweghị oge iji gụgharịa ihe edere. The usoro bụ nnọọ smart na mfe iji.

Ahụmịhe n'ịzụlite ọrụ Nkwụghachi ụgwọ yana API asynchronous na Kafka

Nke a bụ ihe nzaghachi API dị ka. Nke a bụ otu bob-live-fifa, partition refund.update.v1, ọnọdụ OK, lag 0 - ikpeazụ nkwụghachi ụgwọ dị otú ahụ na ndị dị otú ahụ.

Ahụmịhe n'ịzụlite ọrụ Nkwụghachi ụgwọ yana API asynchronous na Kafka

Nlekota oru updated_at SLA (rapaara) Ekwuru m ya. Dịka ọmụmaatụ, ngwaahịa ahụ agbanweela ka ọ bụrụ ọkwa na ọ dị njikere maka nloghachi. Anyị na-etinye Cron, nke na-ekwu na ọ bụrụ na nkeji 5 ihe a agabeghị nkwụghachi (anyị na-eweghachite ego site na usoro ịkwụ ụgwọ ngwa ngwa), mgbe ahụ, ihe na-aga nke ọma, na nke a bụ n'ezie ikpe maka nkwado. Ya mere, anyị na-ewere Cron, nke na-agụ ihe ndị dị otú ahụ, ma ọ bụrụ na ha karịrị 0, mgbe ahụ ọ na-eziga ọkwa.

Iji nchikota, iji mmemme na-adabara mgbe:

  • a chọrọ ozi site na ọtụtụ usoro;
  • nsonaazụ nhazi adịghị mkpa;
  • enwere ihe omume ole na ole ma ọ bụ obere mmemme.

Ọ ga-adị ka akụkọ ahụ nwere isiokwu akọwapụtara nke ọma - API asynchronous na Kafka, mana na njikọ ya, ọ ga-amasị m ịkwado ọtụtụ ihe ozugbo.
Mbụ, na-esote HighLoad++ anyị kwesịrị ichere ruo Nọvemba, n'April, a ga-enwe nsụgharị St. Petersburg, na June anyị ga-ekwu maka nnukwu ibu na Novosibirsk.
Nke abuo, onye dere akụkọ ahụ, Sergei Zaika, bụ onye so na Kọmitii Mmemme nke ọgbakọ ọhụrụ anyị na njikwa ihe ọmụma. KnowledgeConf. Nzukọ a bụ otu ụbọchị, ga-eme na Eprel 26, mana mmemme ya siri ike.
Ma ọ ga-abụ na Mee PHP Russia и RIT++ (ya na DevOpsConf gụnyere) - ị nwekwara ike ịtụ aro isiokwu gị n'ebe ahụ, kwuo banyere ahụmahụ gị ma na-eme mkpesa banyere cones gị juru.

isi: www.habr.com

Tinye a comment