Khibrad u leh horumarinta adeegga Qalabka Lacag-celinta oo leh API asynchronous ee Kafka

Maxaa ku qasbi kara shirkad weyn sida Lamoda, oo leh hannaan habaysan iyo daraasiin adeegyo ah oo isku xidhan, inay wax weyn ka beddesho habkeeda? Dhiirigelintu gebi ahaanba way ka duwanaan kartaa: laga bilaabo sharci-dejinta ilaa rabitaanka tijaabinta ku jirta dhammaan barnaamijyada.

Laakiin tani macnaheedu maaha inaadan ku xisaabtami karin faa'iidooyinka dheeraadka ah. Sergey Zaika ayaa kuu sheegi doona waxa dhabta ah ee aad ku guuleysan karto haddii aad ka hirgeliso API-ga dhacdooyinka ku hagaya Kafka (wax yar). Waxaa sidoo kale hubaal ah in laga hadli doono tallaalo waaweyn iyo daahfuryo xiiso leh - tijaabadu ma samayn karto iyaga la'aantood.

Khibrad u leh horumarinta adeegga Qalabka Lacag-celinta oo leh API asynchronous ee Kafka

Afeef: Maqaalkani wuxuu ku salaysan yahay agab ka soo baxay kulan uu Sergey qabtay Noofambar 2018 HighLoad++. Waayo-aragnimada tooska ah ee Lamoda ee la shaqeynta Kafka ayaa soo jiidatay dhageystayaal aan ka yarayn warbixinnada kale ee jadwalka. Waxaan u maleyneynaa in tani ay tahay tusaale aad u wanaagsan oo ah xaqiiqda ah in aad awooddo oo aad had iyo jeer heli karto dad isku mid ah, iyo qabanqaabiyeyaasha HighLoad ++ waxay sii wadi doonaan inay isku dayaan inay abuuraan jawi ku habboon tan.

Ku saabsan habka

Lamoda waa goob weyn oo e-commerce ah oo leh xarun u gaar ah oo lagala soo xiriiro, adeeg gaarsiinta (iyo shirkado badan oo xiriir la leh), istuudiyo sawireed, bakhaar aad u weyn, dhammaan waxaas oo dhan waxay ku shaqeeyaan software u gaar ah. Waxaa jira daraasiin hab-lacag-bixineed ah, la-hawlgalayaasha b2b kuwaas oo isticmaali kara qaar ama dhammaan adeegyadan oo raba inay ogaadaan macluumaadka ugu dambeeyay ee alaabtooda. Intaa waxaa dheer, Lamoda waxay ka shaqeysaa saddex waddan oo aan ahayn Federaalka Ruushka, wax walbana way ka duwan yihiin halkaas. Isku soo wada duuboo, waxaa jira in ka badan boqol siyaabood oo lagu habeyn karo amar cusub, kaas oo ay tahay in sideeda loo farsameeyo. Waxaas oo dhami waxay ku shaqeeyaan caawinta daraasiin adeegyo ah kuwaas oo mararka qaarkood ku wada xidhiidha siyaabo aan caddayn. Waxa kale oo jira nidaam dhexe oo masuuliyadiisa ugu weyni ay tahay kala dambaynta. Waxaan ugu yeernaa BOB, waan la shaqeeyaa.

Qalab lacag celin ah oo wata dhacdooyinka API-ga

Erayga dhacdooyinku waa la jabsaday; in yar oo dheeraad ah ayaanu si faahfaahsan u qeexi doonaa waxa loola jeedo tan. Waxaan ku bilaabi doonaa macnaha guud ee aan ku go'aansanay in aan isku dayno habka API-ga ee Kafka ku salaysan dhacdooyinka.

Khibrad u leh horumarinta adeegga Qalabka Lacag-celinta oo leh API asynchronous ee Kafka

Dukaan kasta, marka laga soo tago dalabaadka ay macaamiishu ku bixiyaan, waxaa jira waqtiyo marka bakhaarka laga rabo inuu soo celiyo lacag sababtoo ah alaabtu kuma habboona macaamilka. Tani waa hab yar oo gaaban: waxaan cadeyneynaa macluumaadka, haddii loo baahdo, oo wareejinta lacagta.

Laakin soo noqoshada ayaa noqotay mid aad u adag sababtoo ah isbeddelka sharciga, waxaana ku qasbanaaday in aan u hirgelino adeeg yar oo gaar ah.

Khibrad u leh horumarinta adeegga Qalabka Lacag-celinta oo leh API asynchronous ee Kafka

Dhiirigelintayada:

  1. Sharciga FZ-54 - Marka la soo koobo, sharcigu wuxuu u baahan yahay in xafiiska cashuuraha loo sheego wax ku saabsan macaamil lacageed kasta, ha ahaato soo celinta ama rasiidka, SLA si cadaalad ah oo gaaban oo daqiiqado ah. Annagu, ka shirkad e-ganacsi ahaan, waxaanu fulinaa hawlo badan. Farsamo ahaan, tani waxay ka dhigan tahay masuuliyad cusub (iyo sidaas darteed adeeg cusub) iyo hagaajinta dhammaan nidaamyada ku lug leh.
  2. BOB kala go'ay waa mashruuc gudaha ah oo shirkaddu leedahay si ay BOB uga nafiso tiro badan oo ah mas'uuliyadaha aan muhiimka ahayn isla markaana la dhimo kakanaanta guud.

Khibrad u leh horumarinta adeegga Qalabka Lacag-celinta oo leh API asynchronous ee Kafka

Jaantuskani wuxuu muujinayaa nidaamyada Lamoda ee ugu muhiimsan. Hadda intooda badan way badan yihiin koox koox ah oo ah 5-10 adeeg yar oo ku wareegsan monolith sii yaraanaya. Waxay si tartiib tartiib ah u korayaan, laakiin waxaan isku dayeynaa inaan ka dhigno kuwa yaryar, sababtoo ah geynta jajabka la doortay ee dhexda waa cabsi - uma oggolaan karno inuu dhaco. Waxaa naloogu khasbay inaan kaydsanno dhammaan beddelada (Falaaraha) oo aan xisaabta ku darno in mid ka mid ah uu noqon karo mid aan la heli karin.

BOB waxa kale oo ay leedahay wax-isweydaarsiyo badan: nidaamyada lacag-bixinta, hababka bixinta, hababka ogeysiiska, iwm.

Farsamo ahaan BOB waa:

  • ~ 150k khadadka koodka + ~ 100k ee imtixaanada;
  • php7.2 + Zend 1 & Qaybaha Symfony 3;
  • > 100 APIs & ~ 50 isdhexgalka dibadda;
  • 4 wadan oo leh caqligooda ganacsi.

Dejinta BOB waa qaali waana xanuun badan, qadarka koodka iyo dhibaatooyinka ay xalliso waa sida in qofna uusan dhammaan madaxiisa gelin karin. Guud ahaan, waxaa jira sababo badan oo lagu fududeynayo.

Habka soo celinta

Bilawga, laba hab ayaa hawsha ku lug leh: BOB iyo Payment. Hadda laba kale ayaa soo baxay:

  • Adeegga Fiscalization, kaas oo daryeeli doona mashaakilaadka xagga xisaabinta iyo xidhiidhka adeegyada dibadda.
  • Qalabka Soo Celinta, kaas oo si fudud ka kooban wax-is-weydaarsiyo cusub si aan loo kicin BOB.

Hadda hawshu waxay u egtahay sidan:

Khibrad u leh horumarinta adeegga Qalabka Lacag-celinta oo leh API asynchronous ee Kafka

  1. BOB waxa uu helayaa codsi lacag celin ah.
  2. BOB waxa uu ka hadlayaa Qalabkan Lacag-celinta.
  3. Qalabka Soo Celinta ayaa sheegaya Lacag-bixinta: "Lacagta soo celi."
  4. Lacag bixintu waxay soo celisaa lacagta.
  5. Qalabka Lacag-celinta iyo BOB waxay isla jaan-qaadaan heerarka midba midka kale, sababtoo ah hadda labaduba way u baahan yihiin. Wali diyaar uma nihin in aan si buuxda ugu wareegno Qalabka Lacag celinta, maadaama BOB uu leeyahay UI, warbixinnada xisaabaadka, iyo guud ahaan xog badan oo aan si fudud loo wareejin karin. Waa inaad ku fadhiisataa laba kursi.
  6. Codsiga xisaabinta ayaa meesha ka baxaya.

Natiijo ahaan, waxaan samaynay nooc ka mid ah baska dhacdada Kafka - dhacdo-bas, kaas oo wax walba ku bilowdeen. Hurray, hadda waxaan leenahay hal dhibic oo guul darro ah.

Khibrad u leh horumarinta adeegga Qalabka Lacag-celinta oo leh API asynchronous ee Kafka

Faa'iidooyinka iyo khasaarooyinka ayaa aad u muuqda. Waxaan samaynay bas, taas oo macnaheedu yahay in hadda dhammaan adeegyada ay ku tiirsan yihiin. Tani waxay fududeyneysaa naqshadeynta, laakiin waxay soo bandhigaysaa hal dhibic oo fashil ah nidaamka. Kafka way burburi doontaa, hawshu way joogsan doontaa.

Waa maxay API ay wadaan dhacdooyinka

Jawaab wanaagsan su'aashan waxay ku jirtaa warbixinta Martin Fowler (GOTO 2017) "Macnayaal badan oo ku saabsan dhismaha dhacdo-Driven".

Si kooban waxaanu samaynay:

  1. Isku-dubbari dhammaan wax-is-weydaarsiga asynchronous iyada oo loo marayo kaydinta dhacdooyinka. Halkii la ogeysiin lahaa macaamil kasta oo danaynaya isbeddelka heerka shabakadda, waxaanu qornaa dhacdo ku saabsan isbeddelka heerka kaydinta dhexe, iyo macaamiisha xiiseynaya mawduuca waxay akhriyaan wax kasta oo halkaas ka muuqda.
  2. Dhacdada kiiskan waa ogeysiin (farriimaha) in meel wax iska beddeleen. Tusaale ahaan, heerka dalbashada ayaa isbeddelay. Macaamilka xiisaynaya xogta qaar ee la socota isbeddelka xaaladda ee aan lagu darin ogeysiisku wuxuu ogaan karaa xaaladdeeda.
  3. Xulashada ugu badan waa ilo-dhaqaaleedka dhacdada oo dhammaystiran, wareejinta gobolka, dhacdadaas oo ka kooban dhammaan macluumaadka lagama maarmaanka u ah habaynta: meesha ay ka timid iyo heerka ay martay, sida saxda ah ee xogta isu beddeshay, iwm. Su'aasha kaliya ayaa ah suurtogalnimada iyo qadarka macluumaadka aad awoodid inaad kaydiso.

Iyada oo qayb ka ah bilaabista Qalabka Lacag-celinta, waxaanu isticmaalnay ikhtiyaarka saddexaad. Habbaynta dhacdadan la fududeeyay maadaama aanay jirin baahi loo qabo in la soo saaro macluumaad faahfaahsan, oo ay weheliso waxay meesha ka saartay xaaladii halkaas oo dhacdo kasta oo cusub ay dhaliso dillaaca caddaynta codsiyada macaamiisha.

Adeegga Qalabka Soo Celinta aan la rarin, marka Kafka waxaa jira wax ka badan dhadhanka qalinka oo aan loo baahnayn. Uma maleynayo in haddii adeegga lacag celinta uu noqdo mashruuc culus, ganacsigu wuu faraxsanaan lahaa.

Async sarrifka AS IS

Wixii iswaydaarsi iswaydaarsi ah, waaxda PHP waxay badanaa isticmaashaa RabbitMQ. Waxaan u ururinay xogta codsiga, waxaanu galnay saf, macaamiishii isla adeeggaas ayaa akhriyay oo u diray (ama ma dirin). API lafteeda, Lamoda waxay si firfircoon u isticmaashaa Swagger. Waxaan naqshadeynaa API, ku sharaxnaa Swagger, waxaana soo saareynaa macmiilka iyo koodka serverka. Waxaan sidoo kale isticmaalnaa wax yar oo la xoojiyay JSON RPC 2.0.

Meelaha qaar basaska ESB ayaa la isticmaalaa, qaar waxay ku nool yihiin firfircooni MQ, laakiin, guud ahaan, RabbitMQ - heerka.

Async beddelka TO BE

Marka la naqshadeynayo beddelka iyada oo loo marayo dhacdooyinka-baska, isbarbardhig ayaa la raadin karaa. Waxaan si la mid ah u sharaxnaa isweydaarsiga xogta mustaqbalka iyada oo loo marayo sharraxaadaha qaab dhismeedka dhacdada. Qaabka yaml, waa in aan samayno jiilka koodka nafteena, koronto-dhaliye wuxuu abuuraa DTO-yada si waafaqsan qeexitaanka wuxuuna barayaa macaamiisha iyo adeegayaasha inay la shaqeeyaan. Jiilku wuxuu u baxaa laba luqadood - golang iyo php. Tani waxay gacan ka geysaneysaa in maktabaduhu noqdaan kuwo joogto ah. Koronto-dhaliyaha waxa uu ku qoran yahay golang, waana sababta ay u heshay magaca gogi.

Dhacdooyinka-kaarka Kafka waa wax caadi ah. Waxaa jira xal ka yimid nooca ganacsiga ugu weyn ee Kafka Confluent, waxaa jira nakadi, xal ka yimid domain-keena walaalaha Zalando. Our dhiirigelinta in lagu bilaabo vanilj Kafka - tani waxay la macno tahay in aan xalka xor ka tagno ilaa aan ugu dambayntii go'aansanayno in aan meel walba u isticmaali doono iyo in kale, oo aan nafteena u dhaafno meel aan ku dhaqaaqno iyo horumarinno: waxaan rabnaa taageero noo JSON RPC 2.0, koronto-dhaliyeyaasha laba luqadood oo aan aragno waxa kale.

Waa wax lala yaabo in xitaa kiiskan farxadda leh, marka uu jiro ganacsi la mid ah, Zalando, kaas oo sameeyay xal qiyaas ahaan la mid ah, ma u isticmaali karno si wax ku ool ah.

Habka qaab dhismeedka marka la bilaabayo waa sida soo socota: waxaan si toos ah wax uga akhrinay Kafka, laakiin wax ku qor oo kaliya dhacdooyinka-baska. Waxaa jira wax badan oo diyaar u ah in wax lagu akhriyo Kafka: dilaaliinta, dheelitirayaasha, oo waxay u badan tahay ama ka yar diyaar u ah miisaanka siman, waxaan rabay inaan tan sii wado. Waxaan rabnay inaan ku dhammaystirno duubista hal Gateway aka Events-bus, waana kan sababta.

Dhacdooyinka-baska

Ama baska dhacdada. Kani si fudud waa http gateway, kaas oo qaata doorar muhiim ah oo dhowr ah:

  • Soo saarida Xaqiijinta - Waxaan hubinaa in dhacdooyinku ay buuxiyeen qeexitaannadayada.
  • Nidaamka Master Event, taas oo ah, kani waa nidaamka ugu weyn oo kaliya ee shirkadda oo ka jawaabaya su'aasha ah dhacdooyinka qaab-dhismeedka loo arko inay sax yihiin. Ansixinta si fudud waxay ku lug leedahay noocyada xogta iyo tirooyinka si adag loo qeexo waxa ku jira.
  • Hash function for Sharding - qaab dhismeedka fariinta Kafka waa furaha-qiimaha iyadoo la isticmaalayo xashka furaha waxaa la xisaabiyaa halka la dhigo.

maxaad

Waxaan ka shaqeynaa shirkad weyn oo leh nidaam la hagaajiyay. Waa maxay sababta wax loo beddelo? Tani waa tijaabo, waxaanan filaynaa inaan faa'iidooyin badan ka helno.

1: n+1 beddelashada (mid ilaa badan)

Kafka ayaa ka dhigaysa mid aad u fudud in lagu xidho macaamiisha cusub API-ga.

Aynu nidhaahno waxaad haysaa hage aad u baahan tahay inaad la socoto dhawr hab oo isku mar ah (iyo kuwo cusub). Markii hore, waxaan ikhtiraacnay xirmo fulinaya set-API, iyo nidaamka master-ka ayaa lagu wargeliyay cinwaannada macaamiisha. Hadda nidaamka sayidku wuxuu u soo diraa cusboonaysiinta mawduuca, qof kasta oo danaynayana wuu akhriyaa. Nidaam cusub ayaa soo muuqday - waxaan u saxiixnay mowduuca. Haa, sidoo kale xidhmo, laakiin ka fudud.

Xaaladda soo celinta-qalabka, oo ah qayb ka mid ah BOB, way nagu habboon tahay inaan ku sii wadno Kafka. Lacag-bixinta ayaa sheegaysa in lacagta la soo celiyay: BOB, RT waxay ogaadeen arrintan, beddeleen xaaladdooda, Adeegga Fiscalization ayaa ogaaday arrintan oo soo saaray jeeg.

Khibrad u leh horumarinta adeegga Qalabka Lacag-celinta oo leh API asynchronous ee Kafka

Waxaan wadnaa qorshooyin aan ku abuureyno Adeeg Ogeysiin midaysan kaas oo ogeysiin doona macmiilka wararka ku saabsan dalabkiisa/soo celintiisa. Hadda mas'uuliyaddani waxay ku faaftaa nidaamyada. Way nagu filnaan doontaa inaan barno Adeegga Ogeysiinta si aan uga helno macluumaadka ku habboon Kafka oo aan uga jawaabno (oo aan joojinno ogeysiisyada nidaamyada kale). Wax beddelasho toos ah oo cusub looma baahna.

Xog-wade

Xogta ka dhaxaysa nidaamyada waxay noqotaa mid daah-furan - iyadoon loo eegayn "ganacsiga dhiigga leh" ee aad leedahay iyo si kasta oo dib-u-dhacaagu u liito. Lamoda waxay leedahay waax Falanqaynta Xogta oo ururisa xogta nidaamyada oo gelisa qaab dib loo isticmaali karo, labadaba ganacsiga iyo nidaamyada caqliga leh. Kafka wuxuu kuu ogolaanayaa inaad si dhakhso ah u siiso xog badan oo aad xogtaas ku hayso ilaa hadda.

Diiwaanka taranka

Fariimaha ma lumiyaan marka la akhriyo, sida RabbitMQ. Marka ay dhacdo ka kooban tahay macluumaad ku filan habaynta, waxaanu leenahay taariikh isbedelada dhow ee shayga, iyo, haddii la doonayo, awoodda lagu dabaqo kuwan isbeddellada.

Muddada kaydinta ee diiwaanka nuqulku waxay kuxirantahay xoojinta qoraalka mawduucan; Kafka waxay kuu ogolaanaysaa inaad si dabacsanaan u dejiso xadka wakhtiga kaydinta iyo mugga xogta. Mawduucyada degdega ah, waxaa muhiim ah in dhammaan macaamiishu ay helaan wakhti ay ku akhriyaan macluumaadka ka hor inta aysan lumin, xitaa haddii ay dhacdo wakhti gaaban oo aan shaqaynayn. Caadi ahaan waa suurtogal in lagu kaydiyo xogta unug maalmo, taasoo ku filan taageerada.

Khibrad u leh horumarinta adeegga Qalabka Lacag-celinta oo leh API asynchronous ee Kafka

Marka xigta, in yar oo ka sheekaynta dukumentiga, kuwa aan aqoon u lahayn Kafka (sawirka sidoo kale wuxuu ka yimid dukumeentiyada)

AMQP waxay leedahay saf: waxaan u qornaa fariimaha safka macaamiisha. Caadi ahaan, hal saf ayaa lagu farsameeyaa hal nidaam oo leh caqli-gal ganacsi oo isku mid ah. Haddii aad u baahan tahay inaad ogeysiiso dhowr nidaam, waxaad bari kartaa arjiga inuu u qoro dhowr saf ama isku beddelka habka fanout, kaas oo isku xira laftiisa.

Kafka waxay leedahay soo koobid la mid ah mowduuca, taas oo aad ku qorto fariimaha, laakiin ma luminayaan ka dib markaad akhrido. Sida caadiga ah, marka aad ku xidho Kafka, waxaad helaysaa dhammaan fariimaha oo dhan oo waxaad haysataa ikhtiyaarka ah inaad ku kaydiso meesha aad ka tagtay. Taasi waa, inaad si isdaba joog ah u akhrido, laga yaabaa inaadan u calaamadin fariinta sidii wax loo akhriyay, laakiin kaydi id-ka aad ka sii wadi karto akhrinta. Id-ka aad dejisay waxaa loo yaqaan 'offset', farsamaduna waa la dhimay.

Sidaas awgeed, caqli-gal kala duwan ayaa la hirgelin karaa. Tusaale ahaan, waxaan ku haynaa BOB 4 xaaladood oo dalal kala duwan ah - Lamoda waxay ku taal Ruushka, Kazakhstan, Ukraine, Belarus. Maadaama si gaar ah loo kala diray, waxay leeyihiin habab yar oo kala duwan iyo caqligooda ganacsi. Waxaan fariinta ku tilmaamaynaa dalka ay u jeedaan. Macaamiil kasta oo BOB ah oo waddan kastaa wax ku akhriya koox kale oo Id ah, haddii farriintuna aanay iyaga khusayn, way ka boodaan, i.. isla markiiba waxay ku kacaysaa +1. Haddii mawduuca isku midka ah uu akhriyo Adeegga Lacag-bixinta, ka dibna wuxuu sidaas ku sameeyaa koox gaar ah, sidaas darteed ka-baxyadu ma isdhaafaan.

Shuruudaha dhacdada:

  • Dhamaystirka xogta Waxaan jeclaan lahaa in dhacdada ay hesho xog ku filan si loo habeeyo.

  • Daacadnimo Waxaanu u igmanay Events-bas xaqiijinta in ay dhacdo in ay joogto tahay oo ay ka shaqayn karto.
  • Amarka waa muhiim. Arrinta soo noqoshada, waxa nalagu qasbay in aan taariikhda la shaqayno. Ogeysiinta, amarku muhiim maaha, haddii ay yihiin ogeysiisyo isku mid ah, iimaylka ayaa la mid noqon doona iyada oo aan loo eegin dalabka marka hore yimid. Xaaladda lacag-celinta, waxaa jira nidaam cad; haddii aan bedelno amarka, ka reebanaanshaha ayaa soo baxaya, lacag-celinta lama abuuri doono ama la shaqeyn doono - waxaan ku dambayn doonaa xaalad kale.
  • Joogteynta Waxaan leenahay dukaan, oo hadda waxaan abuurnaa dhacdooyin halkii API ah. Waxaan u baahanahay hab aan si degdeg ah oo raqiis ah ugu gudbino macluumaadka ku saabsan dhacdooyinka cusub iyo isbeddelada kuwa jira adeegyadayada. Tan waxaa lagu gaaraa iyada oo loo marayo qeexid guud oo ku jirta kaydka git ee goonida ah iyo koodhka dhaliyaha. Sidaa darteed, macaamiisha iyo adeegayaasha adeegyada kala duwan waa la isku duway.

Kafka ee Lamoda

Waxaan haynaa saddex qalab oo Kafka ah:

  1. Logs;
  2. R&D;
  3. Dhacdooyinka-baska.

Maanta waxaan ka hadlaynaa oo kaliya qodobka ugu dambeeya. Dhacdooyinka-baska, ma hayno qalabyo aad u waaweyn - 3 dilaal (servers) iyo 27 mawduuc oo keliya. Sida caadiga ah, hal mawduuc waa hal hab. Laakiin kani waa qodob daahsoon, waananu taaban doonaa hadda.

Khibrad u leh horumarinta adeegga Qalabka Lacag-celinta oo leh API asynchronous ee Kafka

Kor waxaa ku yaal garaafka rps. Habka lacag celinta waxaa lagu calaamadeeyay xariiq turquoise ah (haa, kan dhidibka X), iyo xariiqda casaanka ah waa habka cusboonaysiinta nuxurka.

Buugga Lamoda wuxuu ka kooban yahay malaayiin badeecooyin ah, xogtana waa la cusboonaysiiyaa mar walba. Qaar ka mid ah ururinta ayaa ka baxa moodada, kuwa cusub ayaa la sii daayaa si ay u beddelaan, iyo moodooyinka cusub ayaa si joogto ah uga muuqda liiska. Waxaan isku dayeynaa inaan saadaalino waxa xiiso u yeelan doona macaamiisheena berrito, si aan si joogto ah u iibsano waxyaabo cusub, sawiro oo aan cusbooneysiino kiiska bandhigga.

Meesha ugu sarraysa ee casaanka ah waa cusboonaysiinta alaabta, taas oo ah, isbeddelada alaabta. Waxaa la arki karaa in nimanku ay sawirro qaadeen, sawirro qaadeen, ka dibna mar kale! - waxay rartay xirmo dhacdooyin

Dhacdooyinka Lamoda waxay isticmaalaan kiisaska

Waxaan u isticmaalnaa qaab-dhismeedka la dhisay hawlaha soo socda:

  • Soo celi raadraaca xaaladda:-ku-wacida-ficil iyo la socodka xaaladda dhammaan nidaamyada ku lug leh. Lacag bixinta, heerarka, xisaabinta, ogeysiinta. Halkan waxaan ku tijaabinay habka, waxaanu samaynay qalab, ururinay dhammaan cayayaanka, ku qor dukumentiyo oo u sheegnay asxaabteena sida loo isticmaalo.
  • Cusboonaysiinta kaadhadhka alaabta: qaabeynta, xogta-meta, sifooyinka. Hal nidaam ayaa wax akhriya (kaas oo soo bandhigaya), iyo dhowr wax ayaa qoraya.
  • Iimayl, riix iyo sms: dalabkii waa la soo ururiyay, dalabkii waa yimid, soo celintii waa la aqbalay, iwm, way badan yihiin.
  • Kaydka, cusboonaysiinta bakhaarka - Cusboonaysiinta tirada alaabta, tirooyinka kaliya: imaatinka bakhaarka, soo noqo. Waa lagama maarmaan in dhammaan nidaamyada la xidhiidha kaydinta alaabta ay ku shaqeeyaan xogta ugu badan ee hadda jirta. Hadda, nidaamka cusboonaysiinta saamiyada waa mid aad u adag; Kafka ayaa fududayn doonta.
  • Falanqaynta Xogta (Waaxda R&D), Qalabka ML, Analytics, Statistics. Waxaan rabnaa in akhbaartu noqoto mid hufan - Kafka aad ayey ugu habboon tahay tan.

Hadda qaybta xiisaha badan ee ku saabsan kuuskuusyada waaweyn iyo daahfurka xiisaha leh ee dhacay lixdii bilood ee la soo dhaafay.

Dhibaatooyinka naqshadeynta

Aynu nidhaahno waxaan rabnaa inaan sameyno wax cusub - tusaale ahaan, u wareejinta dhammaan habka gaarsiinta Kafka. Hadda qayb ka mid ah nidaamka waxa lagu hirgaliyay Nidaaminta Nidaaminta ee BOB. Waxaa jira nooc xaalad ah oo ka dambeeya wareejinta amarka adeegga gaarsiinta, u dhaqaaqista bakhaar dhexdhexaad ah, iyo wixii la mid ah. Waxaa jira monolith dhan, xitaa laba, oo lagu daray farabadan APIs oo u heellan gaarsiinta. Wax badan ayay ka yaqaanaan dhalmada.

Kuwani waxay u muuqdaan inay isku mid yihiin, laakiin Nidaaminta Dalabka ee BOB iyo Nidaamka Rakaabku waxay leeyihiin heerar kala duwan. Tusaale ahaan, qaar ka mid ah adeegyada xawilayaashu ma soo diraan shuruudo dhexdhexaad ah, laakiin kaliya kuwa u dambeeya: "lagu dhiibay" ama "lumay". Kuwo kale, liddi ku ah, waxay si faahfaahsan uga warbixiyaan dhaqdhaqaaqa alaabta. Qof kastaa wuxuu leeyahay xeerar u gaar ah: qaar ka mid ah, iimaylka waa sax, taas oo macnaheedu yahay in la farsamayn doono; kuwa kale ma shaqeynayo, laakiin amarka weli waa la sii shaqeyn doonaa sababtoo ah waxaa jira lambar taleefan oo lala xiriiri karo, qof ayaa sheegaya in amarkaas aan la fulin doonin gabi ahaanba.

Qulqulka xogta

Xaaladda Kafka, su'aasha ah abaabulka socodka xogta ayaa soo baxaya. Hawshani waxa ay ku lug leedahay doorashada istaraatiijiyad ku salaysan dhawr qodob, aynu wada marno.

Hal mowduuc ama kuwo kala duwan?

Waxaan haynaa qeexid dhacdo. BOB waxaan ku qornaa in dalabka noocaas ah iyo kuwan oo kale loo baahan yahay in la keeno, waxaanan ku tuseynaa: nambarka dalabka, ka kooban yahay, SKUs iyo code-yada qaar, iwm. Marka ay alaabtu soo gaadho bakhaarka, keenista waxa ay awood u yeelan doontaa in ay hesho jaangooyooyin, wakhti wakhti iyo wax kasta oo loo baahan yahay. Laakin markaa waxaan rabnaa inaan ka helno xogtan xogta BOB. Waxaan haynaa hab kale oo ah helitaanka xogta bixinta. Tani ma isku dhacdo baa? Mise kani waa is dhaafsi gooni ah oo u qalma mawduuciisa?

Inta badan, waxay noqon doonaan kuwo aad u la mid ah, iyo jirrabaadda in la sameeyo hal mawduuc ma aha mid aan sal lahayn, sababtoo ah mawduuc gaar ah waxaa loola jeedaa macaamiisha kala duwan, configs gaar ah, jiil gaar ah oo dhan this. Laakiin ma aha xaqiiqo.

Goob cusub ama dhacdo cusub?

Laakiin haddii aad isticmaasho dhacdooyin isku mid ah, markaa dhibaato kale ayaa soo baxda. Tusaale ahaan, dhammaan hababka wax-bixinta ma dhalin karaan nooca DTO ee BOB uu dhalin karo. Waxaan u dirnaa id, laakiin ma kaydiyaan sababtoo ah uma baahna, iyo marka laga eego aragtida bilawga nidaamka baska, goobtan ayaa loo baahan yahay.

Haddii aan soo bandhigno qaanuunka dhacdada-baska in goobtan loo baahan yahay, ka dib waxaa nalagu qasbay inaan dejino sharciyo ansaxinta dheeri ah ee BOB ama maamulaha dhacdada bilowga. Xaqiijinta waxay bilaabataa inay ku faafto adeegga oo dhan - tani maaha mid ku habboon.

Dhibaato kale ayaa ah tijaabinta horumarinta korodhka. Waxaa naloo sheegay in loo baahan yahay in wax lagu soo kordhiyo xafladda, lagana yaabo, haddii aan ka fikirno, inay dhacdo gaar ah. Laakiin nidaamkayaga, dhacdo gaar ah waa mawduuc gaar ah. Mawduuc gaar ah waa habka aan kor ku soo sheegay oo dhan. Horumariyuhu waxa uu damcay in uu si fudud ugu daro goob kale qorshaha JSON oo uu dib u soo kiciyo.

Xaaladda lacag-celinta, waxaan gaadhnay dhacdada dhacdooyinka nus sano gudahood. Waxaan haysanay hal dhacdo-meta oo la yiraahdo cusboonaysiinta lacag-celinta, taas oo lahayd meel nooc ah oo sharraxaysa waxa cusboonaysiintan dhab ahaantii ahayd. Sababtan awgeed, waxaan haysanay furayaal "cajiib ah" oo ay la socdaan ansaxiyeyaal noo sheegay sida loo ansixiyo dhacdadan noocaan ah.

Nooca dhacdada

Si aad u xaqiijiso fariimaha gudaha Kafka waxaad isticmaali kartaa Euro, laakiin waxa loo baahday in isla markiiba la dul dhigo oo la isticmaalo Confluent. Xaaladeena, waa inaan ka taxadarnaa daabacaada. Had iyo jeer suurtagal ma noqon doonto in dib loo akhriyo fariimaha qoraalka dib u celinta sababtoo ah moodeelku "bidix". Asal ahaan, waxay soo baxdaa in la dhiso noocyo si qaabku u noqdo mid gadaal u socda: tusaale ahaan, samee beerta si ku meel gaar ah ikhtiyaari ah. Haddii kala duwanaanshuhu aad u xoog badan yahay, waxaan bilaabeynaa inaan ku qorno mowduuc cusub, oo aan u wareejino macaamiisha marka ay dhameeyaan akhrinta kii hore.

Dammaanad qaadka nidaamka akhriska ee qaybaha

Mawduucyada gudaha Kafka waxay u qaybsan yihiin qaybo. Tani maahan mid aad muhiim u ah inta aan naqshadeyneyno hay'adaha iyo wax-isweydaarsiga, laakiin waa muhiim marka la go'aaminayo sida loo isticmaalo oo loo cabbiro.

Xaaladda caadiga ah, waxaad ku qortaa hal mawduuc oo Kafka ah. Sida caadiga ah, hal qayb ayaa la isticmaalaa, oo dhammaan fariimaha mawduucan ku jira ayaa aadaya. Macmiilkuna sidaas buu u akhriyaa fariimahan si isku xigta. Aynu nidhaahno hadda waxaan u baahanahay inaan balaadhino nidaamka si farriimaha ay u akhriyaan laba macaamiil oo kala duwan. Haddii, tusaale ahaan, aad dirayso SMS, markaa waxaad u sheegi kartaa Kafka inay sameyso qayb dheeraad ah, Kafka waxay bilaabi doontaa inay u kala qaybiso farriimaha laba qaybood - kala badh halkan, kala badh halkan.

Sidee ayay Kafka u kala qaybisaa? Fariin kastaa waxay leedahay jidh (oo aynu ku kaydinayno JSON) iyo fure. Waxaad ku dhejin kartaa shaqada furaha, kaas oo go'aamin doona qaybta ay farriintu geli doonto.

Xaaladeena dib-u-celinta, tani waa muhiim, haddii aan qaadno laba qaybood, markaa waxaa jira fursad ah in macaamilka isku midka ah uu ka shaqeyn doono dhacdada labaad ka hor inta aan la gaarin marka hore oo ay jiri doonto dhibaato. Shaqada xashiishka waxay hubisaa in fariimaha wata furaha isku mid ah ay ku dhamaanayaan isla qayb isku mid ah.

Dhacdooyinka vs amarrada

Tani waa dhibaato kale oo aan la kulannay. Dhacdadu waa dhacdo gaar ah: waxaanu nidhaahnaa wax ka dhacay meel (wax_ka dhacay), tusaale ahaan, shay waa la joojiyay ama lacag celin ayaa dhacday. Haddii qof uu dhegeysto dhacdooyinkan, ka dib marka loo eego "shayga la joojiyay," cidda lacag celinta ah ayaa la abuuri doonaa, iyo "lacag celin ayaa dhacday" ayaa lagu qori doonaa meel ka mid ah dejinta.

Laakiin sida caadiga ah, marka aad naqshadeyso dhacdooyinka, ma rabto inaad ku qorto si aan micne lahayn - waxaad ku tiirsan tahay xaqiiqda ah in qof uu akhriyi doono. Waxaa jira tijaabin sare oo ah in la qoro wax_aanu dhicin Tusaale ahaan, shaygu waa diyaar in la soo celiyo.

Dhinaca kale, waxay soo jeedinaysaa sida dhacdada loo isticmaali doono. Dhanka kale, waxay u muuqataa mid aad uga yar sida magaca dhacdada caadiga ah. Ka sokow, kama foga halkan ilaa amar-ku-samaynta. Laakiin ma dammaanad qaadid in qof akhriyey dhacdadan; haddii aad akhridona, si guul leh ayaad u akhridaa; oo haddii aad si guul leh u akhrido, markaa wax baad samaysay, iyo in wax lagu guulaystay. Isla marka ay dhacdo noqoto wax_wax, jawaab celintu waxay noqotaa lama huraan, taasina waa dhibaato.

Khibrad u leh horumarinta adeegga Qalabka Lacag-celinta oo leh API asynchronous ee Kafka

Isdhaafsiga asynchronous ee RabbitMQ, marka aad akhrido fariinta, aad http, waxaad leedahay jawaab - ugu yaraan in fariinta la helay. Markaad wax u qorto Kafka, waxaa jira fariin aad u qortay Kafka, laakiin ma ogid wax ku saabsan sida loo habeeyey.

Sidaa darteed, xaaladdeenna, waxay ahayd inaan soo bandhigno dhacdo jawaab celin ah oo aan dejino kormeer si haddii dhacdooyin badan la soo diro, ka dib iyo wakhtigaas oo kale waa in tiro la mid ah dhacdooyinka jawaabaha ay yimaadaan. Haddii taasi dhici waydo, markaas wax u muuqdaa inay khaldameen. Tusaale ahaan, haddii aan u dirno "wax-u-diyaar ah_to_soo celinta" dhacdada, waxaan fileynaa in lacag celin la abuuri doono, lacagta lagu soo celin doono macmiilka, iyo "lacag_lagu soo celiyay" dhacdada ayaa naloo soo diri doonaa. Laakiin tani ma aha mid la hubo, sidaa darteed la socodka ayaa loo baahan yahay.

Noocyo

Waxaa jira dhibaato cad oo cad: haddii aad mawduuc ka akhrido si isdaba-joog ah, oo aad leedahay fariin xun, macaamilka ayaa dhici doona, mana aad sii socon doontid. Waxaad u baahan tahay Jooji dhammaan macaamiishaSi aad u sii wadato akhrinta.

Waanu ogaanay, waanu ku xisaabtanay, haddana way dhacday. Oo tani waxay dhacday sababtoo ah dhacdadu waxay ahayd mid ansax ah marka laga eego aragtida dhacdooyinka-baska, dhacdadu waxay ansaxisay aragtida ansaxiyaha codsiga, laakiin ma ahayn mid ansax ah marka loo eego aragtida PostgreSQL, sababtoo ah hal nidaam. MySQL oo leh INT UNSIGNED, oo nidaamka cusub ee qoranna wuxuu lahaa PostgreSQL oo keliya INT. Cabbirkiisu waa ka yara yar yahay, Id-kuna kuma habboonayn. Symfony way dhimatay marka laga reebo. Annagu, dabcan, waanu qabanay waxa ka reeban, sababtoo ah waanu ku tiirsanahay, waxaanan samaynaynay wax ka bedelkan, laakiin ka hor waxaan rabnay inaanu kordhino miiska dhibaatada, maadaama fariinta loo shaqeeyay si aan guul lahayn. Xisaabiyeyaasha mashruucan ayaa sidoo kale ku jira keydka xogta, Symfony waxay horey u xirtay isgaarsiinta xogta macluumaadka, marka laga reebo labaadna waxay dishay habka oo dhan iyada oo aan fursad loo helin in lagu sameeyo.

Adeeggu wuxuu jiifay wakhti wakhti ah - nasiib wanaag, Kafka tani maaha mid aad u xun, sababtoo ah farriimaha ayaa weli ah. Marka shaqada la soo celiyo, waxaad dhamayn kartaa akhrintooda. Waa raaxo.

Kafka waxa ay awood u leedahay in ay dejiso kharash gardaro ah iyada oo loo marayo qalabaynta. Laakiin si aad tan u sameyso, waxaad u baahan tahay inaad joojiso dhammaan macaamiisha - kiiskeena, u diyaari sii deyn gaar ah oo aysan jiri doonin macaamiisha, dib-u-dejinta. Kadibna Kafka waxaad ku wareejin kartaa qalabaynta, fariintuna way socon doontaa.

Nuance kale - replication log vs rdkafka.so - waxay la xiriirtaa waxyaabaha gaarka ah ee mashruucayaga. Waxaan isticmaalnaa PHP, iyo PHP, sida caadiga ah, dhammaan maktabadaha waxay la xiriiraan Kafka iyada oo loo marayo kaydka rdkafka.so, ka dibna waxaa jira nooc ka mid ah duubista. Waxaa laga yaabaa in kuwani ay yihiin dhibaatooyinkeenna shakhsi ahaaneed, laakiin waxaa soo baxday in in si fudud dib loo akhriyo qayb ka mid ah wixii aan hore u akhrinay ma fududa. Guud ahaan, waxaa jiray dhibaatooyin software.

Ku soo noqoshada waxyaabaha gaarka ah ee la shaqeynta qaybaha, waxay si sax ah ugu qoran tahay dukumeentiyada macaamiisha >> mawduucyada qaybo. Laakiin tan waxaan ogaaday in badan ka dib intii aan jeclaan lahaa. Haddii aad rabto inaad cabbirto oo aad haysato laba macaamiil, waxaad u baahan tahay ugu yaraan laba qaybood. Taasi waa, haddii aad haysato hal qayb oo 20 kun oo farriimo ah ay ku urureen, oo aad samaysay mid cusub, tirada fariimaha lama simi doono dhawaan. Sidaa darteed, si aad u hesho laba macaamiil oo isbarbar socda, waxaad u baahan tahay inaad wax ka qabato qaybo.

Kormeerka

Waxaan u maleynayaa in habka aan ula socono ay noqon doonto mid sii caddaan doonta dhibaatooyinka ka jira habka jira.

Tusaale ahaan, waxaan xisaabineynaa inta alaab ee ku jirta keydka xogta ayaa dhawaan bedelay xaaladdooda, sidaas darteed, dhacdooyinka waa inay dhacaan iyadoo lagu saleynayo isbeddeladan, waxaana lambarkan u dirnaa nidaamka kormeerka. Kadibna Kafka waxaan ka helnaa lambarka labaad, inta dhacdooyinka dhabta ah ee la duubay. Sida iska cad, farqiga u dhexeeya labadan lambar waa inuu had iyo jeer ahaado eber.

Khibrad u leh horumarinta adeegga Qalabka Lacag-celinta oo leh API asynchronous ee Kafka

Intaa waxaa dheer, waxaad u baahan tahay inaad la socoto sida uu wax-soo-saaruhu wax u qabanayo, haddii dhacdooyinka-baska la helay farriimaha, iyo sida macaamilka uu sameynayo. Tusaale ahaan, jaantusyada hoose, Qalabka Lacag-celinta si fiican ayuu u shaqaynayaa, laakiin BOB waxay si cad u leedahay dhibaatooyin (buluug sare).

Khibrad u leh horumarinta adeegga Qalabka Lacag-celinta oo leh API asynchronous ee Kafka

Waxaan hore u sheegay daahitaanka kooxda macaamiisha. Ku dhawaad ​​hadalka, tani waa tirada fariimaha aan la akhriyin. Guud ahaan, macaamiisheena ayaa si dhakhso ah u shaqeeya, markaa dib u dhacu inta badan waa 0, laakiin mararka qaarkood waxaa jiri kara wakhti gaaban oo gaaban. Kafka waxay tan ku samayn kartaa meel ka baxsan sanduuqa, laakiin waxaad u baahan tahay inaad dejiso muddo cayiman.

Waxaa jira mashruuc masckaas oo ku siin doona macluumaad dheeraad ah oo ku saabsan Kafka. Waxay si fudud u isticmaashaa kooxda macaamiisha API si ay u siiso heerka sida kooxdani wax u wado. Marka lagu daro OK iyo Failed, waxaa jira digniin, waxaadna ogaan kartaa in macaamiishaadu aysan la qabsan karin xawaaraha wax soo saarka - ma haystaan ​​wakhti ay ku saxaan waxa qoran. Nidaamku waa mid caqli badan oo sahlan in la isticmaalo.

Khibrad u leh horumarinta adeegga Qalabka Lacag-celinta oo leh API asynchronous ee Kafka

Tani waa sida jawaabta API ay u egtahay. Halkan waxaa ah kooxda bob-live-fifa, partition refund.update.v1, heerka OK, lag 0 - kama dambaysta kama dambaysta ah sida iyo sida.

Khibrad u leh horumarinta adeegga Qalabka Lacag-celinta oo leh API asynchronous ee Kafka

Kormeerka updated_at SLA (ku dheggan) Horaan u sheegay. Tusaale ahaan, alaabtu waxay isu beddeshay heerka ay diyaar u tahay soo noqoshada. Waxaan ku rakibnay Cron, kaas oo sheegaya in haddii 5 daqiiqo shaygan uusan tagin inuu soo celiyo (waxaan ku soo celinaa lacagta nidaamka lacag bixinta si dhakhso ah), markaa wax hubaal ah ayaa khaldamay, tanina hubaal waa kiis taageero ah. Sidaa darteed, waxaan si fudud u qaadanaa Cron, oo akhriya waxyaalahan oo kale, iyo haddii ay ka weyn yihiin 0, markaa waxay soo dirtaa digniin.

Si loo soo koobo, isticmaalka dhacdooyinka ayaa ku habboon marka:

  • macluumaadka waxaa loo baahan yahay dhowr nidaam;
  • natiijada ka baaraandegidu muhiim maaha;
  • waxaa jira dhacdooyin yar ama dhacdooyin yaryar.

Waxay u egtahay in maqaalku leeyahay mawduuc gaar ah - asynchronous API on Kafka, laakiin iyada oo la xiriirta waxaan jeclaan lahaa inaan kugula taliyo waxyaabo badan hal mar.
Marka hore, ku xiga HighLoad++ Waxaan u baahanahay inaan sugno ilaa Noofambar, Abriil waxaa jiri doona version St. Petersburg, iyo bisha Juun waxaan ka hadli doonaa culeysyo badan oo Novosibirsk ah.
Marka labaad, qoraaga warbixinta, Sergei Zaika, waa xubin ka mid ah Guddiga Barnaamijka ee shirkeena cusub ee maaraynta aqoonta. AqoontaConf. Shirku waa hal maalin, wuxuuna dhacayaa 26ka Abriil, laakiin barnaamijkiisu waa mid aad u adag.
Waxayna noqon doontaa bisha May PHP Russia и RIT++ (oo ay ku jirto DevOpsConf) - waxaad sidoo kale ku soo jeedin kartaa mawduucaaga halkaas, ka hadal khibradaada oo aad ka caban kartaa koolladaada.

Source: www.habr.com

Add a comment