Dziwani zambiri pakupanga ntchito ya Refund Tool ndi API ya asynchronous pa Kafka

Ndi chiyani chomwe chingakakamize kampani yayikulu ngati Lamoda, yokhala ndi njira zowongolera komanso mautumiki ambiri olumikizana, kuti asinthe kwambiri njira yake? Kulimbikitsa kumatha kukhala kosiyana kotheratu: kuchokera kumalamulo kupita ku chikhumbo chofuna kuyesa zomwe zimachitika mwa opanga mapulogalamu onse.

Koma izi sizikutanthauza kuti simungadalire mapindu ena. Sergey Zaika akuwuzani zomwe mungapambane ngati mutagwiritsa ntchito API yoyendetsedwa ndi zochitika pa Kafka (ochepa). Padzakhalanso nkhani zowombera zazikulu ndi zopezedwa zosangalatsa - kuyesako sikungachite popanda iwo.

Dziwani zambiri pakupanga ntchito ya Refund Tool ndi API ya asynchronous pa Kafka

Chodzikanira: Nkhaniyi idachokera pamisonkhano yomwe Sergey adachita mu Novembala 2018 pa HighLoad++. Zomwe Lamoda adakumana nazo pogwira ntchito ndi Kafka zidakopa omvera kuposa malipoti ena pandandanda. Tikuganiza kuti ichi ndi chitsanzo chabwino kwambiri choti mutha kupeza ndipo muyenera kupeza anthu amalingaliro ofanana nthawi zonse, ndipo okonza HighLoad ++ apitiliza kuyesera kupanga mlengalenga kuti izi zitheke.

Za ndondomekoyi

Lamoda ndi nsanja yayikulu ya e-commerce yomwe ili ndi malo ake olumikizirana, ntchito yobweretsera (ndi othandizira ambiri), situdiyo ya zithunzi, nyumba yosungiramo zinthu zazikulu, ndipo zonsezi zimayenda ndi pulogalamu yakeyake. Pali njira zambiri zolipirira, othandizana nawo a b2b omwe atha kugwiritsa ntchito zina kapena zonsezi ndikufuna kudziwa zaposachedwa pazamalonda awo. Kuphatikiza apo, Lamoda imagwira ntchito m'maiko atatu kupatula Russian Federation ndipo chilichonse chimakhala chosiyana kwambiri kumeneko. Pazonse, pali njira zoposa zana zokonzekera dongosolo latsopano, lomwe liyenera kukonzedwa mwanjira yake. Zonsezi zimagwira ntchito mothandizidwa ndi mautumiki ambiri omwe nthawi zina amalankhulana m'njira zosadziwika. Palinso dongosolo lapakati lomwe udindo wake waukulu ndi ma statuses. Timamutcha kuti BOB, ndimagwira naye ntchito.

Chida Chobwezeredwa ndi API yoyendetsedwa ndi zochitika

Liwu loti zochitika zoyendetsedwa ndizovuta kwambiri; kupitirira pang'ono tidzafotokozera mwatsatanetsatane zomwe zikutanthauza. Ndiyamba ndi zomwe tidasankha kuyesa njira ya API yoyendetsedwa ndi zochitika ku Kafka.

Dziwani zambiri pakupanga ntchito ya Refund Tool ndi API ya asynchronous pa Kafka

M'sitolo iliyonse, kuwonjezera pa malamulo omwe makasitomala amalipira, pali nthawi zomwe sitolo imayenera kubwezera ndalama chifukwa mankhwalawa sanagwirizane ndi kasitomala. Iyi ndi njira yayifupi: timafotokozera zambiri, ngati kuli kofunikira, ndikusamutsa ndalamazo.

Koma kubwezako kudakhala kovutirapo chifukwa chakusintha kwa malamulo, ndipo tidayenera kukhazikitsa kachipangizo kakang'ono kameneko.

Dziwani zambiri pakupanga ntchito ya Refund Tool ndi API ya asynchronous pa Kafka

Zolimbikitsa zathu:

  1. Chilamulo FZ-54 - Mwachidule, lamulo limafuna kuti lipereke lipoti ku ofesi yamisonkho za ndalama zonse, kaya kubweza kapena risiti, mkati mwa SLA yochepa ya mphindi zochepa. Ife, monga kampani ya e-commerce, timachita zinthu zambiri. Mwaukadaulo, izi zikutanthauza udindo watsopano (ndiponso ntchito yatsopano) ndikusintha machitidwe onse okhudzidwa.
  2. BOB kugawanika ndi pulojekiti yamkati ya kampani kuti athetse BOB ku chiwerengero chachikulu cha maudindo osakhala apakati ndikuchepetsa zovuta zake zonse.

Dziwani zambiri pakupanga ntchito ya Refund Tool ndi API ya asynchronous pa Kafka

Chithunzichi chikuwonetsa machitidwe akuluakulu a Lamoda. Tsopano ambiri a iwo ndi ochuluka gulu la nyenyezi la 5-10 microservices kuzungulira monolith yomwe ikucheperachepera. Akukula pang'onopang'ono, koma tikuyesera kuwapangitsa kukhala ang'onoang'ono, chifukwa kuyika chidutswa chosankhidwa pakati ndikowopsa - sitingalole kuti chigwe. Timakakamizika kusungira zosinthana zonse (mivi) ndikuganizira kuti aliyense waiwo sangakhalepo.

BOB ilinso ndi zosinthana zambiri: njira zolipirira, machitidwe operekera, machitidwe azidziwitso, ndi zina zambiri.

Mwaukadaulo BOB ndi:

  • ~ 150k mizere ya code + ~ 100k mizere ya mayeso;
  • php7.2 + Zend 1 & Symfony Zigawo 3;
  • >100 APIs & ~ 50 zophatikizira zotuluka;
  • Maiko 4 omwe ali ndi malingaliro awo abizinesi.

Kutumiza BOB ndi okwera mtengo komanso kowawa, kuchuluka kwa code ndi mavuto omwe amathetsa ndikuti palibe amene angakhoze kuziyika zonse m'mutu mwawo. Kawirikawiri, pali zifukwa zambiri zochepetsera.

Njira Yobwerera

Poyambirira, machitidwe awiri akugwira nawo ntchitoyi: BOB ndi Malipiro. Tsopano awiri ena akuwonekera:

  • Fiscalization Service, yomwe idzayang'anire mavuto pazachuma komanso kulumikizana ndi ntchito zakunja.
  • Chida Chobwezera, chomwe chimangokhala ndi kusinthana kwatsopano kuti zisakhudze BOB.

Tsopano ndondomekoyi ikuwoneka motere:

Dziwani zambiri pakupanga ntchito ya Refund Tool ndi API ya asynchronous pa Kafka

  1. BOB ilandila pempho lakubweza ndalama.
  2. BOB amalankhula za Chida Chobwezera ichi.
  3. Chida Chobwezera chimauza Malipiro kuti: "Bweretsani ndalamazo."
  4. Malipiro amabwezera ndalamazo.
  5. Chida Chobwezerani ndalama ndi BOB amagwirizanitsa ziwerengero wina ndi mzake, chifukwa pakadali pano onse amazifuna. Sitinakonzekere kusinthiratu ku Chida Chobwezera, popeza BOB ili ndi UI, malipoti owerengera ndalama, komanso zambiri zambiri zomwe sizingasamutsidwe mosavuta. Muyenera kukhala pa mipando iwiri.
  6. Pempho lazachuma likutha.

Zotsatira zake, tidapanga basi yamtundu wina ku Kafka - basi-basi, pomwe zonse zidayamba. Hurray, tsopano tili ndi mfundo imodzi yolephera (zonyoza).

Dziwani zambiri pakupanga ntchito ya Refund Tool ndi API ya asynchronous pa Kafka

Ubwino ndi zoyipa ndizowonekeratu. Tinapanga basi, zomwe zikutanthauza kuti ntchito zonse zimadalira. Izi zimathandizira kamangidwe kake, koma zimabweretsa vuto limodzi mudongosolo. Kafka idzawonongeka, ndondomekoyi idzasiya.

Kodi API yoyendetsedwa ndi zochitika ndi chiyani

Yankho labwino ku funsoli lili mu lipoti la Martin Fowler (GOTO 2017) "Matanthauzo Ambiri a Zomangamanga Zoyendetsedwa ndi Zochitika".

Mwachidule zomwe tinachita:

  1. Tsitsani zosintha zonse za asynchronous kudzera kusungirako zochitika. M'malo modziwitsa wogula aliyense wokonda zakusintha kwapaintaneti, timalemba chochitika chokhudza kusintha kwa malo osungira apakati, ndipo ogula omwe ali ndi chidwi ndi mutuwo amawerenga chilichonse chomwe chikuwoneka kuchokera pamenepo.
  2. Chochitika pankhaniyi ndi chidziwitso (zidziwitso) kuti chinachake chasintha penapake. Mwachitsanzo, dongosolo la dongosolo lasintha. Wogula yemwe ali ndi chidwi ndi data ina yotsagana ndi kusintha kwa mawonekedwe komwe sikunaphatikizidwe pachidziwitso atha kudzipezera yekha.
  3. Chosankha chachikulu ndicho kupeza zochitika zonse, kusamutsa dziko, muzochitika zomwe zili ndi chidziwitso chonse chofunikira pokonza: kumene chinachokera ndi momwe chinapitira, momwe deta inasinthira, ndi zina zotero.

Monga gawo la kukhazikitsidwa kwa Chida Chobwezera, tinagwiritsa ntchito njira yachitatu. Kukonzekera kophweka kumeneku chifukwa kunalibe chifukwa chofotokozera mwatsatanetsatane, komanso kunathetsa zochitika zomwe chochitika chilichonse chatsopano chimatulutsa kumveka bwino kwa zopempha kuchokera kwa ogula.

Refund Tool Service osadzaza, kotero Kafka pali kukoma kwa cholembera kuposa kufunikira. Sindikuganiza kuti ngati ntchito yobwezera ndalama ikhala ntchito yolemetsa kwambiri, bizinesi ingakhale yosangalala.

Kusinthana kwa Async AS IS

Pakusinthana kosagwirizana, dipatimenti ya PHP nthawi zambiri imagwiritsa ntchito RabbitMQ. Tinasonkhanitsa deta ya pempholo, ndikuyiyika pamzere, ndipo wogula ntchito yomweyi anaiwerenga ndikuitumiza (kapena sanaitumize). Kwa API yokha, Lamoda imagwiritsa ntchito Swagger mwachangu. Timapanga API, kuifotokoza mu Swagger, ndikupanga kasitomala ndi ma code a seva. Timagwiritsanso ntchito JSON RPC 2.0 yowonjezera pang'ono.

M'malo ena mabasi a ESB amagwiritsidwa ntchito, ena amakhala pa activeMQ, koma, ambiri, RabbitMQ - muyezo.

Kusinthana kwa Async TO BE

Mukapanga kusinthana kudzera pa zochitika-basi, fanizo limatha kutsatiridwa. Ifenso timafotokozera zakusinthana kwa data m'tsogolo kudzera m'mafotokozedwe a zochitika. Mawonekedwe a yaml, tidayenera kupanga tokha ma code, jenereta imapanga ma DTO molingana ndi momwe amafotokozera ndipo imaphunzitsa makasitomala ndi ma seva kuti azigwira nawo ntchito. Generation imapita m'zilankhulo ziwiri - golang ndi php. Izi zimathandiza kuti malaibulale azisinthasintha. Jeneretayo imalembedwa ndi golang, chifukwa chake idatchedwa kuti gogi.

Kupeza zochitika pa Kafka ndichinthu chodziwika bwino. Pali yankho kuchokera ku mtundu waukulu wamabizinesi wa Kafka Confluent, ulipo nakadi, yankho lochokera kudera lathu abale Zalando. Zathu zolimbikitsa kuyamba ndi vanila Kafka - izi zikutanthauza kusiya yankho laulere mpaka titasankha kuti tigwiritse ntchito kulikonse, ndikudzisiyira malo oti tichite bwino: tikufuna thandizo pazathu. JSON RPC 2.0, majenereta azilankhulo ziwiri ndipo tiwone china.

Ndizodabwitsa kuti ngakhale muzochitika zosangalatsa zotere, pakakhala bizinesi yofanana, Zalando, yomwe idapanga yankho lofananalo, sitingathe kuigwiritsa ntchito bwino.

Zomangamanga pakukhazikitsa ndi motere: timawerenga mwachindunji kuchokera ku Kafka, koma timangolemba kudzera muzochitika-basi. Pali zambiri zomwe zakonzeka kuwerengedwa ku Kafka: ma broker, ma balancer, ndipo ndiyokonzeka kukweza mopingasa, ndimafuna kusunga izi. Tinkafuna kumaliza kujambula kudzera pa Gateway aka Events-basi, ndichifukwa chake.

Zochitika-basi

Kapena basi ya zochitika. Ichi ndi chipata chosawerengeka cha http, chomwe chimatenga maudindo angapo ofunikira:

  • Kupanga Kutsimikizika - timayang'ana kuti zochitikazo zikugwirizana ndi zomwe tikufuna.
  • Zochitika Master System, ndiko kuti, iyi ndiyo dongosolo lalikulu komanso lokhalo mu kampani lomwe limayankha funso la zomwe zochitika zomwe zimaganiziridwa kuti ndizovomerezeka. Kutsimikizira kumangotengera mitundu ya data ndi ma enums kuti afotokoze bwino zomwe zili.
  • Ntchito ya Hash kwa sharding - mawonekedwe a uthenga wa Kafka ndiwofunika kwambiri ndipo kugwiritsa ntchito hashi ya kiyi kumawerengedwa komwe kungayike.

chifukwa

Timagwira ntchito pakampani yayikulu yokhala ndi njira zowongolera. Chifukwa chiyani kusintha kalikonse? Uku ndi kuyesa, ndipo tikuyembekezera kupeza madalitso angapo.

1:n+1 kusinthana (mmodzi mpaka ambiri)

Kafka imapangitsa kukhala kosavuta kulumikiza ogula atsopano ku API.

Tiyerekeze kuti muli ndi chikwatu chomwe muyenera kupitilizabe kumakina angapo nthawi imodzi (komanso ena atsopano). M'mbuyomu, tidapanga mtolo womwe unakhazikitsa set-API, ndipo master system idadziwitsidwa za ma adilesi ogula. Tsopano master system imatumiza zosintha pamutuwu, ndipo aliyense amene ali ndi chidwi amawerenga. Dongosolo latsopano lawoneka - tidasainira pamutuwu. Inde, komanso mtolo, koma zosavuta.

Pankhani yobwezera-chida, chomwe ndi chidutswa cha BOB, ndizosavuta kuti tiziwagwirizanitsa kudzera mu Kafka. Malipiro akuti ndalamazo zidabwezedwa: BOB, RT adazindikira izi, adasintha mawonekedwe awo, Fiscalization Service idazindikira izi ndikutulutsa cheke.

Dziwani zambiri pakupanga ntchito ya Refund Tool ndi API ya asynchronous pa Kafka

Tili ndi mapulani opangira Unified Notification Service yomwe ingadziwitse kasitomala za nkhani zokhuza kuyitanitsa / kubweza kwake. Tsopano udindo uwu wafalikira pakati pa machitidwe. Zidzakhala zokwanira kuti tiphunzitse Service Notifications kuti tipeze zambiri kuchokera ku Kafka ndikuyankha (ndi kuletsa zidziwitso izi mu machitidwe ena). Palibe kusinthana kwachindunji kwatsopano kudzafunika.

Yoyendetsedwa ndi deta

Chidziwitso pakati pa machitidwe chimaonekera poyera - ziribe kanthu kuti muli ndi "bizinesi yamagazi" yotani komanso mosasamala kanthu kuti zotsalira zanu zachuluka bwanji. Lamoda ili ndi dipatimenti ya Data Analytics yomwe imasonkhanitsa deta kuchokera ku machitidwe ndikuyika mu mawonekedwe ogwiritsidwanso ntchito, amalonda ndi anzeru. Kafka imakulolani kuti muwapatse mwachangu deta yambiri ndikusunga chidziwitsocho kuti chiziyenda mpaka pano.

Replication log

Mauthenga samatha pambuyo powerengedwa, monga RabbitMQ. Chochitika chikakhala ndi chidziwitso chokwanira chokonzekera, timakhala ndi mbiri yakusintha kwaposachedwa kwa chinthucho, ndipo, ngati tikufuna, kuthekera kogwiritsa ntchito zosinthazi.

Nthawi yosungiramo chipika chobwerezabwereza zimatengera kuzama kwa kulemba pamutuwu; Kafka imakupatsani mwayi woyika malire pa nthawi yosungira komanso kuchuluka kwa data. Pamitu yozama, ndikofunikira kuti ogula onse azikhala ndi nthawi yowerengera zomwe zisanachitike, ngakhale zitakhala zosagwira ntchito kwakanthawi kochepa. Nthawi zambiri ndizotheka kusunga deta mayunitsi a masiku, zomwe ndi zokwanira kuthandizira.

Dziwani zambiri pakupanga ntchito ya Refund Tool ndi API ya asynchronous pa Kafka

Chotsatira, kubwereza pang'ono zolembazo, kwa iwo omwe sadziwa Kafka (chithunzichi chikuchokera pazolemba)

AMQP ili ndi mizere: timalemba mauthenga pamzere kwa ogula. Nthawi zambiri, mzere umodzi umakonzedwa ndi dongosolo limodzi lokhala ndi malingaliro abizinesi omwewo. Ngati mukufuna kudziwitsa makina angapo, mutha kuphunzitsa pulogalamuyo kulembera mizere ingapo kapena kusintha kusinthana ndi makina a fanout, omwe amadzipanga okha.

Kafka ali ndi mawonekedwe ofanana tsa, m'mene mumalemba mauthenga, koma samatha pambuyo powerenga. Mwachikhazikitso, mukamalumikizana ndi Kafka, mumalandira mauthenga onse ndikukhala ndi mwayi wosunga pomwe mudasiyira. Ndiye kuti, mumawerenga motsatizana, simungalembe kuti uthengawo wawerengedwa, koma sungani id yomwe mutha kupitiliza kuwerenga. Id yomwe mudakhazikikapo imatchedwa offset, ndipo makinawo akuwonongeka.

Chifukwa chake, malingaliro osiyanasiyana amatha kukhazikitsidwa. Mwachitsanzo, tili ndi BOB muzochitika 4 za mayiko osiyanasiyana - Lamoda ili ku Russia, Kazakhstan, Ukraine, Belarus. Popeza amagawidwa padera, ali ndi masinthidwe osiyana pang'ono ndi malingaliro awo abizinesi. Timasonyeza mu uthenga dziko limene likunena. Wogula aliyense wa BOB m'dziko lililonse amawerenga ndi guluId yosiyana, ndipo ngati uthengawo sukugwira ntchito kwa iwo, amalumpha, i.e. nthawi yomweyo amatsitsa +1. Ngati mutu womwewo ukuwerengedwa ndi Utumiki Wathu Wolipira, ndiye kuti umatero ndi gulu linalake, choncho zowonongeka sizimadutsa.

Zofunikira pazochitika:

  • Kukwanira kwa data. Ndikufuna kuti chochitikacho chikhale ndi deta yokwanira kuti ithe kukonzedwa.

  • Umphumphu. Timapereka ku Zochitika-basi zotsimikizira kuti chochitikacho ndi chofanana ndipo chingathe kuchikonza.
  • Dongosolo ndilofunika. Pankhani yobwerera, timakakamizika kugwira ntchito ndi mbiri yakale. Ndi zidziwitso, dongosolo silofunika, ngati ali zidziwitso homogeneous, imelo adzakhala chimodzimodzi mosasamala kanthu kuti dongosolo linafika poyamba. Pankhani yobweza ndalama, pali njira yomveka bwino; ngati tisintha dongosolo, kupatulapo, kubwezeredwa sikungapangidwe kapena kukonzedwa - tidzakhala m'malo ena.
  • Kusasinthasintha. Tili ndi sitolo, ndipo tsopano tikupanga zochitika m'malo mwa API. Tikufuna njira yotumizira mwachangu komanso motsika mtengo zambiri za zochitika zatsopano ndi zosintha ku zomwe zilipo kale ku mautumiki athu. Izi zimatheka kudzera m'mafotokozedwe wamba m'malo osiyanasiyana a git ndi ma code jenereta. Choncho, makasitomala ndi maseva mu mautumiki osiyanasiyana amagwirizanitsidwa.

Kafka ku Lamoda

Tili ndi makhazikitsidwe atatu a Kafka:

  1. matabwa;
  2. R&D;
  3. Zochitika-basi.

Lero tikukamba za mfundo yotsiriza yokha. Pazochitika-mabasi, tilibe makhazikitsidwe akulu kwambiri - ma broker 3 (maseva) ndi mitu 27 yokha. Monga lamulo, mutu umodzi ndi ndondomeko imodzi. Koma iyi ndi mfundo yobisika, ndipo tikhudzapo tsopano.

Dziwani zambiri pakupanga ntchito ya Refund Tool ndi API ya asynchronous pa Kafka

Pamwambapa pali graph ya rps. Njira yobweza ndalama imayikidwa ndi mzere wa turquoise (inde, womwe uli pa X axis), ndipo mzere wa pinki ndi njira yosinthira zinthu.

Kabukhu la Lamoda lili ndi zinthu zambirimbiri, ndipo zambiri zimasinthidwa nthawi zonse. Zosonkhanitsidwa zina zimachoka m'mafashoni, zatsopano zimatulutsidwa kuti zilowe m'malo mwake, ndipo zitsanzo zatsopano zimawonekera nthawi zonse m'ndandanda. Timayesa kulosera zomwe zidzasangalatse makasitomala athu mawa, kotero timagula zinthu zatsopano nthawi zonse, kuzijambula ndikusintha mawonekedwe owonetsera.

Nsonga za pinki ndizosintha zamalonda, ndiye kuti, kusintha kwazinthu. Zitha kuwoneka kuti anyamatawo adatenga zithunzi, kujambula, ndiyeno kachiwiri! - adadzaza paketi ya zochitika.

Zochitika za Lamoda zimagwiritsa ntchito milandu

Timagwiritsa ntchito zomanga zomwe zidapangidwa pazinthu zotsatirazi:

  • Bweretsani kutsatira: kuyitanira kuchitapo kanthu ndikutsata mbiri kuchokera pamakina onse okhudzidwa. Malipiro, masitayilo, ndalama, zidziwitso. Apa tinayesa njira, kupanga zida, kusonkhanitsa nsikidzi zonse, kulemba zolemba ndikuwuza anzathu momwe angagwiritsire ntchito.
  • Kusintha makadi azinthu: kasinthidwe, meta-data, mawonekedwe. Dongosolo limodzi limawerenga (lomwe likuwonetsa), ndikulemba zingapo.
  • Imelo, kukankha ndi sms: dongosolo lasonkhanitsidwa, dongosolo lafika, kubwerera kwalandiridwa, etc., pali zambiri.
  • Stock, kukonzanso nyumba yosungiramo zinthu - kusinthika kwachulukidwe kwazinthu, manambala okha: kufika kumalo osungira, kubwerera. Ndikofunikira kuti machitidwe onse okhudzana ndi kusunga katundu agwire ntchito ndi deta yamakono. Pakadali pano, makina osinthira masheya ndi ovuta kwambiri; Kafka ipangitsa kuti izi zikhale zosavuta.
  • Kusanthula Deta (R&D dipatimenti), zida za ML, analytics, ziwerengero. Tikufuna kuti chidziwitso chikhale chowonekera - Kafka ndiyoyenera izi.

Tsopano gawo losangalatsa kwambiri la mabampu akulu ndi zopeka zosangalatsa zomwe zachitika m'miyezi isanu ndi umodzi yapitayo.

Mavuto opangira

Tinene kuti tikufuna kuchita chinthu chatsopano - mwachitsanzo, kusamutsa njira yonse yobweretsera ku Kafka. Tsopano gawo la ndondomekoyi likugwiritsidwa ntchito mu Order Processing mu BOB. Pali chitsanzo chazomwe zimayambitsa kusamutsidwa kwa oda ku ntchito yobweretsera, kusuntha kupita ku nyumba yosungiramo zinthu zapakati, ndi zina zotero. Pali monolith yonse, ngakhale ziwiri, kuphatikiza gulu la ma API odzipereka kuti apereke. Amadziwa zambiri zokhudza kutumiza.

Izi zikuwoneka ngati madera ofanana, koma Order Processing mu BOB ndi Shipping System ili ndi magawo osiyanasiyana. Mwachitsanzo, mautumiki ena otengera makalata satumiza masitayilo apakatikati, koma omaliza okha: "operekedwa" kapena "otayika". Ena, m'malo mwake, amafotokoza mwatsatanetsatane za kayendedwe ka katundu. Aliyense ali ndi malamulo ake ovomerezeka: kwa ena, imelo ndi yovomerezeka, zomwe zikutanthauza kuti idzakonzedwa; kwa ena sizomveka, koma dongosololi lidzakonzedwabe chifukwa pali nambala yafoni yolumikizirana, ndipo wina anganene kuti dongosololi silingasinthidwe nkomwe.

Mtsinje wa data

Pankhani ya Kafka, funso lokonzekera kayendedwe ka deta likutuluka. Ntchitoyi ikuphatikiza kusankha njira yotengera mfundo zingapo; tiyeni tidutse zonsezo.

Mumutu umodzi kapena wina?

Tili ndi tsatanetsatane wa zochitika. Mu BOB timalemba kuti dongosolo lotere ndi loti liyenera kuperekedwa, ndikuwonetsa: nambala yoyitanitsa, kapangidwe kake, ma SKU ena ndi ma bar code, ndi zina zambiri. Katunduyo akafika kumalo osungiramo katundu, zobweretsazo zitha kulandira zikalata, masitampu anthawi ndi chilichonse chomwe chikufunika. Koma ndiye tikufuna kulandira zosintha pa data iyi ku BOB. Tili ndi njira yobwereranso kulandila deta kuchokera pakutumiza. Kodi ichi ndi chochitika chomwecho? Kapena kodi uku ndikusinthana kwina komwe kuli koyenera mutu wake?

Mwinamwake, iwo adzakhala ofanana kwambiri, ndipo chiyeso chopanga mutu umodzi sichinali chopanda pake, chifukwa mutu wosiyana umatanthauza ogula osiyana, makonzedwe osiyana, mbadwo wosiyana wa zonsezi. Koma osati zoona.

Gawo latsopano kapena chochitika chatsopano?

Koma ngati mugwiritsa ntchito zochitika zomwezo, ndiye kuti pali vuto lina. Mwachitsanzo, sizinthu zonse zobweretsera zomwe zingathe kupanga mtundu wa DTO womwe BOB angapange. Timawatumizira chizindikiritso, koma samachisunga chifukwa sachifuna, ndipo poyambira njira ya basi, gawoli likufunika.

Ngati tiyambitsa lamulo la zochitika-basi kuti gawo ili likufunika, ndiye kuti timakakamizika kukhazikitsa malamulo ovomerezeka owonjezera mu BOB kapena poyambira zochitika. Kutsimikizika kumayamba kufalikira muutumiki wonse - izi sizothandiza kwambiri.

Vuto lina ndilo kuyesedwa kwa chitukuko chowonjezereka. Timauzidwa kuti chinachake chiyenera kuwonjezeredwa ku chochitikacho, ndipo mwinamwake, ngati tilingalira za icho, chiyenera kukhala chochitika chosiyana. Koma mu dongosolo lathu, chochitika china ndi mutu wosiyana. Mutu wosiyana ndi njira yonse yomwe ndafotokoza pamwambapa. Wopanga mapulogalamu amayesedwa kuti angowonjezera gawo lina ku schema ya JSON ndikuyipanganso.

Pankhani yobweza ndalama, tidafika pazomwe zidachitika mu theka la chaka. Tidakhala ndi chochitika chimodzi chotchedwa refund update, chomwe chinali ndi mtundu wofotokozera chomwe kusinthaku kunali. Chifukwa cha izi, tinali ndi masinthidwe "odabwitsa" ndi ovomerezeka omwe adatiuza momwe tingatsimikizire chochitika ichi ndi mtundu uwu.

Kusintha kwa zochitika

Kuti mutsimikizire mauthenga ku Kafka mungagwiritse ntchito yuro, koma kunali kofunikira kuti nthawi yomweyo agonepo ndikugwiritsa ntchito Confluent. Kwa ife, tiyenera kusamala ndi kumasulira. Sizidzakhala zotheka nthawi zonse kuti muwerengenso mauthenga kuchokera ku chipika chobwereza chifukwa chitsanzocho "chachoka". M'malo mwake, zimatheka kupanga masinthidwe kuti mtunduwo ukhale wogwirizana kumbuyo: mwachitsanzo, pangani gawo kwakanthawi. Ngati kusiyana kuli kolimba kwambiri, timayamba kulemba mutu watsopano, ndikusamutsa makasitomala akamaliza kuwerenga wakale.

Kuwerengedwa kotsimikizika kwa magawo

Mitu mkati mwa Kafka imagawidwa m'magawo. Izi sizofunika kwambiri pamene tikupanga mabungwe ndi kusinthana, koma ndikofunikira posankha momwe tingagwiritsire ntchito ndikukulitsa.

Mwachizolowezi, mumalemba mutu umodzi ku Kafka. Mwachisawawa, gawo limodzi limagwiritsidwa ntchito, ndipo mauthenga onse pamutuwu amapitako. Ndipo wogula amawerenga mauthengawa motsatizana. Tinene tsopano tikufunika kukulitsa dongosolo kuti mauthenga awerengedwe ndi ogula awiri osiyana. Ngati, mwachitsanzo, mukutumiza SMS, ndiye kuti mutha kuwuza Kafka kuti apange magawo owonjezera, ndipo Kafka ayamba kugawa mauthengawo m'magawo awiri - theka apa, theka apa.

Kodi Kafka amawagawa bwanji? Uthenga uliwonse uli ndi thupi (momwe timasungira JSON) ndi kiyi. Mutha kuphatikizira ntchito ya hashi ku kiyi iyi, yomwe ingatsimikizire gawo lomwe uthengawo udzalowa.

Pankhani yathu ndi kubwezeredwa, izi ndizofunikira, ngati titenga magawo awiri, ndiye kuti pali mwayi woti wogula wofananira adzakonza chochitika chachiwiri chisanachitike ndipo padzakhala vuto. Ntchito ya hashi imatsimikizira kuti mauthenga omwe ali ndi kiyi yomweyo amatha kugawa komweko.

Zochitika vs malamulo

Ili ndi vuto lina lomwe tidakumana nalo. Chochitika ndi chochitika china: timanena kuti chinachake chinachitika kwinakwake (china_chachitika), mwachitsanzo, chinthu chinaletsedwa kapena kubwezeredwa kwachitika. Ngati wina amvetsera zochitikazi, ndiye kuti "chinthu chaletsedwa," bungwe lobwezera lidzapangidwa, ndipo "kubweza ndalama" kudzalembedwa penapake muzokhazikitsira.

Koma nthawi zambiri, mukamapanga zochitika, simukufuna kuzilemba pachabe - mumadalira kuti wina aziwerenga. Pali chiyeso chachikulu cholemba osati china_chachitika (chinthu_chachotsedwa, kubwezeredwa_kubwezeredwa), koma china_choyenera_chichitike. Mwachitsanzo, chinthu chakonzeka kubwezedwa.

Kumbali ina, imasonyeza mmene chochitikacho chidzagwiritsidwire ntchito. Kumbali inayi, zimamveka zocheperako ngati dzina lachidziwitso. Kupatula apo, sikuli kutali ndi pano kupita ku lamulo la do_chinachake. Koma mulibe chitsimikizo kuti wina anawerenga chochitika ichi; ndipo ngati mukuwerenga, ndiye kuti mukuwerenga bwino; ndipo ngati munaliwerenga bwino, ndiye kuti munachitapo kanthu, ndipo kuti chinachake chinapambana. Nthawi yomwe chochitika chikhala do_chinachake, mayankho amakhala ofunikira, ndipo ndiye vuto.

Dziwani zambiri pakupanga ntchito ya Refund Tool ndi API ya asynchronous pa Kafka

Mu kusinthana kwa asynchronous mu RabbitMQ, mukamawerenga uthengawo, pitani ku http, muli ndi yankho - osachepera kuti uthengawo unalandiridwa. Mukalembera Kafka, pali uthenga womwe mudalembera Kafka, koma simukudziwa kalikonse za momwe idakonzedwa.

Choncho, kwa ife, tinayenera kuwonetsa zochitika zoyankhira ndikukhazikitsa zowunikira kuti ngati zochitika zambiri zatumizidwa, pambuyo pa nthawi yotereyi chiwerengero chofanana cha mayankho chiyenera kufika. Ngati izi sizichitika, ndiye kuti chinachake chalakwika. Mwachitsanzo, ngati tidatumiza chochitika cha "item_ready_to_refund", tikuyembekeza kuti kubwezeredwa kupangidwa, ndalama zidzabwezeredwa kwa kasitomala, ndipo chochitika cha "money_refunds" chidzatumizidwa kwa ife. Koma izi sizotsimikizika, kotero kuyang'anira ndikofunikira.

Masewera

Pali vuto lodziwikiratu: ngati muwerenga kuchokera pamutu motsatizana, ndipo muli ndi uthenga woyipa, wogula adzagwa, ndipo simudzapitirira. Muyenera kuyimitsa ogula onse, pitilizani kuwerenga.

Ife tinazidziwa izo, ife tinazidalira izo, ndipo komabe izo zinachitika. Ndipo izi zinachitika chifukwa chochitikacho chinali chovomerezeka kuchokera ku zochitika-basi, chochitikacho chinali chovomerezeka kuchokera pakuwona kwa wovomerezeka wa ntchito, koma sizinali zovomerezeka kuchokera ku PostgreSQL, chifukwa mu dongosolo lathu MySQL. ndi UNSIGNED INT dongosolo linali ndi PostgreSQL ndi INT. Kukula kwake ndikocheperako, ndipo Id sinakwane. Symfony anamwalira kupatulapo. Ife, zachidziwikire, tidachita izi chifukwa tidadalira izi, ndipo timachita izi, koma izi zisanachitike tinkafuna kukulitsa zovuta, popeza uthengawo sunayende bwino. Zowerengera mu polojekitiyi zilinso m'dawunilodi, ndipo Symfony yatseka kale kulumikizana ndi database, ndipo chachiwiri chinapha njira yonseyo popanda mwayi woti achite.

Ntchitoyi idagona kwakanthawi - mwamwayi, ndi Kafka izi sizoyipa kwambiri, chifukwa mauthenga amakhalabe. Ntchito ikabwezeretsedwa, mutha kumaliza kuwawerenga. Ndi bwino.

Kafka ali ndi kuthekera kokhazikitsa njira yosasinthika pogwiritsa ntchito zida. Koma kuti muchite izi, muyenera kuyimitsa ogula onse - kwa ife, konzani kumasulidwa kosiyana komwe sikudzakhalanso ogula, kutumizidwanso. Kenako ku Kafka mutha kusintha zosinthira pogwiritsa ntchito zida, ndipo uthengawo udzadutsa.

Chinthu chinanso - chipika chobwereza vs rdkafka.so - zikugwirizana ndi zenizeni za polojekiti yathu. Timagwiritsa ntchito PHP, ndipo mu PHP, monga lamulo, malaibulale onse amalankhulana ndi Kafka kupyolera mu rdkafka.so repository, ndiyeno pali mtundu wina wa wrapper. Mwina izi ndizovuta zathu, koma zidapezeka kuti kungowerenganso gawo la zomwe tawerenga kale sikophweka. Kawirikawiri, panali mavuto a mapulogalamu.

Kubwerera ku zenizeni za kugwira ntchito ndi magawo, zalembedwa muzolemba ogula > = magawo a mutu. Koma ndinazidziwa mochedwa kwambiri kuposa momwe ndikanafunira. Ngati mukufuna kukulitsa ndikukhala ndi ogula awiri, muyenera magawo awiri. Ndiko kuti, ngati mutakhala ndi gawo limodzi lomwe mauthenga 20 zikwizikwi adasonkhanitsa, ndipo mwapanga yatsopano, chiwerengero cha mauthenga sichidzafanana posachedwa. Chifukwa chake, kuti mukhale ndi ogula awiri ofanana, muyenera kuthana ndi magawo.

Kuwunikira

Ndikuganiza momwe timayang'anira zikuwonekeratu kuti pali zovuta ziti munjira yomwe ilipo.

Mwachitsanzo, timawerengera kuchuluka kwa zinthu zomwe zili mu database zomwe zasintha posachedwa, ndipo, molingana ndi izi, zochitika ziyenera kuchitika kutengera kusinthaku, ndipo timatumiza nambala iyi kumayendedwe athu owunikira. Ndiye kuchokera ku Kafka timapeza nambala yachiwiri, ndi zochitika zingati zomwe zinalembedwadi. Mwachiwonekere, kusiyana pakati pa manambala awiriwa kuyenera kukhala ziro nthawi zonse.

Dziwani zambiri pakupanga ntchito ya Refund Tool ndi API ya asynchronous pa Kafka

Kuphatikiza apo, muyenera kuyang'anira momwe wopanga akuchitira, kaya zochitika-mauthenga a basi, ndi momwe ogula akuchitira. Mwachitsanzo, mumatchati omwe ali pansipa, Chida Chobwezera chikuyenda bwino, koma BOB ali ndi zovuta zina (nsonga zabuluu).

Dziwani zambiri pakupanga ntchito ya Refund Tool ndi API ya asynchronous pa Kafka

Ndatchula kale kuchedwa kwa gulu la ogula. Mwachidule, ichi ndi chiwerengero cha mauthenga omwe sanawerenge. Kawirikawiri, ogula athu amagwira ntchito mofulumira, kotero kuti kutsalira kumakhala 0, koma nthawi zina pakhoza kukhala nsonga yaifupi. Kafka akhoza kuchita izi kunja kwa bokosi, koma muyenera kukhazikitsa nthawi ina.

Pali polojekiti Burrowzomwe zingakupatseni zambiri za Kafka. Imangogwiritsa ntchito API ya gulu la ogula kuti iwonetse momwe gululi likuchitira. Kuphatikiza pa OK ndi Zolephera, pali chenjezo, ndipo mutha kudziwa kuti ogula anu sangathe kulimbana ndi liwiro la kupanga - alibe nthawi yowerengera zomwe zalembedwa. Dongosololi ndi lanzeru komanso losavuta kugwiritsa ntchito.

Dziwani zambiri pakupanga ntchito ya Refund Tool ndi API ya asynchronous pa Kafka

Izi ndi zomwe kuyankha kwa API kumawoneka. Nali gulu bob-live-fifa, partition refund.update.v1, status OK, lag 0 - komaliza komaliza motere.

Dziwani zambiri pakupanga ntchito ya Refund Tool ndi API ya asynchronous pa Kafka

Kuwunikira kusinthidwa_pa SLA (yokakamira) Ndatchula kale. Mwachitsanzo, katunduyo wasintha kuti akhale wokonzeka kubwereranso. Timayika Cron, yomwe imati ngati mu maminiti a 5 chinthu ichi sichinapite kubwezeredwa (timabwezera ndalama kudzera mu machitidwe olipira mofulumira kwambiri), ndiye kuti chinachake chinalakwika, ndipo izi ndizochitika zothandizira. Chifukwa chake, timangotenga Cron, yomwe imawerenga zinthu zotere, ndipo ngati zili zazikulu kuposa 0, ndiye zimatumiza chenjezo.

Kufotokozera mwachidule, kugwiritsa ntchito zochitika ndizosavuta pamene:

  • zambiri zimafunika machitidwe angapo;
  • zotsatira za processing si zofunika;
  • pali zochitika zochepa kapena zazing'ono.

Zikuwoneka kuti nkhaniyi ili ndi mutu wapadera kwambiri - API ya asynchronous pa Kafka, koma mokhudzana ndi izo ndikufuna kulangiza zinthu zambiri nthawi imodzi.
Choyamba, chotsatira Kuthamanga Kwambiri ++ Tiyenera kuyembekezera mpaka November, mu April padzakhala Baibulo la St. Petersburg, ndipo mu June tidzakambirana za katundu wapamwamba ku Novosibirsk.
Kachiwiri, wolemba lipoti, Sergei Zaika, ndi membala wa Komiti ya Pulogalamu ya msonkhano wathu watsopano wokhudza kasamalidwe ka chidziwitso. KnowledgeConf. Msonkhanowu ndi wa tsiku limodzi, udzachitika pa Epulo 26, koma pulogalamu yake ndiyamphamvu kwambiri.
Ndipo zikhala mu Meyi PHP Russia ΠΈ RIT++ (ndi DevOpsConf ikuphatikizidwa) - muthanso kupereka lingaliro la mutu wanu pamenepo, lankhulani zomwe mwakumana nazo ndikudandaula za ma cones omwe mwadzaza.

Source: www.habr.com

Kuwonjezera ndemanga