Ziva mukugadzira iyo Refund Tool sevhisi ine asynchronous API paKafka

Chii chingamanikidza kambani hombe yakadai seLamoda, ine maitiro akagadziridzwa uye akawanda emasevhisi akabatana, kuchinja zvakanyanya maitiro ayo? Kukurudzira kunogona kuve kwakasiyana zvachose: kubva kumutemo kuenda kune chishuwo chekuyedza chinowanikwa mune ese mapurogiramu.

Asi izvi hazvireve kuti haugone kuvimba nekuwedzera mabhenefiti. Sergey Zaika achakuudza izvo chaizvo zvaunogona kuhwina kana iwe ukaita iyo inofambiswa nezviitiko API paKafka (vashoma) Pachave zvakare nekutaura nezve mapfuti makuru uye zvinonakidza zvakawanikwa - kuyedza hakugone kuita pasina ivo.

Ziva mukugadzira iyo Refund Tool sevhisi ine asynchronous API paKafka

Disiki: Chinyorwa ichi chakavakirwa pazvinhu kubva kumusangano wakaitwa naSergey muna Mbudzi 2018 paHighLoad++. Chiitiko chaLamoda chekushanda neKafka chakakwezva vateereri kwete zvishoma pane mamwe mishumo pachirongwa. Isu tinofunga uyu muenzaniso wakanaka kwazvo wekuti iwe unogona uye unofanirwa kugara uchiwana vanhu vane pfungwa dzakafanana, uye varongi veHighLoad ++ vacharamba vachiedza kugadzira mamiriro ekunze anoenderana neizvi.

Nezve maitiro

Lamoda ipuratifomu hombe ye-e-commerce ine nzvimbo yayo yekuonana, sevhisi yekutumira (uye akawanda anobatana), studio yemifananidzo, hombe yekuchengetera zvinhu, uye zvese izvi zvinomhanya pane yayo yega software. Kune akawanda enzira dzekubhadhara, b2b vadyidzani vanogona kushandisa mamwe kana ese aya masevhisi uye vanoda kuziva ruzivo rwechizvino-zvino nezvezvigadzirwa zvavo. Mukuwedzera, Lamoda inoshanda munyika nhatu kunze kweRussian Federation uye zvinhu zvose zvakasiyana zvishoma ikoko. Pakazara, pane dzimwe nzira dzinopfuura zana dzekugadzirisa hurongwa hutsva, hunofanira kugadziriswa nenzira yayo. Zvose izvi zvinoshanda nerubatsiro rwemasevhisi akawanda ayo dzimwe nguva anotaurirana nenzira dzisiri pachena. Kune zvakare yepakati system ine basa guru nderekurongeka mamiriro. Tinomuti BOB, ndinoshanda naye.

Refund Turusi ine zviitiko-inofambiswa API

Izwi rekuti zviitiko-rinotyairwa rakanyanya hackneyed; zvishoma mberi isu tichatsanangura zvakadzama zvinorehwa neizvi. Ini ndichatanga nemamiriro atakafunga kuyedza iyo inofambiswa nezviitiko API maitiro muKafka.

Ziva mukugadzira iyo Refund Tool sevhisi ine asynchronous API paKafka

Mune chero chitoro, kunze kwemirairo iyo vatengi vanobhadhara, pane nguva apo chitoro chinodiwa kudzorera mari nekuti chigadzirwa hachina kuenderana nemutengi. Iyi ipfupi maitiro: isu tinojekesa ruzivo, kana zvichidikanwa, uye toendesa mari.

Asi kudzoka kwakawedzera kunetsa nekuda kwekuchinja kwemutemo, uye taifanira kuita yakaparadzana microservice yayo.

Ziva mukugadzira iyo Refund Tool sevhisi ine asynchronous API paKafka

Kukurudzira kwedu:

  1. Mutemo FZ-54 - muchidimbu, mutemo unoda kutaurira kuhofisi yemutero nezvese kutengeserana kwemari, ingave kudzoka kana risiti, mukati meSLA ipfupi yemaminetsi mashoma. Isu, sekambani ye-e-commerce, tinoita mabasa mazhinji. Nehunyanzvi, izvi zvinoreva mutoro mutsva (uye nekudaro sevhisi nyowani) uye kuvandudzwa mune ese anobatanidzwa masisitimu.
  2. BOB kupatsanurwa ipurojekiti yemukati yekambani yekusunungura BOB kubva kunhamba yakawanda yezvisiri-zvakakosha mabasa uye kuderedza kuoma kwayo kwese.

Ziva mukugadzira iyo Refund Tool sevhisi ine asynchronous API paKafka

Iyi dhizaini inoratidza iyo huru Lamoda masisitimu. Iye zvino vazhinji vavo vawanda boka renyeredzi re5-10 microservices rakatenderedza iri kupera monolith. Vari kukura zvishoma nezvishoma, asi isu tiri kuedza kuvaita madiki, nekuti kuendesa chidimbu chakasarudzwa pakati chinotyisa - isu hatigone kubvumira kudonha. Isu tinomanikidzwa kuchengetedza zvese zvekutsinhana (miseve) uye tifunge nezve chokwadi chekuti chero chazvo chingave chisipo.

BOB zvakare ine zvakawanda zvekutsinhana: masisitimu ekubhadhara, masisitimu ekutumira, masisitimu ekuzivisa, nezvimwe.

Nehunyanzvi BOB ndeiyi:

  • ~150k mitsetse yekodhi + ~100k mitsara yebvunzo;
  • php7.2 + Zend 1 & Symfony Zvikamu 3;
  • > 100 APIs & ~ 50 kunze kwekubatanidzwa;
  • 4 nyika dzine bhizinesi ravo logic.

Kuendesa BOB kunodhura uye kunorwadza, huwandu hwekodhi uye matambudziko anogadzirisa ndeokuti hapana anogona kuisa zvese mumusoro wavo. Kazhinji, pane zvikonzero zvakawanda zvokuita kuti zvive nyore.

Return Process

Pakutanga, masisitimu maviri anobatanidzwa mukuita: BOB uye Kubhadhara. Iye zvino mamwe maviri anoonekwa:

  • Fiscalization Service, iyo ichatarisira matambudziko nefiscalization uye kutaurirana nemasevhisi ekunze.
  • Refund Tool, iyo inongove ine mitsva yekutsinhana kuitira kuti isapfure iyo BOB.

Zvino maitiro anoita seizvi:

Ziva mukugadzira iyo Refund Tool sevhisi ine asynchronous API paKafka

  1. BOB inogamuchira chikumbiro chekudzosera mari.
  2. BOB inotaura nezve iyi Refund Tool.
  3. The Refund Tool inoudza Kubhadhara: "Dzosera mari."
  4. Kubhadhara kunodzosera mari.
  5. Refund Tool uye BOB inowiriranisa mastatus nemumwe, nekuti parizvino ivo vari vaviri vanoida. Isu hatisati tagadzirira kuchinjika zvachose kuChishandiso Chekudzorera, sezvo BOB ine UI, inoshuma accounting, uye kazhinji data rakawanda risingagoni kutamiswa nyore nyore. Unofanira kugara pazvigaro zviviri.
  6. Chikumbiro chemari chinoenda.

Nekuda kweizvozvo, takagadzira mhando yebhazi rechiitiko paKafka - chiitiko-bhazi, pakatanga zvese. Hurray, ikozvino tine poindi imwe yekutadza (kunyomba).

Ziva mukugadzira iyo Refund Tool sevhisi ine asynchronous API paKafka

Zvayakanakira nezvayakaipira zviri pachena. Takagadzira bhazi, zvinoreva kuti ikozvino masevhisi ese anoenderana nazvo. Izvi zvinorerutsa dhizaini, asi inosuma imwe pfungwa yekutadza muhurongwa. Kafka ichaparara, maitiro acho achamira.

Chii chinonzi chiitiko-inofambiswa API

Mhinduro yakanaka kumubvunzo uyu iri mushumo naMartin Fowler (GOTO 2017) "Zvinorehwa Zvakawanda zveChiitiko-chinotungamirirwa Architecture".

Muchidimbu zvatakaita:

  1. Pedzisa zvese asynchronous exchanges kuburikidza zviitiko kuchengetedza. Panzvimbo pekuzivisa mutengi wese anofarira nezve shanduko yemamiriro panetiweki, tinonyora chiitiko nezve shanduko yemamiriro kune imwe nzvimbo yekuchengetedza, uye vatengi vanofarira musoro wenyaya vanoverenga zvese zvinoonekwa kubva ipapo.
  2. Chiitiko munyaya iyi chiziviso (zviziviso) kuti chimwe chinhu chachinja pane imwe nzvimbo. Semuenzaniso, mamiriro ekuraira akachinja. Mutengi anofarira imwe data inoperekedza shanduko yechimiro isina kubatanidzwa muchiziviso anogona kuzvitsvagira mamiriro ayo.
  3. Iyo yakanyanya sarudzo ndeye yakazara-yakazara chiitiko kutsvaga, state transfer, mune chiitiko chipi chine ruzivo rwese rwakakosha pakugadzirisa: kwayakabva uye kuti yakaenda kupi, kuti data yakachinja sei, etc. Mubvunzo chete ndeyekugoneka uye huwandu hweruzivo rwaunogona kuchengeta.

Sechikamu chekuvhurwa kweChishandiso cheKudzosera, takashandisa sarudzo yechitatu. Ichi chakareruka kugadzirisa chiitiko sezvo pakanga pasina chikonzero chekuburitsa ruzivo rwakadzama, uyezve yakabvisa mamiriro ezvinhu apo chiitiko chitsva chega chega chinoburitsa kuputika kwekujekesa kuwana zvikumbiro kubva kune vatengi.

Refund Tool Service not loaded, saka Kafka pane zvakawanda zvekuravira peni pane zvinodikanwa. Ini handifunge kuti kana iyo yekudzosera sevhisi ikava yakakura-mutoro purojekiti, bhizinesi raizofara.

Async exchange AS IS

Kune asynchronous exchanges, iyo PHP department inowanzo shandisa RabbitMQ. Isu takaunganidza iyo data yechikumbiro, toiisa mumutsara, uye mutengi webasa rimwe chetero akaiverenga uye akaitumira (kana haana kuitumira). Kune iyo API pachayo, Lamoda inoshingairira kushandisa Swagger. Isu tinogadzira API, tinoitsanangura muSwagger, uye tinogadzira mutengi uye server kodhi. Isu tinoshandisa zvakare yakagadziridzwa zvishoma JSON RPC 2.0.

Mune dzimwe nzvimbo ESB mabhazi anoshandiswa, vamwe vanogara pa activeMQ, asi, kazhinji, RabbitMQ - chiyero.

Async exchange TO BE

Paunenge uchigadzira shanduko kuburikidza nezviitiko-bhazi, fananidzo inogona kuteverwa. Isu tinotsanangura zvakafanana remangwana rekuchinjana data kuburikidza netsananguro yechimiro chechiitiko. Iyo yaml fomati, taifanira kuita kodhi yekugadzira isu pachedu, jenareta inogadzira maDTO zvinoenderana nekwakatsanangurwa uye inodzidzisa vatengi nemaseva kushanda navo. Chizvarwa chinopinda mumitauro miviri - golang uye php. Izvi zvinobatsira kuchengeta maraibhurari achienderana. Jenareta rakanyorwa negolang, ndokusaka rakawana zita rekuti gogi.

Chiitiko-kutsvaga paKafka chinhu chakajairika. Pane mhinduro kubva kune huru bhizinesi vhezheni yeKafka Confluent, iripo nakadi, mhinduro kubva kudura redu hama Zalando. Yedu kukurudzira kutanga nevanilla Kafka - izvi zvinoreva kusiya mhinduro yakasununguka kusvika tazofunga kuti tichaishandisa kwese kwese, uyezve tichizvisiira nzvimbo yekufambisa nekuvandudza: tinoda rutsigiro rwedu. JSON RPC 2.0, majenareta emitauro miviri uye ngationei zvimwe.

Zvinoshamisa kuti kunyangwe muchiitiko chinofadza chakadaro, kana paine bhizinesi rakada kufanana, Zalando, iro rakaita mhinduro yakada kufanana, hatigone kuishandisa nemazvo.

Iyo yekuvaka maitiro pakuvhurwa ndeiyi inotevera: isu tinoverenga zvakananga kubva kuKafka, asi nyora chete kuburikidza nezviitiko-bhazi. Pane zvakawanda zvakagadzirirwa kuverenga muKafka: mabhuroka, mabharanzi, uye yakawedzera kana kushoma kugadzirira kuyera kuyera, ndaida kuchengeta izvi. Isu taida kupedzisa kurekodha kuburikidza neGateway aka Zviitiko-bhazi, ndosaka.

Zviitiko-bhazi

Kana bhazi rechiitiko. Iri rinongori risingaverengeki http gedhi, iro rinotora akati wandei akakosha mabasa:

  • Kugadzira Mvumo - Tinotarisa kuti zviitiko zvinosangana nezvatinoda.
  • Chiitiko master system, ndiko kuti, iyi ndiyo huru uye yega hurongwa mukambani inopindura mubvunzo wezviitiko zvipi zvimiro zvinoonekwa sezvakanaka. Kusimbiswa kunongosanganisira mhando dzedata uye enums kunyatsotsanangura zvirimo.
  • Hash basa ye sharding - iyo Kafka meseji chimiro ndiyo kiyi-kukosha uye kushandisa hashi yekiyi inoverengerwa kwainoiisa.

Sei

Isu tinoshanda mukambani huru ine maitiro akagadziridzwa. Sei kuchinja chero chinhu? Uku kuedza, uye tinotarisira kuwana zvikomborero zvakawanda.

1:n+1 kuchinjana (imwe kune yakawanda)

Kafka inoita kuti zvive nyore kwazvo kubatanidza vatengi vatsva kuAPI.

Ngatiti iwe une dhairekitori raunoda kuti urambe uripo mune akati wandei masisitimu kamwechete (uye mune mamwe matsva). Pakutanga, isu takagadzira bundle raishandisa set-API, uye master system yakaziviswa nezvekero dzevatengi. Iye zvino iyo master system inotumira zvigadziriso kune iyo musoro, uye wese anofarira anoiverenga. Yabuda sisitimu itsva - isu takaisaina iyo yemusoro wenyaya. Hongu, zvakare bundle, asi nyore.

Panyaya yekudzosera-chishandiso, chiri chidimbu cheBOB, zvakatinakira isu kuti tizvichengete zvakawiriraniswa kuburikidza neKafka. Kubhadhara kunotaura kuti mari yakadzoserwa: BOB, RT vakaziva nezveizvi, vakachinja mamiriro avo, Fiscalization Service yakaziva nezveizvi uye yakabudisa cheki.

Ziva mukugadzira iyo Refund Tool sevhisi ine asynchronous API paKafka

Isu tine hurongwa hwekugadzira yakabatana Notifications Service iyo yaizozivisa mutengi nezvenhau nezve odha yake / kudzoka. Zvino mutoro uyu wakapararira pakati pehurongwa. Zvichakwana kuti isu tidzidzise iyo Notifications Service kubata ruzivo rwakakodzera kubva kuKafka uye tipindure kwairi (uye kudzima zviziviso izvi mune mamwe masisitimu). Hapana kuchinjana kwakananga kutsva kuchadikanwa.

Dhata-inotyairwa

Ruzivo pakati pemasisitimu runobuda pachena - zvisinei kuti nderipi "bhizinesi rine ropa" raunaro uye zvisinei nekuti wakawandisa sei. Lamoda ine dhipatimendi reData Analytics rinounganidza data kubva kune masisitimu uye rinoisa mufomu rinogona kushandiswazve, zvese zvebhizinesi uye zvehungwaru masisitimu. Kafka inokubvumira kukurumidza kuvapa data yakawanda uye kuchengetedza iyo ruzivo ruchiyerera kusvika ikozvino.

Replication log

Mameseji haanyangarika mushure mekuverengwa, sezvakaita RabbitMQ. Kana chiitiko chine ruzivo rwakakwana rwekugadzirisa, isu tine nhoroondo yekuchinja kwazvino kuchinhu, uye, kana zvichidikanwa, kugona kushandisa shanduko idzi.

Iyo nguva yekuchengetera yerogi yekudzokorora zvinoenderana nekusimba kwekunyora kune iyi musoro; Kafka inokutendera iwe kuti ugone kugadzika miganho pane yekuchengetedza nguva uye vhoriyamu yedata. Kune misoro yakadzika, zvakakosha kuti vese vatengi vawane nguva yekuverenga ruzivo rwusati rwanyangarika, kunyangwe kana iri nyaya yekusashanda kwenguva pfupi. Kazhinji zvinogoneka kuchengetedza data mayunitsi emazuva, iyo yakakwana zvakakwana kutsigirwa.

Ziva mukugadzira iyo Refund Tool sevhisi ine asynchronous API paKafka

Tevere, kudzokorodza kudiki kwezvinyorwa, kune avo vasingazive Kafka (mufananidzo wacho unobvawo muzvinyorwa)

AMQP ine mitsetse: tinonyora mameseji kumutsara wemutengi. Kazhinji, mutsara mumwe unogadziriswa neimwe system ine imwechete bhizinesi logic. Kana iwe uchida kuzivisa akati wandei masisitimu, unogona kudzidzisa iyo application kunyora kune akati wandei mitsara kana kugadzirisa shanduko neiyo fanout michina, inozvigadzira pachayo.

Kafka ine chirevo chakafanana musoro, mauri kunyora mameseji, asi haanyangarike kana waverenga. Nekumisikidza, paunobatanidza kuKafka, unogamuchira mameseji ese uye une sarudzo yekuchengetedza pawakasiira. Kureva kuti, iwe unoverenga zvakatevedzana, haugone kumaka meseji sekuverengwa, asi chengetedza id kubva kwaunokwanisa kuenderera mberi nekuverenga. Iyo Id yawakagadzika pairi inonzi offset, uye michina yacho ndeyekuita offset.

Saizvozvowo, logic yakasiyana inogona kushandiswa. Semuenzaniso, tine BOB mune 4 zviitiko kune nyika dzakasiyana - Lamoda iri muRussia, Kazakhstan, Ukraine, Belarus. Sezvo ivo vakaiswa zvakasiyana, vane zvishoma zvakasiyana configs uye yavo pachavo bhizinesi logic. Isu tinoratidza mumharidzo kuti inoreva nyika ipi. Mumwe nemumwe mutengi weBOB munyika imwe neimwe anoverenga neboka rakasiyanaId, uye kana meseji isingashande kwavari, vanoidarika, kureva. pakarepo anoita offset +1. Kana iyo musoro wenyaya ukaverengwa nePayment Service yedu, saka inozviita neboka rakasiyana, uye saka maoffset haapindirane.

Chiitiko chinodiwa:

  • Data kukwana. Ndinoda kuti chiitiko chive nedata rakakwana kuitira kuti rigadziriswe.

  • Kuperera. Isu tinopa kune Zviitiko-bhazi ratidziro yekuti chiitiko chinopindirana uye chinogona kuchigadzirisa.
  • Kurongeka kwakakosha. Munyaya yekudzoka, tinomanikidzwa kushanda nenhoroondo. Nezviziviso, iyo kurongeka haina kukosha, kana iri homogeneous zviziviso, iyo email ichave yakafanana zvisinei kuti nderipi kurongeka kwakasvika pakutanga. Panyaya yekudzoserwa, pane maitiro akajeka; kana tikachinja kurongeka, kunze kunomuka, kudzoserwa hakuzogadzirwa kana kugadziridzwa - tinozopedzisira tave mune imwe mamiriro.
  • Consistency. Tine chitoro, uye ikozvino tinogadzira zviitiko panzvimbo yeAPI. Isu tinoda nzira yekukurumidza uye yakachipa kufambisa ruzivo nezve zviitiko zvitsva uye shanduko kune iripo kune yedu masevhisi. Izvi zvinowanikwa kuburikidza neyakajairwa yakatarwa mune yakaparadzana git repository uye kodhi jenareta. Naizvozvo, vatengi uye maseva mumasevhisi akasiyana anorongeka.

Kafka muLamoda

Tine matatu ekuisa Kafka:

  1. Logs;
  2. R&D;
  3. Zviitiko-bhazi.

Nhasi tiri kutaura chete pamusoro pepfungwa yekupedzisira. Pazviitiko-bhazi, isu hatina yakakura kwazvo yekuisa - 3 vatengesi (maseva) uye chete 27 misoro. Sezvo mutemo, imwe musoro inzira imwe chete. Asi iyi ipfungwa yakapusa, uye isu tichabata pairi ikozvino.

Ziva mukugadzira iyo Refund Tool sevhisi ine asynchronous API paKafka

Pamusoro pane rps graph. Maitiro ekudzoreredza anoratidzwa ne turquoise mutsara (hongu, iyo iri paX axis), uye mutsetse wepingi ndiyo yemukati yekuvandudza maitiro.

Iyo Lamoda catalog ine mamirioni ezvigadzirwa, uye iyo data inovandudzwa nguva dzese. Zvimwe zvakaunganidzwa zvinobuda mufashoni, zvitsva zvinoburitswa kuti zvitsive, uye mhando nyowani dzinogara dzichionekwa mukatalogi. Isu tinoedza kufanotaura zvichange zvichinakidza kune vatengi vedu mangwana, saka isu tinogara tichitenga zvinhu zvitsva, tichizvitora mafoto uye nekuvandudza iyo yekuratidzira kesi.

Pink peaks zvigadziriso zvechigadzirwa, ndiko kuti, shanduko mune zvigadzirwa. Zvinogona kuonekwa kuti vakomana vakatora mifananidzo, vakatora mifananidzo, uye zvakare! - yakatakura paki yezviitiko.

Lamoda Zviitiko zvinoshandisa makesi

Isu tinoshandisa iyo yakagadzirwa architecture kune anotevera mashandiro:

  • Dzorera mamiriro ekutevera: kudana-ku-chiito uye mamiriro ekutevera kubva kune ese anobatanidzwa masisitimu. Kubhadhara, zvimiro, fiscalization, zviziviso. Pano takaedza nzira, takagadzira maturusi, takaunganidza zvese zviputi, takanyora zvinyorwa uye takaudza vatinoshanda navo mashandisiro.
  • Kuvandudza makadhi echigadzirwa: gadziriro, meta-data, maitiro. Imwe sisitimu inoverenga (iyo inoratidza), uye akati wandei kunyora.
  • Email, push uye sms: kurongeka kwakaunganidzwa, kurongeka kwasvika, kudzoka kwakagamuchirwa, nezvimwewo, kune zvakawanda zvavo.
  • Stock, warehouse kuvandudzwa - kuwanda kwekuvandudzwa kwezvinhu, nhamba chete: kusvika paimba yekuchengetera zvinhu, kudzoka. Izvo zvinodikanwa kuti masisitimu ese ane hukama nekuchengetedza zvinhu ashande neazvino data. Parizvino, iyo stock update system yakaoma; Kafka ichaita kuti zvive nyore.
  • Data Analysis (Dhipatimendi reR&D), ML zvishandiso, analytics, manhamba. Tinoda kuti ruzivo ruve pachena - Kafka inonyatsokodzera izvi.

Iye zvino chikamu chinonakidza pamusoro pemapundu makuru uye zvinonakidza zvakawanikwa zvakaitika mumwedzi mitanhatu yapfuura.

Matambudziko ekugadzira

Ngatitii tinoda kuita chinhu chitsva - semuenzaniso, kuendesa iyo yese yekuendesa kuKafka. Ikozvino chikamu chemaitiro chinoitwa muOrder Processing muBOB. Iko kune chimiro chechimiro kumashure kwekuendesa odha kune yekuendesa sevhisi, kufamba kuenda kune yepakati dura, zvichingodaro. Kune monolith yakazara, kunyange maviri, pamwe neboka remaAPI rakatsaurirwa kuendesa. Vanoziva zvakawanda pamusoro pekutumira.

Idzi dzinoita senzvimbo dzakafanana, asi iyo Order Processing muBOB neShipping System ine zvimiro zvakasiyana. Semuenzaniso, mamwe masevhisi ekufambisa haatumire mastatus epakati, asi ekupedzisira chete: "kuendeswa" kana "kurasika". Vamwe, pane kudaro, vanorondedzera zvakadzama pamusoro pekufamba kwezvinhu. Munhu wese ane mitemo yake yekusimbisa: kune vamwe, iyo email inoshanda, zvinoreva kuti ichagadziriswa; kune vamwe haisi kushanda, asi kurongeka kucharamba kuchigadziriswa nokuti pane nhamba yefoni yekubata, uye mumwe munhu achati kurongeka kwakadaro hakuzogadziriswi zvachose.

Data stream

Panyaya yeKafka, mubvunzo wekuronga kuyerera kwe data unomuka. Iri basa rinosanganisira kusarudza zano rinobva pane akati wandei mapoinzi; ngatiendei mazviri ese.

Mune imwe nyaya kana mune dzakasiyana?

Tine chirevo chechiitiko. MuBOB tinonyora kuti chakadai uye chakadai chinoda kuendeswa, uye kuratidza: nhamba yekuraira, kuumbwa kwayo, mamwe maSKU nemabhawa macode, nezvimwe. Kana zvinhu zvasvika paimba yekuchengetera zvinhu, kuendesa kunozokwanisa kugamuchira mastatus, timestamps uye zvese zvinodiwa. Asi isu tinoda kugamuchira zvigadziriso pane iyi data muBOB. Isu tine reverse maitiro ekugamuchira data kubva pakuendesa. Ichi chiitiko chimwe chete here? Kana kuti uku ndiko kuchinjana kwakasiyana kunokodzera musoro wayo?

Zvingangodaro, ivo vachave vakafanana, uye muedzo wekuita musoro mumwe hausi husina hwaro, nokuti imwe nyaya yakasiyana inoreva vatengi vakasiyana, magadzirirwo akasiyana, chizvarwa chakasiyana chezvose izvi. Asi kwete chokwadi.

Munda mutsva kana chiitiko chitsva?

Asi kana ukashandisa zviitiko zvakafanana, ipapo imwe dambudziko rinomuka. Semuenzaniso, haasi ese ekutumira masisitimu anogona kugadzira mhando yeDTO iyo BOB inogona kugadzira. Isu tinovatumira iyo id, asi ivo havaichengete nekuti havaide, uye kubva padanho rekutanga chiitiko-bhazi maitiro, munda uyu unodiwa.

Kana tikasuma mutemo wechiitiko-bhazi kuti iyi ndima inodiwa, saka isu tinomanikidzwa kuseta mimwe mitemo yekusimbisa muBOB kana mune yekutanga chiitiko mubati. Kusimbiswa kunotanga kupararira mukati mesevhisi yese - izvi hazvisi nyore.

Rimwe dambudziko ndere muedzo wekuwedzera kukura. Isu tinoudzwa kuti chimwe chinhu chinoda kuwedzerwa kuchiitiko, uye pamwe, kana tikafunga nezvazvo, chinofanira kunge chiri chiitiko chakasiyana. Asi muchirongwa chedu, chiitiko chakasiyana inyaya yakasiyana. Musoro wakasiyana ndiwo maitiro ese andakatsanangura pamusoro. Iye anovandudza anoyedzerwa kuti angowedzera imwe munda kuJSON schema uye kuigadzira patsva.

Munyaya yekudzorera, takasvika pachiitiko chezviitiko muhafu yegore. Isu takanga tine meta-chiitiko chinonzi refund update, yaive nemhando yendima yaitsanangura kuti iyi update yaive chii chaizvo. Nekuda kweizvi, isu takave ne "zvinoshamisa" switch nevanosimbisa vakatiudza nzira yekusimbisa chiitiko ichi nerudzi urwu.

Chiitiko shanduro

Kusimbisa mameseji muKafka unogona kushandisa Euro, asi zvaive zvakafanira kuti pakarepo kurara pairi uye kushandisa Confluent. Muchiitiko chedu, tinofanira kungwarira nekushandura. Izvo hazvizogoneke nguva dzose kuverengazve mameseji kubva kune yekudzokorora log nekuti modhi "yasara". Chaizvoizvo, zvinoshanduka kuvaka mavhezheni kuitira kuti modhi ienderane kumashure: semuenzaniso, ita munda kwenguva pfupi. Kana misiyano yakanyanya kusimba, tinotanga kunyora mumusoro mutsva, toendesa vatengi kana vapedza kuverenga yekare.

Yakavimbiswa kuverenga yakarongwa yezvikamu

Misoro mukati meKafka yakakamurwa kuita zvikamu. Izvi hazvina kunyanya kukosha patinenge tichigadzira masangano uye kuchinjana, asi zvakakosha pakusarudza nzira yekushandisa nekuiyera.

Muchiitiko chenguva dzose, iwe unonyora musoro mumwe muKafka. Nekumisikidza, chikamu chimwe chinoshandiswa, uye mameseji ese ari mumusoro uyu anoenda kwairi. Uye mutengi nekudaro anoverenga aya mameseji achitevedzana. Ngatitii ikozvino tinoda kuwedzera sisitimu kuitira kuti mameseji averengerwe nevatengi vaviri vakasiyana. Kana, semuenzaniso, uri kutumira SMS, saka unogona kuudza Kafka kuti aite imwe chikamu, uye Kafka ichatanga kupatsanura mameseji muzvikamu zviviri - hafu pano, hafu pano.

Kafka inovaparadzanisa sei? Imwe neimwe meseji ine muviri (yatinochengeta JSON) uye kiyi. Iwe unogona kubatanidza hash basa kune iyi kiyi, iyo inozoona kuti ndeipi chikamu icho meseji ichapinda.

Muchiitiko chedu nekudzorera, izvi zvakakosha, kana tikatora zvikamu zviviri, saka pane mukana wekuti mutengi akafanana achagadzirisa chiitiko chechipiri pamberi pekutanga uye pachava nedambudziko. Iyo hash basa inovimbisa kuti mameseji ane kiyi imwechete anoguma mune imwechete partition.

Zviitiko vs mirairo

Iri ndiro rimwe dambudziko ratakasangana naro. Chiitiko chimwe chiitiko: tinoti chimwe chinhu chakaitika kune imwe nzvimbo (chimwe chinhu_chakaitika), semuenzaniso, chimwe chinhu chakanzurwa kana kudzoserwa kwakaitika. Kana mumwe munhu akateerera kune izvi zviitiko, saka zvinoenderana ne "chinhu chakadzimwa," iyo yekudzosera mari ichagadzirwa, uye "kudzoserwa kwakaitika" kuchanyorwa kumwe kunhu mukuseta.

Asi kazhinji, kana ukagadzira zviitiko, haudi kuzvinyora pasina - iwe unovimba nekuti mumwe munhu achazviverenga. Pane muedzo mukuru wekunyora kwete chimwe chinhu_chakaitika (chinhu_chakabviswa, kudzorera_kudzoserwa), asi chimwe chinhu_chinofanira_chiitwa. Somuenzaniso, chinhu chagadzirira kudzorerwa.

Kune rumwe rutivi, inoratidzira kuti chiitiko chacho chichashandiswa sei. Kune rimwe divi, zvinonzwika zvishoma sezita rechiitiko chakajairika. Kunze kwezvo, haisi kure nepano kune do_something command. Asi hauna vimbiso yekuti mumwe munhu akaverenga chiitiko ichi; uye kana ukaiverenga, ipapo unoiverenga zvinobudirira; uye kana ukaiverenga zvinobudirira, ipapo wakaita chimwe chinhu, uye kuti chimwe chinhu chakabudirira. Panguva iyo chiitiko chave kuita_chimwe chinhu, mhinduro inove yakakosha, uye iro idambudziko.

Ziva mukugadzira iyo Refund Tool sevhisi ine asynchronous API paKafka

Mukuchinjana kweasynchronous muRabbitMQ, paunoverenga meseji, enda ku http, une mhinduro - zvirinani kuti meseji yakagamuchirwa. Paunonyorera kuKafka, pane meseji yawakanyorera Kafka, asi hapana chaunoziva nezve magadzirirwo ayo.

Nokudaro, kwatiri isu, taifanira kuunza chiitiko chekupindura uye kugadzirisa kutarisa kuitira kuti kana zviitiko zvakawanda zvakatumirwa, mushure mekuda uye nguva yakadaro nhamba yakafanana yezviitiko zvekupindura inofanira kusvika. Kana izvi zvikasaitika, saka chimwe chinhu chinoratidzika kunge chisina kumira zvakanaka. Semuenzaniso, kana takatumira chiitiko che "item_ready_to_refund", tinotarisira kuti mari ichagadziriswa, mari ichadzorerwa kumutengi, uye chiitiko che "money_refund" chichatumirwa kwatiri. Asi izvi hazvina chokwadi, saka kuongorora kunodiwa.

Nuances

Pane dambudziko riri pachena: kana iwe ukaverenga kubva pachinyorwa zvakateerana, uye uine imwe yakaipa meseji, mutengi anodonha, uye hauzoendi mberi. Unoda kumisa vatengi vese, wedzera kugadzirisa kuti uenderere mberi nekuverenga.

Taiziva nezvazvo, takavimba nazvo, uye zvakadaro zvakaitika. Uye izvi zvakaitika nekuti chiitiko chacho chaive chakasimba kubva pakuona kwezviitiko-bhazi, chiitiko chacho chaive chakasimba kubva pakuona kwechishandiso chemugadziriso, asi chaive chisiri chechokwadi kubva pakuona kwePostgreSQL, nekuti mune yedu imwe system. MySQL ine UNSIGNED INT, uye mune ichangobva kunyorwa sisitimu yaive nePostgreSQL iine INT. Saizi yake idiki zvishoma, uye Id haina kukwana. Symfony akafa kunze. Isu, hongu, takabata izvo nekuti isu taivimba nazvo, uye taizogadzirisa izvi, asi izvi zvisati zvaitika taida kuwedzera dambudziko, sezvo meseji yakagadziriswa zvisina kubudirira. Zviverengero zvepurojekiti iyi zvakare mune dhatabhesi, uye Symfony yakatovhara kutaurirana nedhatabhesi, uye yechipiri yakasarudzika yakauraya maitiro ese pasina mukana wekuita offset.

Iyo sevhisi yakarara kwechinguva - nerombo rakanaka, neKafka izvi hazvina kushata, nekuti mameseji anoramba aripo. Kana basa radzorerwa, unogona kupedza kuverenga. Zviri nyore.

Kafka ine kugona kuseta yekupokana offset kuburikidza nekushandisa. Asi kuti uite izvi, unofanirwa kumisa vatengi vese - kwatiri isu, gadzirira kusunungurwa kwakasiyana umo kusingazove nevatengi, redeployments. Ipapo muKafka unogona kushandura offset kuburikidza nekushandisa, uye meseji ichapfuura.

Imwe nuance - replication log vs rdkafka.so - inoenderana nezvakatsanangurwa zvepurojekiti yedu. Isu tinoshandisa PHP, uye muPHP, sekutonga, maraibhurari ese anotaurirana neKafka kuburikidza nerdkafka.so repository, uyezve pane imwe mhando yekuputira. Pamwe aya ndiwo matambudziko edu, asi zvakazoitika kuti kungoverengazve chidimbu chezvatakanga tatoverenga hazvisi nyore. Kazhinji, pakanga paine matambudziko esoftware.

Kudzokera kune chaiyo yekushanda nezvikamu, zvakanyorwa muzvinyorwa vatengi > = zvikamu zvemusoro. Asi ndakazoziva nezvazvo pave paya kupfuura zvandaizoda. Kana iwe uchida kuyera uye uine vatengi vaviri, iwe unoda anokwana maviri mapartitions. Ndokunge, kana iwe waive nechikamu chimwe umo zviuru makumi maviri zvemashoko zvakaunganidzwa, uye iwe ukaita imwe nyowani, nhamba yemameseji haizoenzaniswi munguva pfupi. Naizvozvo, kuti uve nevatengi vaviri vakafanana, unofanirwa kubata nezvikamu.

Kuongorora

Ndinofunga nzira yatinotarisa nayo ichave yakatojeka kuti ndeapi matambudziko aripo munzira iripo.

Semuenzaniso, isu tinoverenga kuti zvingani zvigadzirwa zviri mudhatabhesi zvakangochinja chimiro chazvo, uye, maererano, zviitiko zvinofanirwa kunge zvakaitika zvichienderana nekuchinja uku, uye tinotumira iyi nhamba kune yedu yekutarisa system. Zvadaro kubva kuKafka tinowana nhamba yechipiri, zvingani zviitiko zvakanyorwa chaizvo. Zviripachena, musiyano uripo pakati penhamba mbiri idzi unofanira kugara uri zero.

Ziva mukugadzira iyo Refund Tool sevhisi ine asynchronous API paKafka

Mukuwedzera, iwe unofanirwa kutarisa kuti mugadziri ari kuita sei, ingave zviitiko-bhazi rakagashira mameseji, uye kuti mutengi ari kuita sei. Semuenzaniso, mumachati ari pasi apa, Refund Tool iri kuita zvakanaka, asi BOB zvakajeka ine mamwe matambudziko (blue peaks).

Ziva mukugadzira iyo Refund Tool sevhisi ine asynchronous API paKafka

Ndakatotaura nezvevatengi-boka rekare. Kutaura kudai, iyi ndiyo nhamba yemameseji asina kuverengwa. Kazhinji, vatengi vedu vanoshanda nekukurumidza, saka iyo lag inowanzoita 0, asi dzimwe nguva panogona kuve nepamusoro penguva pfupi. Kafka inogona kuita izvi kunze kwebhokisi, asi iwe unofanirwa kuseta imwe nguva.

Pane chirongwa Burrowiyo inokupa rumwe ruzivo nezve Kafka. Inongoshandisa iyo vatengi-boka API kupa mamiriro ekuti boka iri riri kuita sei. Kuwedzera kune OK uye Yakakundikana, pane yambiro, uye unogona kuona kuti vatengi vako havagone kurarama nekumhanya kwekugadzira - havana nguva yekuongorora zvakanyorwa. Iyo sisitimu yakangwara uye iri nyore kushandisa.

Ziva mukugadzira iyo Refund Tool sevhisi ine asynchronous API paKafka

Izvi ndizvo zvinoita API mhinduro. Heino boka bob-live-fifa, partition refund.update.v1, status OK, lag 0 - yekupedzisira kugadzirisa zvakadai nezvakadaro.

Ziva mukugadzira iyo Refund Tool sevhisi ine asynchronous API paKafka

Kuongorora yakagadziridzwa_paSLA (yakanamatira) Ndatotaura. Semuenzaniso, chigadzirwa chachinja kune chimiro chekuti chagadzirira kudzoka. Isu tinoisa Cron, iyo inotaura kuti kana mumaminitsi mashanu chinhu ichi chisati chaenda kudzosera (tinodzosera mari kuburikidza nehurongwa hwekubhadhara nekukurumidza), ipapo chimwe chinhu chakashata, uye iyi inyaya yekutsigirwa. Naizvozvo, isu tinongotora Cron, iyo inoverenga zvinhu zvakadaro, uye kana yakakura kupfuura 5, zvino inotumira yambiro.

Kupfupisa, kushandisa zviitiko zviri nyore kana:

  • ruzivo runodiwa nehurongwa hwakawanda;
  • mugumisiro wekugadzirisa hauna kukosha;
  • pane zviitiko zvishoma kana zviitiko zvidiki.

Zvingaita sekuti chinyorwa chine musoro chaiwo - asynchronous API paKafka, asi maererano nazvo ndinoda kukurudzira zvinhu zvakawanda kamwechete.
Chokutanga, chinotevera YakakwiraLoad ++ tinoda kumirira kusvika munaNovember, munaEpril pachava neSt. Petersburg version, uye munaJune tichataura pamusoro pemitoro yakakwirira muNovosibirsk.
Chechipiri, munyori wemushumo, Sergei Zaika, inhengo yeChirongwa cheKomiti yemusangano wedu mutsva wekutonga ruzivo. KnowledgeConf. Musangano uyu ndewezuva rimwe chete, uchaitwa musi wa26 Kubvumbi, asi hurongwa hwawo hwakanyanya.
Uye zvichave muna May PHP Russia ΠΈ RIT++ (ine DevOpsConf inosanganisirwa) - unogona zvakare kupa zano rako ipapo, taura nezve chiitiko chako uye kunyunyuta nezvekoni dzako dzakaiswa.

Source: www.habr.com

Voeg