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.
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.
Zolimbikitsa zathu:
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.
BOB kugawanika ndi pulojekiti yamkati ya kampani kuti athetse BOB ku chiwerengero chachikulu cha maudindo osakhala apakati ndikuchepetsa zovuta zake zonse.
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:
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.
Pempho lazachuma likutha.
Zotsatira zake, tidapanga basi yamtundu wina ku Kafka - basi-basi, pomwe zonse zidayamba. Hurray, tsopano tili ndi mfundo imodzi yolephera (zonyoza).
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.
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.
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.
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.
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.
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.
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.
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:
matabwa;
R&D;
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.
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.
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?
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.
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.
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).
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.
Izi ndi zomwe kuyankha kwa API kumawoneka. Nali gulu bob-live-fifa, partition refund.update.v1, status OK, lag 0 - komaliza komaliza motere.
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.