Taithí ar an tseirbhís Uirlis Aisíocaíochta a fhorbairt le API asincrónach ar Kafka

Cad a d’fhéadfadh iachall a chur ar chuideachta chomh mór sin le Lamoda, le próiseas sruthlínithe agus an iliomad seirbhísí idirnasctha, a cur chuige a athrú go suntasach? Is féidir le spreagadh a bheith go hiomlán difriúil: ón reachtaíocht go dtí an fonn chun triail a bhaint as gach ríomhchláraitheoir.

Ach ní chiallaíonn sé seo nach féidir leat brath ar shochair bhreise. Inseoidh Sergey Zaika duit cad go díreach is féidir leat a bhuachan má chuireann tú an API atá bunaithe ar imeachtaí i bhfeidhm ar Kafka (cúplaald). Is cinnte go mbeidh caint freisin ar sheiteanna móra agus fionnachtana suimiúla - ní féidir leis an turgnamh a dhéanamh gan iad.

Taithí ar an tseirbhís Uirlis Aisíocaíochta a fhorbairt le API asincrónach ar Kafka

Séanadh: Tá an t-alt seo bunaithe ar ábhair ó chruinniú a thionóil Sergey i mí na Samhna 2018 ar HighLoad++. Mheall taithí bheo Lamoda ar oibriú le Kafka éisteoirí nach lú ná tuairiscí eile ar an sceideal. Is dóigh linn gur sampla iontach é seo den fhíric gur féidir leat agus gur cheart duit teacht ar dhaoine ar aon intinn leo i gcónaí, agus leanfaidh lucht eagraithe HighLoad++ ag iarraidh atmaisféar a chruthú a chuidíonn leis seo.

Maidir leis an bpróiseas

Is ardán mór ríomhthráchtála é Lamoda a bhfuil a ionad teagmhála féin, seirbhís seachadta (agus go leor cleamhnaithe), stiúideo grianghraf, stóras ollmhór, agus ritheann sé seo go léir ar a bogearraí féin. Tá mórán modhanna íocaíochta ann, comhpháirtithe b2b a fhéadfaidh cuid de na seirbhísí seo nó iad uile a úsáid agus a dteastaíonn uathu eolas cothrom le dáta a fháil ar a gcuid táirgí. Ina theannta sin, feidhmíonn Lamoda i dtrí thír seachas Cónaidhm na Rúise agus tá gach rud beagán difriúil ann. San iomlán, is dócha go bhfuil níos mó ná céad bealaí ann chun ordú nua a chumrú, a chaithfear a phróiseáil ina bhealach féin. Oibríonn sé seo go léir le cabhair ó iliomad seirbhísí a dhéanann cumarsáid uaireanta ar bhealaí nach bhfuil soiléir. Tá córas lárnach ann freisin a bhfuil stádas ordaithe mar phríomhfhreagracht air. Glaoimid BOB uirthi, oibrím léi.

Uirlis Aisíocaíochta le API bunaithe ar imeachtaí

Tá an focal imeachtaí-tiomáinte go leor hacnaí; beagán eile beidh muid ag sainmhíniú níos mine cad is brí leis seo. Tosóidh mé leis an gcomhthéacs inar shocraigh muid triail a bhaint as an gcur chuige API atá bunaithe ar imeachtaí i Kafka.

Taithí ar an tseirbhís Uirlis Aisíocaíochta a fhorbairt le API asincrónach ar Kafka

In aon siopa, chomh maith le horduithe a n-íocann custaiméirí astu, tá amanna ann nuair a chaithfidh an siopa airgead a thabhairt ar ais toisc nach raibh an táirge oiriúnach don chustaiméir. Is próiseas réasúnta gearr é seo: soiléirímid an t-eolas, más gá, agus aistrímid an t-airgead.

Ach d’éirigh an t-aischur níos casta mar gheall ar athruithe sa reachtaíocht, agus bhí orainn micriseirbhís ar leith a chur i bhfeidhm dó.

Taithí ar an tseirbhís Uirlis Aisíocaíochta a fhorbairt le API asincrónach ar Kafka

Ár spreagadh:

  1. Dlí FZ-54 - i mbeagán focal, éilíonn an dlí tuairisc a thabhairt don oifig chánach faoi gach idirbheart airgeadaíochta, bíodh sé ina thuairisceán nó ina admháil, laistigh de CLS measartha gearr de chúpla nóiméad. Déanaimid, mar chuideachta ríomhthráchtála, go leor oibríochtaí. Go teicniúil, ciallaíonn sé seo freagracht nua (agus mar sin seirbhís nua) agus feabhsuithe ar gach córas bainteach.
  2. Scoilt BOB Is tionscadal inmheánach de chuid na cuideachta é BOB a mhaolú ó líon mór freagrachtaí neamh-lárnacha agus a chastacht iomlán a laghdú.

Taithí ar an tseirbhís Uirlis Aisíocaíochta a fhorbairt le API asincrónach ar Kafka

Taispeánann an léaráid seo na príomhchórais Lamoda. Anois tá an chuid is mó acu níos mó réaltbhuíon de 5-10 micreasheirbhísí timpeall monolith crapadh. Tá siad ag fás go mall, ach táimid ag iarraidh iad a dhéanamh níos lú, mar go bhfuil imscaradh an blúire roghnaithe sa lár scanrúil - ní féidir linn ligean dó titim. Tá iallach orainn gach malartú (saigheada) a chur in áirithe agus a chur san áireamh go bhféadfadh aon cheann acu a bheith ar fáil.

Tá go leor malartuithe ag BOB freisin: córais íocaíochta, córais seachadta, córais fógra, etc.

Go teicniúil is ea BOB:

  • ~150k línte cód + ~100k línte tástálacha;
  • php7.2 + Zend 1 & Comhpháirteanna Symfony 3;
  • >100 API & ~50 comhtháthú amach;
  • 4 thír a bhfuil loighic a ngnó féin acu.

Tá sé costasach agus pianmhar BOB a imscaradh, agus mar gheall ar an méid cód agus fadhbanna a réitíonn sé ní féidir le haon duine é a chur ina cheann. Go ginearálta, tá go leor cúiseanna ann chun é a shimpliú.

Próiseas Tuairisceáin

Ar dtús, tá dhá chóras páirteach sa phróiseas: BOB agus Íocaíocht. Anois tá dhá cheann eile le feiceáil:

  • Seirbhís Fioscachúcháin, a thabharfaidh aire d’fhadhbanna fioscúcháin agus cumarsáid le seirbhísí seachtracha.
  • Uirlis Aisíocaíochta, ina bhfuil go simplí malartuithe nua ionas nach inflate an BOB.

Anois tá an chuma ar an bpróiseas mar seo:

Taithí ar an tseirbhís Uirlis Aisíocaíochta a fhorbairt le API asincrónach ar Kafka

  1. Faigheann BOB iarratas ar aisíocaíocht.
  2. Labhraíonn BOB faoin Uirlis Aisíocaíochta seo.
  3. Insíonn an Uirlis Aisíocaíochta Íocaíocht: “Téigh an t-airgead ar ais.”
  4. Tugann an íocaíocht an t-airgead ar ais.
  5. Déanann Uirlis Aisíocaíochta agus BOB stádais a shioncronú lena chéile, mar go bhfuil gá acu le tamall anois. Nílimid réidh fós le haistriú go hiomlán chuig an Uirlis Aisíocaíochta, ós rud é go bhfuil UI ag BOB, tuarascálacha cuntasaíochta, agus go ginearálta go leor sonraí nach féidir a aistriú chomh héasca sin. Caithfidh tú suí ar dhá chathaoir.
  6. Téann an t-iarratas ar fhioscú ar shiúl.

Mar thoradh air sin, rinneamar cineál bus imeachta ar Kafka - event-bus, ar a thosaigh gach rud. Hurray, anois tá pointe amháin teip (sarcasm) againn.

Taithí ar an tseirbhís Uirlis Aisíocaíochta a fhorbairt le API asincrónach ar Kafka

Tá na buntáistí agus na míbhuntáistí soiléir go leor. Rinneamar bus, rud a chiallaíonn go bhfuil gach seirbhís ag brath air anois. Déanann sé seo an dearadh a shimpliú, ach cuireann sé pointe teip amháin isteach sa chóras. Beidh Kafka tuairteála, beidh an próiseas stop.

Cad is API á stiúradh ag imeachtaí

Tá freagra maith ar an gceist seo sa tuarascáil ó Martin Fowler (GOTO 2017) "Iomlán Brí na hAiltireachta de Bhun Imeachtaí".

Go hachomair cad a rinne muid:

  1. Déan gach malartú asincrónach a fhilleadh trí stórála imeachtaí. In ionad gach tomhaltóir leasmhara a chur ar an eolas faoi athrú stádais thar an líonra, scríobhaimid imeacht faoi athrú stádais chuig stóráil láraithe, agus léann tomhaltóirí a bhfuil suim acu san ábhar gach rud atá le feiceáil as sin.
  2. Is fógra é an teagmhas sa chás seo (fógraí) go bhfuil rud éigin athraithe áit éigin. Mar shampla, tá stádas an ordaithe athraithe. Is féidir le tomhaltóir a bhfuil suim aige i roinnt sonraí a ghabhann leis an athrú stádais nach bhfuil san áireamh san fhógra a stádas a fháil amach é féin.
  3. Is é an rogha uasta ná foinsiú imeachtaí lánchuimsitheach, aistriú stáit, sa chás go bhfuil an fhaisnéis go léir atá riachtanach chun próiseáil a dhéanamh: cén áit ar tháinig sé agus cén stádas a chuaigh sé, conas go díreach a d'athraigh na sonraí, etc. Is í an t-aon cheist ná féidearthacht agus méid na faisnéise ar féidir leat acmhainn a stóráil.

Mar chuid de sheoladh na hUirlis Aisíocaíochta, d'úsáideamar an tríú rogha. Rinne an phróiseáil imeachta simplithe seo toisc nach raibh aon ghá le faisnéis mhionsonraithe a bhaint amach, agus chuir sé deireadh leis an gcás ina gcruthódh gach imeacht nua pléasctha d'iarratais ar fháil soiléirithe ó thomhaltóirí.

Seirbhís Uirlis Aisíocaíochta gan luchtú, mar sin tá blas an phinn níos mó ag Kafka ná mar is gá. Ní dóigh liom dá dtiocfadh an tseirbhís aisíocaíochta chun bheith ina thionscadal ard-ualach, go mbeadh gnó sásta.

Malartú async MAR IS

Maidir le malartuithe asincrónacha, úsáideann an roinn PHP RabbitMQ de ghnáth. Bhailíomar na sonraí don iarratas, chuireamar i scuaine é, agus léigh tomhaltóir na seirbhíse céanna é agus sheol muid é (nó níor sheol sé). Maidir leis an API féin, úsáideann Lamoda Swagger go gníomhach. Dearaimid API, déanaimid cur síos air i Swagger, agus gineann muid cód cliant agus freastalaí. Bainimid úsáid freisin as JSON RPC 2.0 beagán feabhsaithe.

In áiteanna áirithe a úsáidtear busanna BSL, tá cuid acu beo ar activeMQ, ach, go ginearálta, RabbitMQ - caighdeánach.

Malartú async LE BE

Agus malartú á dhearadh trí bhus imeachtaí, is féidir analaí a rianú. Déanaimid cur síos ar an gcaoi chéanna ar mhalartú sonraí amach anseo trí chur síos ar struchtúr imeachtaí. An fhormáid yaml, bhí orainn an cód a ghiniúint féin, cruthaíonn an gineadóir OIBÁCanna de réir na sonraíochta agus múineann sé do chliaint agus freastalaithe oibriú leo. Téann giniúint ina dhá theanga - golang agus php. Cuidíonn sé seo le leabharlanna a choinneáil comhsheasmhach. Tá an gineadóir scríofa i golang, agus sin an fáth a fuair sé an t-ainm gogi.

Is rud tipiciúil é foinsiú imeachtaí ar Kafka. Tá réiteach ann ón leagan príomhfhiontair de Kafka Confluent, tá nakadi, réiteach ónár ndeartháireacha fearainn Zalando. Ár spreagadh chun tús a chur le vanilla Kafka - ciallaíonn sé seo an réiteach a fhágáil saor in aisce go dtí go gcinnfimid ar deireadh an úsáidfimid é i ngach áit, agus go bhfágfaimid spás dúinn féin le haghaidh ainliú agus feabhsuithe: ba mhaith linn tacaíocht a thabhairt dár JSON RPC 2.0, gineadóirí do dhá theanga agus a ligean ar a fheiceáil cad eile.

Tá sé íorónta, fiú amháin i gcás chomh sásta, nuair a bhíonn gnó beagnach cosúil leis, Zalando, a rinne réiteach a bheag nó a mhór mar a chéile, nach féidir linn é a úsáid go héifeachtach.

Is é seo a leanas an patrún ailtireachta ag an seoladh: léimid go díreach ó Kafka, ach ní scríobhaimid ach trí imeachtaí-bus. Tá go leor réidh le léamh i Kafka: bróicéirí, cothromóirí, agus tá sé níos mó nó níos lú réidh le haghaidh scálaithe cothrománach, bhí mé ag iarraidh é seo a choinneáil. Theastaigh uainn an taifeadadh a chríochnú trí Gateway amháin nó Events-bus, agus seo an fáth.

Imeachtaí-bus

Nó bus ócáid. Níl anseo ach geata http gan stát, a ghlacann roinnt ról tábhachtach:

  • Bailíochtú a Tháirgeadh — seiceáilimid go gcomhlíonann na himeachtaí ár sonraíochtaí.
  • Córas máistir imeachtaí, is é sin, is é seo an príomhchóras agus an t-aon chóras sa chuideachta a fhreagraíonn an cheist maidir leis na himeachtaí a bhfuil struchtúir a mheastar a bheith bailí. Níl i gceist le bailíochtú ach cineálacha sonraí agus uimhreacha chun ábhar a shonrú go docht.
  • Feidhm hash le haghaidh bearrtha - is luach eochrach é struchtúr teachtaireachta Kafka agus trí úsáid a bhaint as hash na heochrach ríomhtar cá háit ar cheart é a chur.

Cén fáth

Oibrímid i gcuideachta mhór le próiseas sruthlínithe. Cén fáth rud ar bith a athrú? Is turgnamh é seo, agus táimid ag súil le roinnt buntáistí a bhaint as.

Malartú 1:n+1 (duine go leor)

Déanann Kafka sé an-éasca tomhaltóirí nua a nascadh leis an API.

Ligean le rá go bhfuil eolaire agat a chaithfidh tú a choinneáil cothrom le dáta i roinnt córas ag an am céanna (agus i roinnt córais nua). Roimhe seo, cheapamar beart a chuir set-API i bhfeidhm, agus cuireadh an máistirchóras ar an eolas faoi sheoltaí tomhaltóirí. Anois seolann an máistirchóras nuashonruithe ar an ábhar, agus léann gach duine a bhfuil suim acu é. Tá córas nua le feiceáil - shínigh muid suas é don ábhar. Sea, freisin bundle, ach níos simplí.

I gcás uirlis aisíocaíochta, atá ina phíosa BOB, tá sé áisiúil dúinn iad a choinneáil sioncrónaithe trí Kafka. Deir an íocaíocht gur tugadh an t-airgead ar ais: fuair BOB, RT amach faoi seo, d'athraigh siad a stádas, fuair an tSeirbhís Fioscúcháin amach faoi seo agus d'eisigh siad seic.

Taithí ar an tseirbhís Uirlis Aisíocaíochta a fhorbairt le API asincrónach ar Kafka

Tá pleananna againn Seirbhís Fógraí aontaithe a chruthú a thabharfadh scéala don chliant maidir lena ordú/tuairisceáin. Anois tá an fhreagracht seo scaipthe idir córais. Is leor dúinn an tSeirbhís Fógraí a mhúineadh chun faisnéis ábhartha a ghabháil ó Kafka agus freagra a thabhairt uirthi (agus na fógraí seo a dhíchumasú i gcórais eile). Ní bheidh gá le malartuithe díreacha nua.

Sonraí-tiomáinte

Éiríonn an fhaisnéis idir córais trédhearcach – is cuma cén “fiontar fuilteach” atá agat agus is cuma cé chomh tiubh agus atá do riaráiste. Tá roinn Anailíse Sonraí ag Lamoda a bhailíonn sonraí ó chórais agus a chuireann i bhfoirm ath-inúsáidte iad, le haghaidh gnó agus le haghaidh córais chliste araon. Ligeann Kafka duit go leor sonraí a thabhairt dóibh go tapa agus an sreabhadh faisnéise sin a choinneáil cothrom le dáta.

Loga macasamhlú

Ní imíonn teachtaireachtaí tar éis a bheith léite, mar atá i RabbitMQ. Nuair a bhíonn go leor faisnéise in imeacht le próiseáil, tá stair athruithe le déanaí againn ar an oibiacht, agus, más mian linn, tá an cumas againn na hathruithe seo a chur i bhfeidhm.

Braitheann tréimhse stórála an loga macasamhlaithe ar dhéine na scríbhneoireachta don ábhar seo; ligeann Kafka duit teorainneacha ama stórála agus toirt sonraí a shocrú go solúbtha. Maidir le dian-ábhair, tá sé tábhachtach go mbeadh am ag gach tomhaltóir an fhaisnéis a léamh sula n-imíonn sí, fiú i gcás neamh-inoibritheachta gearrthéarmacha. De ghnáth is féidir sonraí a stóráil le haghaidh aonaid laethanta, atá sách go leor le haghaidh tacaíochta.

Taithí ar an tseirbhís Uirlis Aisíocaíochta a fhorbairt le API asincrónach ar Kafka

Ansin, athinsint beag ar an doiciméadú, dóibh siúd nach bhfuil eolach ar Kafka (tá an pictiúr ón doiciméadú freisin)

Tá scuainí ag AMQP: scríobhaimid teachtaireachtaí chuig scuaine don tomhaltóir. De ghnáth, déantar scuaine amháin a phróiseáil ag córas amháin a bhfuil an loighic ghnó chéanna aige. Más gá duit fógra a thabhairt do roinnt córas, is féidir leat an feidhmchlár a mhúineadh chun scríobh chuig roinnt scuainí nó malartú a chumrú leis an meicníocht fanout, a chlóin iad féin.

Tá astarraingt den chineál céanna ag Kafka ábhar, ina scríobhann tú teachtaireachtaí, ach ní imíonn siad tar éis a léamh. De réir réamhshocraithe, nuair a nascann tú le Kafka, faigheann tú gach teachtaireacht agus tá an rogha agat an áit a d'fhág tú a shábháil. Is é sin, má léann tú go seicheamhach, ní fhéadfaidh tú an teachtaireacht a mharcáil mar léite, ach an t-aitheantas a shábháil ónar féidir leat leanúint ar aghaidh ag léamh. Tugtar fritháireamh ar an Aitheantas ar shocraigh tú air, agus déantar an mheicníocht a fhritháireamh.

Dá réir sin, is féidir loighic éagsúla a chur i bhfeidhm. Mar shampla, tá BOB againn i 4 chás do thíortha éagsúla - tá Lamoda sa Rúis, sa Chasacstáin, san Úcráin, sa Bhealarúis. Ós rud é go ndéantar iad a imscaradh ar leithligh, tá cumraíochtaí beagán difriúil acu agus a loighic gnó féin. Cuirimid in iúl sa teachtaireacht cén tír dá dtagraíonn sé. Léann gach tomhaltóir BOB i ngach tír le groupId difriúil, agus mura mbaineann an teachtaireacht leo, scipeann siad í, i.e. láithreach cion +1. Má léitear an t-ábhar céanna ag ár Seirbhís Íocaíochta, déanann sé amhlaidh le grúpa ar leith, agus mar sin ní thrasnaíonn fritháirimh.

Riachtanais imeachta:

  • Comhláine sonraí. Ba mhaith liom go mbeadh go leor sonraí ag an imeacht ionas gur féidir é a phróiseáil.

  • Ionracas Tarmligimid chuig Events-bus an fíorú go bhfuil an t-imeacht comhsheasmhach agus gur féidir leis é a phróiseáil.
  • Tá an t-ordú tábhachtach. I gcás filleadh, tá iallach orainn oibriú leis an stair. Maidir le fógraí, níl an t-ordú tábhachtach, más fógraí aonchineálacha iad, beidh an ríomhphost mar an gcéanna is cuma cén ordú a tháinig ar dtús. I gcás aisíocaíocht, tá próiseas soiléir ann; má athraíonn muid an t-ordú, beidh eisceachtaí ann, ní chruthófar nó ní phróiseálfar an aisíocaíocht - beidh stádas difriúil againn sa deireadh.
  • Comhsheasmhacht. Tá stór againn, agus anois cruthaímid imeachtaí in ionad API. Teastaíonn bealach uainn chun faisnéis faoi imeachtaí nua agus athruithe ar imeachtaí atá ann cheana a tharchur chuig ár seirbhísí go tapa agus go saor. Baintear é seo amach trí shonraíocht choiteann i stór git ar leith agus gineadóirí cóid. Mar sin, déantar cliaint agus freastalaithe i seirbhísí éagsúla a chomhordú.

Kafka i Lamoda

Tá trí shuiteáil Kafka againn:

  1. Logchomhaid;
  2. T&F;
  3. Imeachtaí-bus.

Sa lá atá inniu nílimid ag caint ach faoin bpointe deireanach. Ag imeachtaí-bus, níl suiteálacha an-mhór againn - 3 bróicéir (freastalaithe) agus gan ach 27 ábhar. De ghnáth, is próiseas amháin é topaic amháin. Ach is pointe subtle é seo, agus déanfaimid teagmháil leis anois.

Taithí ar an tseirbhís Uirlis Aisíocaíochta a fhorbairt le API asincrónach ar Kafka

Tá an graf rps thuas. Tá an próiseas aisíocaíochtaí marcáilte le líne turquoise (tá, an ceann ar an ais X), agus is é an líne bándearg an próiseas nuashonraithe ábhar.

Tá na milliúin táirgí i gcatalóg Lamoda, agus déantar na sonraí a nuashonrú an t-am ar fad. Téann roinnt bailiúcháin as faisean, scaoiltear cinn nua chun iad a athsholáthar, agus tá samhlacha nua le feiceáil i gcónaí sa chatalóg. Déanaimid iarracht a thuar cad a bheidh suimiúil dár gcustaiméirí amárach, mar sin de shíor ag ceannach rudaí nua, iad a ghrianghrafadh agus an cás a nuashonrú.

Is nuashonruithe táirgí iad beanna bándearg, is é sin, athruithe ar tháirgí. Is féidir a fheiceáil gur ghlac na guys pictiúir, ghlac siad pictiúir, agus ansin arís! — lódáilte paca imeachtaí.

Úsáideann Lamoda Events cásanna

Bainimid úsáid as an ailtireacht thógtha le haghaidh na n-oibríochtaí seo a leanas:

  • Rianú stádais ar ais: glao-go-gníomh agus rianú stádais ó gach córas bainteach. Íocaíocht, stádais, fioscúchán, fógraí. Anseo rinneamar tástáil ar an gcur chuige, rinneamar uirlisí, bhailigh muid na fabhtanna go léir, scríobhamar doiciméadú agus d'inis muid dár gcomhghleacaithe conas é a úsáid.
  • Cártaí táirge á nuashonrú: cumraíocht, meiteashonraí, tréithe. Léann córas amháin (a thaispeánann), agus scríobhann roinnt eile.
  • Ríomhphost, brúigh agus sms: tá an t-ordú bailithe, tá an t-ordú tagtha, tá an tuairisceán glactha, etc., tá go leor acu.
  • Stoc, athnuachan stórais — nuashonrú cainníochtúil míreanna, díreach uimhreacha: teacht chuig an stóras, filleadh. Is gá go n-oibreoidh gach córas a bhaineann le hearraí a chur in áirithe leis na sonraí is reatha. Faoi láthair, tá an córas nuashonraithe stoic sách casta; déanfaidh Kafka é a shimpliú.
  • Sonraí Anailís (Roinn T&F), uirlisí ML, anailísíocht, staitisticí. Ba mhaith linn go mbeadh an fhaisnéis trédhearcach - tá Kafka an-oiriúnach dó seo.

Anois tá an chuid is suimiúla faoi na bumps móra agus fionnachtana suimiúla a tharla le sé mhí anuas.

Fadhbanna dearadh

Ligean le rá gur mhaith linn rud nua a dhéanamh - mar shampla, an próiseas seachadta iomlán a aistriú go Kafka. Anois tá cuid den phróiseas curtha i bhfeidhm i bPróiseáil Ordaithe i BOB. Tá múnla stádais taobh thiar d'aistriú ordú chuig an tseirbhís seachadta, gluaiseacht chuig stóras idirmheánach, agus mar sin de. Tá monolith iomlán, fiú dhá, chomh maith le bunch de APIs tiomanta do sheachadadh. Tá a fhios acu i bhfad níos mó faoi sheachadadh.

Is cosúil gur réimsí comhchosúla iad seo, ach tá stádas difriúil ag an bPróiseáil Ordaithe i BOB agus sa Chóras Loingseoireachta. Mar shampla, ní sheolann roinnt seirbhísí cúiréireachta stádas idirmheánach, ach na cinn deiridh amháin: “seachadta” nó “caillte”. Tuairiscíonn daoine eile, ar a mhalairt, go mion faoi ghluaiseacht earraí. Tá a rialacha bailíochtaithe féin ag gach duine: i gcás cuid acu, tá an ríomhphost bailí, rud a chiallaíonn go bpróiseálfar é; do dhaoine eile nach bhfuil sé bailí, ach beidh an t-ordú a phróiseáil fós toisc go bhfuil uimhir theileafóin le haghaidh teagmhála, agus beidh duine a rá nach mbeidh ordú den sórt sin a phróiseáil ar chor ar bith.

Sruth sonraí

I gcás Kafka, eascraíonn an cheist maidir le sreabhadh sonraí a eagrú. Is éard atá i gceist leis an tasc seo ná straitéis a roghnú bunaithe ar roinnt pointí; déanaimis dul trí iad go léir.

In topaic amháin nó i gceann éagsúla?

Tá sonraíocht imeachta againn. I BOB scríobhann muid gur gá ordú den sórt sin agus den sórt sin a sheachadadh, agus cuirimid in iúl: an uimhir ordaithe, a chomhdhéanamh, roinnt SKUanna agus cóid barra, etc. Nuair a shroicheann na hearraí an stóras, beidh an seachadadh in ann stádas, stampaí ama agus gach rud atá ag teastáil a fháil. Ach ansin ba mhaith linn nuashonruithe ar na sonraí seo a fháil in BOB. Tá próiseas droim ar ais againn maidir le sonraí a fháil ó sheachadadh. An é seo an ócáid ​​chéanna? Nó an malartú ar leith é seo a bhfuil a ábhar féin tuillte aige?

Is dócha, beidh siad an-chosúil, agus níl aon bhunús leis an temptation a dhéanamh ar ábhar amháin, toisc go gciallaíonn ábhar ar leith tomhaltóirí ar leith, cumraíochtaí ar leith, glúin ar leith de seo go léir. Ach ní fíric.

Réimse nua nó imeacht nua?

Ach má úsáideann tú na himeachtaí céanna, tagann fadhb eile chun cinn. Mar shampla, ní féidir le gach córas seachadta an cineál DTO is féidir le BOB a ghiniúint. Seolaimid an t-aitheantas chucu, ach ní shábhálann siad é toisc nach bhfuil sé de dhíth orthu, agus ó thaobh tús a chur leis an bpróiseas bus ócáid, tá an réimse seo ag teastáil.

Má thugaimid isteach riail le haghaidh bus-imeachtaí go bhfuil gá leis an réimse seo, ansin tá iallach orainn rialacha bailíochtaithe breise a shocrú sa BOB nó sa láimhseálaí tosaigh imeachta. Tosaíonn bailíochtú a scaipeadh ar fud na seirbhíse - níl sé seo an-áisiúil.

Fadhb eile is ea an temptation chun forbairt incriminteach. Deirtear linn gur gá rud éigin a chur leis an imeacht, agus b’fhéidir, má smaoinímid air, gur cheart gur imeacht ar leith a bhí ann. Ach inár scéim, is ábhar ar leith é imeacht ar leith. Ábhar ar leith is ea an próiseas iomlán a ndearna mé cur síos air thuas. Tá cathú ar an bhforbróir gan ach réimse eile a chur le scéimre JSON agus é a athghiniúint.

I gcás aisíocaíochtaí, tháinig muid ar an imeacht imeachtaí i leath bhliain. Bhí meite-imeacht amháin againn ar a dtugtar nuashonrú aisíocaíochta, ina raibh réimse cineáil ag cur síos ar cad a bhí sa nuashonrú seo i ndáiríre. Mar gheall air seo, bhí lasca “iontach” againn le bailíochtaithe a d’inis dúinn conas an t-imeacht seo a bhailíochtú leis an gcineál seo.

Leagan imeachta

Is féidir leat úsáid a bhaint as chun teachtaireachtaí i Kafka a bhailíochtú Avro, ach bhí sé riachtanach a leagan láithreach air agus Confluent a úsáid. Inár gcás, ní mór dúinn a bheith cúramach leis an leagan. Ní bheidh sé indéanta i gcónaí teachtaireachtaí ón loga macasamhlaithe a athléamh toisc go bhfuil an tsamhail “fágtha”. Go bunúsach, casadh sé amach leaganacha a thógáil ionas go mbeidh an tsamhail ag luí siar: mar shampla, déan réimse roghnach go sealadach. Má tá na difríochtaí ró-láidir, tosaímid ag scríobh i dtopaic nua, agus aistrímid cliaint nuair a chríochnaíonn siad an sean-cheann a léamh.

Ord léamh ráthaithe na ndeighiltí

Roinntear topaicí taobh istigh de Kafka ina landairí. Níl sé seo thar a bheith tábhachtach agus muid ag dearadh aonáin agus malartuithe, ach tá sé tábhachtach agus cinneadh á dhéanamh againn conas é a ithe agus a scála.

Sa chás is gnách, scríobhann tú ábhar amháin i Kafka. De réir réamhshocraithe, úsáidtear deighilt amháin, agus téann gach teachtaireacht san ábhar seo chuige. Agus mar sin léann an tomhaltóir na teachtaireachtaí seo go seicheamhach. Ligean le rá anois caithfimid an córas a leathnú ionas go léifidh dhá thomhaltóir éagsúla teachtaireachtaí. Más rud é, mar shampla, go bhfuil SMS á sheoladh agat, ansin is féidir leat a rá le Kafka deighilt bhreise a dhéanamh, agus tosóidh Kafka na teachtaireachtaí a roinnt ina dhá chuid - leath anseo, leath anseo.

Conas a roinneann Kafka iad? Tá corp (ina stórálaimid JSON) agus eochair ag gach teachtaireacht. Is féidir leat feidhm hash a cheangal leis an eochair seo, a chinnfidh cén deighilt a rachaidh an teachtaireacht isteach.

In ár gcás le haisíocaíochtaí, tá sé seo tábhachtach, má thógaimid dhá dheighilt, ansin tá seans ann go ndéanfaidh tomhaltóir comhthreomhar an dara imeacht a phróiseáil roimh an gcéad cheann agus beidh trioblóid ann. Cinntíonn an fheidhm hash go gcríochnaíonn teachtaireachtaí leis an eochair chéanna suas sa deighilt chéanna.

Imeachtaí vs orduithe

Seo fadhb eile a bhí againn. Is imeacht áirithe é imeacht: deirimid gur tharla rud éigin áit éigin (something_happened), mar shampla, cuireadh mír ar ceal nó tharla aisíocaíocht. Má éisteann duine leis na himeachtaí seo, ansin de réir “mír curtha ar ceal,” cruthófar an t-aonán aisíocaíochta, agus scríobhfar “aisíocaíocht a tharla” áit éigin sna socruithe.

Ach de ghnáth, nuair a dhearann ​​tú imeachtaí, ní bhíonn fonn ort iad a scríobh go neamhbhalbh - braitheann tú go léifidh duine éigin iad. Tá an-dea-thrua ann scríobh gan rud_happened (item_canceled, refund_refunded), ach rud_should_be_done. Mar shampla, tá an mhír réidh le cur ar ais.

Ar thaobh amháin, molann sé conas a úsáidfear an ócáid. Ar an láimh eile, fuaimeanna sé i bhfad níos lú cosúil le gnáthainm imeacht. Thairis sin, níl sé i bhfad ó anseo go dtí an ordú do_something. Ach níl aon ráthaíocht agat go léifidh duine an t-imeacht seo; agus má léann tú é, ansin léann tú go rathúil é; agus má léigh tú é go rathúil, ansin rinne tú rud éigin, agus go raibh rud éigin rathúil. A luaithe a éiríonn imeacht do_rud éigin, bíonn gá le haiseolas, agus sin fadhb.

Taithí ar an tseirbhís Uirlis Aisíocaíochta a fhorbairt le API asincrónach ar Kafka

I malartú asincrónach i RabbitMQ, nuair a léann tú an teachtaireacht, téigh go dtí http, tá freagra agat - ar a laghad go bhfuarthas an teachtaireacht. Nuair a scríobhann tú chuig Kafka, tá teachtaireacht ann a scríobh tú chuig Kafka, ach níl a fhios agat conas a próiseáladh í.

Dá bhrí sin, inár gcás, bhí orainn imeacht freagartha a thabhairt isteach agus monatóireacht a chur ar bun sa chaoi is dá gcuirfí an oiread sin imeachtaí ar aghaidh, ba cheart go sroichfeadh an líon céanna imeachtaí freagartha tar éis a leithéid agus ama. Mura dtarlaíonn sé seo, ansin is cosúil go bhfuil rud éigin mícheart. Mar shampla, má sheolamar an t-imeacht “item_ready_to_refund”, táimid ag súil go gcruthófar aisíocaíocht, cuirfear an t-airgead ar ais chuig an gcliant, agus seolfar an t-imeacht “money_refunded” chugainn. Ach níl sé seo cinnte, mar sin tá gá le monatóireacht.

Nuances

Tá fadhb sách soiléir ann: má léann tú ó thopaic go seicheamhach, agus má tá droch-theachtaireacht agat, titfidh an tomhaltóir, agus ní rachaidh tú níos faide. Ag teastáil uait stop a chur le gach tomhaltóir, cion a fhritháireamh tuilleadh chun leanúint ar aghaidh ag léamh.

Bhí a fhios againn faoi, chomhaireamh muid ar sé, agus fós a tharla sé. Agus tharla sé seo toisc go raibh an t-imeacht bailí ó thaobh imeachtaí-bus, bhí an t-imeacht bailí ó thaobh an bhailitheoir iarratais, ach ní raibh sé bailí ó thaobh PostgreSQL, mar gheall ar ár gcóras amháin. MySQL le UNSIGNED INT, agus sa chóras nua-scríofa bhí PostgreSQL díreach le INT. Tá a mhéid beagán níos lú, agus ní raibh an Id oiriúnach. Fuair ​​Symfony bás le heisceacht. Bhí an eisceacht againn, ar ndóigh, toisc go rabhamar ag brath air, agus bhíomar chun an fritháireamh seo a dhéanamh, ach roimhe sin bhíomar ag iarraidh fritháireamh na faidhbe a mhéadú, ó tharla nár éirigh leis an teachtaireacht a phróiseáil. Tá na cuntair sa tionscadal seo sa bhunachar sonraí freisin, agus tá cumarsáid dúnta ag Symfony leis an mbunachar sonraí cheana féin, agus maraíodh an dara heisceacht leis an bpróiseas iomlán gan seans a dhéanamh fritháireamh.

Leagann an tseirbhís síos ar feadh tamaill - go fortunately, le Kafka níl sé seo chomh dona, toisc go bhfuil na teachtaireachtaí fós ann. Nuair a dhéantar an obair a athchóiriú, is féidir leat iad a léamh. Tá sé compordach.

Tá an cumas ag Kafka fritháireamh treallach a shocrú trí uirlisiú. Ach chun seo a dhéanamh, ní mór duit stop a chur leis na tomhaltóirí go léir - inár gcás, ullmhaigh scaoileadh ar leith ina mbeidh aon tomhaltóirí, ath-imscaradh. Ansin i Kafka is féidir leat an fhritháireamh a aistriú trí uirlisí, agus rachaidh an teachtaireacht tríd.

Nuance eile - logáil macasamhlú vs rdkafka.so - a bhaineann le sonraí ár dtionscadal. Bainimid úsáid as PHP, agus i PHP, mar riail, déanann gach leabharlann cumarsáid le Kafka tríd an stór rdkafka.so, agus ansin tá fillteán de chineál éigin ann. B’fhéidir gurb iad seo ár ndeacrachtaí pearsanta, ach d’éirigh sé amach nach bhfuil sé chomh héasca sin píosa den mhéid a bhí léite againn cheana féin a athléamh. Go ginearálta, bhí fadhbanna bogearraí.

Ag filleadh ar na sonraí a bhaineann le bheith ag obair le landairí, tá sé scríofa ceart sa doiciméadú tomhaltóirí >= landairí topaicí. Ach fuair mé amach faoi seo i bhfad níos déanaí ná mar a ba mhaith liom. Más mian leat scála agus dhá thomhaltóir a bheith agat, beidh dhá dheighilt ar a laghad ag teastáil uait. Is é sin, má bhí críochdheighilt amháin agat ina raibh 20 míle teachtaireacht carntha, agus má rinne tú ceann úr, ní dhéanfar líon na dteachtaireachtaí a chomhionannú go luath. Dá bhrí sin, d'fhonn dhá thomhaltóirí comhthreomhara a bheith agat, ní mór duit déileáil le deighiltí.

Monatóireacht

Sílim go mbeidh an bealach ina ndéanaimid monatóireacht air níos soiléire fós cad iad na fadhbanna atá sa chur chuige atá ann faoi láthair.

Mar shampla, ríomhaimid cé mhéad táirgí sa bhunachar sonraí a d'athraigh a stádas le déanaí, agus, dá réir sin, ba cheart go dtarlódh imeachtaí bunaithe ar na hathruithe seo, agus cuirimid an uimhir seo chuig ár gcóras monatóireachta. Ansin ó Kafka faigheann muid an dara uimhir, cé mhéad imeachtaí a taifeadadh i ndáiríre. Ar ndóigh, ba cheart go mbeadh an difríocht idir an dá uimhir seo náid i gcónaí.

Taithí ar an tseirbhís Uirlis Aisíocaíochta a fhorbairt le API asincrónach ar Kafka

Ina theannta sin, ní mór duit monatóireacht a dhéanamh ar conas atá ag éirí leis an léiritheoir, cibé an bhfuair imeachtaí-bus teachtaireachtaí, agus conas atá ag éirí leis an tomhaltóir. Mar shampla, sna cairteacha thíos, tá ag éirí go maith leis an Uirlis Aisíocaíochta, ach is léir go bhfuil roinnt fadhbanna ag BOB (beanna gorm).

Taithí ar an tseirbhís Uirlis Aisíocaíochta a fhorbairt le API asincrónach ar Kafka

Luaigh mé aga moille i ngrúpaí tomhaltóirí cheana féin. Go garbh, is é seo líon na dteachtaireachtaí neamhléite. Go ginearálta, oibríonn ár dtomhaltóirí go tapa, mar sin is gnách go mbíonn an t-aga moille 0, ach uaireanta is féidir buaic ghearrthéarmach a bheith ann. Is féidir le Kafka é seo a dhéanamh as an mbosca, ach ní mór duit eatramh áirithe a shocrú.

Tá tionscadal ann Burrowa thabharfaidh tuilleadh eolais duit ar Kafka. Úsáideann sé an API grúpa tomhaltóra chun an stádas atá ag éirí leis an ngrúpa seo a thabhairt. Chomh maith le OK and Theip, tá rabhadh ann, agus is féidir leat a fháil amach nach féidir le do thomhaltóirí dul i ngleic le luas an táirgthe - ní bhíonn am acu an méid atá scríofa a léamh profaí. Tá an córas sách cliste agus éasca le húsáid.

Taithí ar an tseirbhís Uirlis Aisíocaíochta a fhorbairt le API asincrónach ar Kafka

Seo an chuma atá ar an bhfreagra API. Seo é an grúpa bob-live-fifa, refund.update.v1 críochdheighilte, stádas OK, Readonly 0 - an fhritháireamh deiridh deiridh den sórt sin agus den sórt sin.

Taithí ar an tseirbhís Uirlis Aisíocaíochta a fhorbairt le API asincrónach ar Kafka

Monatóireacht updated_ag SLA (fuaite) luaigh mé cheana. Mar shampla, d'athraigh an táirge go dtí an stádas go bhfuil sé réidh le tabhairt ar ais. Suiteáil muid Cron, a deir más rud é nach bhfuil an réad seo imithe chun aisíoc laistigh de 5 nóiméad (tugann muid airgead ar ais trí chórais íocaíochta go han-tapa), ansin is cinnte go ndeachaigh rud éigin mícheart, agus is cinnte gur cás tacaíochta é seo. Dá bhrí sin, ní dhéanaimid ach Cron a ghlacadh, a léann rudaí den sórt sin, agus má tá siad níos mó ná 0, ansin cuireann sé foláireamh.

Mar achoimre, úsáid a bhaint as imeachtaí atá áisiúil nuair:

  • teastaíonn faisnéis ó roinnt córas;
  • níl an toradh próiseála tábhachtach;
  • is beag imeachtaí nó imeachtaí beaga.

Is cosúil go bhfuil ábhar an-sonrach ag an alt - API asincrónach ar Kafka, ach i dtaca leis ba mhaith liom a lán rudaí a mholadh ag an am céanna.
Gcéad dul síos, seo chugainn HighLoad ++ ní mór dúinn fanacht go dtí mí na Samhna; i mí Aibreáin beidh leagan St Petersburg, agus i mí an Mheithimh beidh muid ag caint faoi ualaí ard i Novosibirsk.
Ar an dara dul síos, tá údar na tuarascála, Sergei Zaika, ina bhall de Choiste Clár ár gcomhdháil nua ar bhainistiú eolais KnowledgeConf. Tá an chomhdháil lá amháin, a bheidh ar siúl ar 26 Aibreán, ach tá a clár an-dian.
Agus beidh sé i mí na Bealtaine PHP Rúis и RIT++ (agus DevOpsConf san áireamh) - is féidir leat do ábhar a mholadh ansin, labhairt faoi do thaithí agus gearán a dhéanamh faoi do chuid cóin líonta.

Foinse: will.com

Add a comment