ʻO ka ʻike i ka hoʻomohala ʻana i ka lawelawe Refund Tool me kahi API asynchronous ma Kafka
He aha ka mea hiki ke hoʻoikaika i kahi hui nui e like me Lamoda, me kahi kaʻina hana maʻalahi a me ka nui o nā lawelawe pili, e hoʻololi nui i kona ala? Hiki ke ʻokoʻa loa ka hoʻoikaika ʻana: mai ka ʻaha kānāwai a hiki i ka makemake e hoʻokolohua i loko o nā mea papahana āpau.
Akā ʻaʻole kēia manaʻo ʻaʻole hiki iā ʻoe ke helu i nā pono hou aʻe. E haʻi aku ʻo Sergey Zaika iā ʻoe i ka mea hiki iā ʻoe ke lanakila inā hoʻokō ʻoe i ka API i alakaʻi ʻia i nā hanana ma Kafka (kakaikahi). E kamaʻilio pū kekahi e pili ana i nā kiʻi nui a me nā ʻike hoihoi - ʻaʻole hiki i ka hoʻokolohua ke hana me ka ʻole o lākou.
Hoʻokuʻu: Hoʻokumu ʻia kēia ʻatikala ma nā mea mai kahi hui i mālama ʻia e Sergey ma Nowemapa 2018 ma HighLoad ++. ʻO ka ʻike ola o Lamoda i ka hana pū ʻana me Kafka i hoʻokipa i ka poʻe hoʻolohe ʻaʻole i emi iho ma mua o nā hōʻike ʻē aʻe ma ka papa kuhikuhi. Manaʻo mākou he hiʻohiʻona maikaʻi loa kēia o ka ʻoiaʻiʻo hiki iā ʻoe ke ʻike i nā poʻe like like, a e hoʻomau nā mea hoʻonohonoho o HighLoad ++ e hoʻokumu i kahi lewa kūpono i kēia.
E pili ana i ke kaʻina hana
ʻO Lamoda kahi papahana e-commerce nui nona kāna kikowaena pili ponoʻī, lawelawe hoʻouna (a me nā hui he nui), kahi hale kiʻi kiʻi, kahi hale kūʻai nui, a holo kēia mau mea a pau ma kāna polokalamu ponoʻī. Nui nā ʻano uku, nā hoa b2b e hoʻohana i kekahi a i ʻole nā lawelawe āpau a makemake e ʻike i ka ʻike hou i kā lākou huahana. Eia kekahi, hana ʻo Lamoda i ʻekolu mau ʻāina ma waho o ka Russian Federation a ʻokoʻa iki nā mea āpau ma laila. ʻO ka nui, aia paha ma mua o hoʻokahi haneli mau ala e hoʻonohonoho ai i kahi kauoha hou, pono e hana ʻia ma kāna ala ponoʻī. Ke hana nei kēia mau mea me ke kōkua o nā lawelawe he nui i kekahi manawa e kamaʻilio ma nā ʻano ʻike ʻole. Aia kekahi ʻōnaehana kikowaena nona ke kuleana nui o nā statuses kauoha. Kapa mākou iā ia ʻo BOB, hana wau me ia.
Mea Hana Hoʻihoʻi me ka API i alakaʻi ʻia i nā hanana
ʻO ka huaʻōlelo e alakaʻi ʻia e nā hanana he hackneyed; ʻoi aku ka liʻiliʻi e wehewehe mākou i nā kikoʻī i ke ʻano o kēia. E hoʻomaka wau me ka pōʻaiapili a mākou i hoʻoholo ai e hoʻāʻo i ke ala API i alakaʻi ʻia i nā hanana ma Kafka.
Ma kēlā me kēia hale kūʻai, ma waho aʻe o nā kauoha e uku ai nā mea kūʻai aku, aia kekahi mau manawa i koi ʻia ka hale kūʻai e hoʻihoʻi kālā no ka mea ʻaʻole kūpono ka huahana i ka mea kūʻai. He hana pōkole kēia: wehewehe mākou i ka ʻike, inā pono, a hoʻoili i ke kālā.
Akā ʻoi aku ka paʻakikī o ka hoʻihoʻi ʻana ma muli o nā loli i ke kānāwai, a pono mākou e hoʻokō i kahi microservice kaʻawale no ia.
ʻO kā mākou hoʻoikaika:
Kānāwai FZ-54 - i ka pōkole, koi ke kānāwai e hōʻike i ke keʻena ʻauhau e pili ana i kēlā me kēia hana kālā, ʻo ia ka hoʻihoʻi a i ʻole ka loaʻa ʻana, i loko o kahi SLA pōkole o kekahi mau minuke. ʻO mākou, ma ke ʻano he hui e-commerce, ke hana nei i nā hana he nui. ʻO ka ʻenehana, ʻo ia ke kuleana hou (a no laila he lawelawe hou) a me nā hoʻomaikaʻi ʻana i nā ʻōnaehana pili.
Māhele ʻo BOB he papahana kūloko o ka hui e hoʻokuʻu iā BOB mai ka nui o nā kuleana kumu ʻole a hoʻemi i kona paʻakikī holoʻokoʻa.
Hōʻike kēia kiʻi i nā ʻōnaehana Lamoda nui. I kēia manawa ʻoi aku ka nui o lākou he hui o 5-10 microservices a puni ka monolith emi. Ke ulu mālie nei lākou, akā ke hoʻāʻo nei mākou e liʻiliʻi iā lākou, no ka mea, ʻo ka hoʻopili ʻana i ka ʻāpana i koho ʻia ma waena he mea weliweli - ʻaʻole hiki iā mākou ke ʻae e hāʻule. Ke koi ʻia nei mākou e mālama i nā hoʻololi āpau (nā pua) a noʻonoʻo i ka ʻoiaʻiʻo i hiki ʻole i kekahi o lākou ke loaʻa ʻole.
He nui nā hoʻololi ʻana o BOB: nā ʻōnaehana uku, nā ʻōnaehana hoʻouna, nā ʻōnaehana hoʻolaha, etc.
ʻO ka BOB ʻenehana:
~150k laina o ke code + ~100k laina o nā ho'āʻo;
php7.2 + Zend 1 & Nā ʻāpana Symfony 3;
>100 API & ~50 hoʻohui i waho;
4 mau ʻāina me kā lākou ʻoihana ponoʻī.
He kumukūʻai a ʻeha ka hoʻohana ʻana iā BOB, ʻo ka nui o nā code a me nā pilikia e hoʻoponopono ai ʻaʻole hiki i kekahi ke hoʻokomo i nā mea āpau i ko lākou poʻo. Ma keʻano laulā, nui nā kumu e maʻalahi ai.
Kaʻina Hoʻihoʻi
I ka hoʻomakaʻana,ʻelua pūnaewele i komo i ke kaʻina hana: BOB a me ka uku. I kēia manawa ua ʻike ʻia ʻelua hou:
ʻO ka Fiscalization Service, nāna e mālama i nā pilikia me ka fiscalization a me ke kamaʻilio ʻana me nā lawelawe o waho.
Mea Hana Hoʻihoʻi, aia wale nō nā hoʻololi hou i ʻole e hoʻonui i ka BOB.
I kēia manawa ua like ke kaʻina hana:
Loaʻa iā BOB kahi noi no ka uku.
Kūkākūkā ʻo BOB e pili ana i kēia Mea Hana Hoʻihoʻi.
Hōʻike ka mea hoʻihoʻi i ka uku: "E hoʻihoʻi i ke kālā."
Hoʻihoʻi ka uku i ke kālā.
Hoʻopili ʻo Refund Tool a me BOB i nā statuses me kekahi, no ka mea i kēia manawa pono lāua ʻelua. ʻAʻole mākou i mākaukau e hoʻololi piha i ka Mea Hana Hoʻihoʻi, no ka mea he UI ko BOB, nā hōʻike no ka helu helu, a ma ka laulā he nui nā ʻikepili hiki ʻole ke hoʻololi maʻalahi. Pono ʻoe e noho ma nā noho ʻelua.
Holo ka noi no ka hoʻolimalima kālā.
ʻO ka hopena, ua hana mākou i kahi ʻano kaʻa kaʻa hanana ma Kafka - kaʻa kaʻa, kahi i hoʻomaka ai nā mea āpau. Hurray, i kēia manawa ua loaʻa iā mākou hoʻokahi wahi hemahema (sarcasm).
ʻIke ʻia nā pono a me nā pōʻino. Hana mākou i kaʻa kaʻa, ʻo ia hoʻi ke hilinaʻi nei nā lawelawe āpau iā ia. Hoʻomaʻamaʻa kēia i ka hoʻolālā, akā hoʻokomo i kahi helu o ka hemahema i loko o ka ʻōnaehana. E hāʻule ʻo Kafka, pau ka hana.
Hoʻopau i nā hoʻololi asynchronous a pau ma o waihona hanana. Ma kahi o ka hoʻomaopopo ʻana i kēlā me kēia mea kūʻai makemake e pili ana i kahi hoʻololi kūlana ma luna o ka pūnaewele, kākau mākou i kahi hanana e pili ana i kahi hoʻololi kūlana i kahi waihona kikowaena, a heluhelu nā mea kūʻai i ke kumuhana i nā mea a pau i ʻike ʻia mai laila.
ʻO ka hanana i kēia hihia he hoʻolaha (nā leka hoʻomaopopo) ua loli kekahi mea ma kekahi wahi. Eia kekahi laʻana, ua hoʻololi ke kūlana kauoha. Hiki i ka mea kūʻai ke makemake i kekahi mau ʻikepili e pili ana i ka hoʻololi kūlana ʻaʻole i hoʻokomo ʻia i ka hoʻolaha e ʻike i kona kūlana iā ia iho.
ʻO ka koho kiʻekiʻe loa ʻo ia ka hanana hanana holoʻokoʻa, hoʻoili mokuʻāina, i loko o ka hanana i loaʻa nā ʻike a pau e pono ai no ka hoʻoili ʻana: mai hea mai a pehea ke kūlana i hele ai, pehea i loli ai ka ʻikepili, etc. ʻO ka nīnau wale nō ka hiki a me ka nui o ka ʻike āu e hiki ai ke mālama.
Ma ke ʻano o ka hoʻomaka ʻana o ka Mea Hana Hoʻihoʻi, ua hoʻohana mākou i ke koho ʻekolu. ʻO kēia kaʻina hana maʻalahi no ka mea ʻaʻohe pono e unuhi i ka ʻike kikoʻī, a ua hoʻopau ʻia ke ʻano o kēlā me kēia hanana hou e hoʻopuka ai i ka wehewehe ʻana i nā noi mai nā mea kūʻai aku.
Hana Mea Hana Hoʻihoʻi ʻaʻole i hoʻouka ʻia, no laila ʻoi aku ka nui o ka ʻono o ka peni ma mua o ka pono. ʻAʻole wau i manaʻo inā lilo ka lawelawe hoʻihoʻi i kahi papahana kiʻekiʻe, e hauʻoli ka ʻoihana.
Hoʻololi ʻo Async me AS IS
No nā hoʻololi asynchronous, hoʻohana maʻamau ka ʻoihana PHP iā RabbitMQ. Ua hōʻiliʻili mākou i ka ʻikepili no ka noi, hoʻokomo iā ia i kahi laina, a heluhelu ka mea kūʻai aku o ka lawelawe like a hoʻouna ʻia (a ʻaʻole hoʻouna ʻia). No ka API ponoʻī, hoʻohana ikaika ʻo Lamoda iā Swagger. Hoʻolālā mākou i kahi API, wehewehe iā ia ma Swagger, a hana i ka mea kūʻai aku a me ka code server. Hoʻohana pū mākou i kahi JSON RPC 2.0 i hoʻonui iki ʻia.
Ma kekahi mau wahi, hoʻohana ʻia nā kaʻa kaʻa ESB, ola kekahi ma activeMQ, akā, ma ka laulā, RabbitMQ - maʻamau.
Hoʻololi Async TO BE
Ke hoʻolālā ʻana i ka hoʻololi ʻana ma o ka hanana-bus, hiki ke ʻike ʻia kahi hoʻohālikelike. Ua wehewehe like mākou i ka hoʻololi ʻana o ka ʻikepili e hiki mai ana ma o ka wehewehe ʻana i ka hanana hanana. ʻO ka format yaml, pono mākou e hana i ka hanauna code iā mākou iho, hana ka mea hana i nā DTO e like me ka kikoʻī a aʻo i nā mea kūʻai aku a me nā kikowaena e hana pū me lākou. Hele ka hanauna i nā ʻōlelo ʻelua - golang a me php. Kōkua kēia i ka mālama ʻana i nā hale waihona puke. Ua kākau ʻia ka generator ma ka golang, ʻo ia ke kumu i loaʻa ai ka inoa gogi.
He mea maʻamau ka hanana-sourcing ma Kafka. Aia kahi hoʻonā mai ka mana ʻoihana nui o Kafka Confluent, aia nakadi, he hopena mai ko mākou mau kaikunāne kikowaena ʻo Zalando. ʻO kā mākou hoʻoikaika e hoʻomaka me ka vanilla Kafka - ʻo ia hoʻi ka waiho ʻole ʻana i ka hoʻonā a hiki i ka hoʻoholo hope ʻana inā e hoʻohana mākou iā ia ma nā wahi āpau, a waiho pū kekahi i kahi lumi no ka hoʻololi ʻana a me ka hoʻomaikaʻi ʻana: makemake mākou i ke kākoʻo no kā mākou ʻO JSON RPC 2.0, nā mea hana no nā ʻōlelo ʻelua a e ʻike kākou i nā mea ʻē aʻe.
He mea hoʻohenehene ʻoiai i loko o kahi hihia hauʻoli, inā loaʻa kahi ʻoihana like ʻole, ʻo Zalando, ka mea i hana i kahi hopena like ʻole, ʻaʻole hiki iā mākou ke hoʻohana pono.
ʻO ke kumu hoʻolālā i ka hoʻomaka ʻana penei: heluhelu pololei mākou mai Kafka, akā kākau wale ma o nā hanana-bus. Nui ka mākaukau no ka heluhelu ʻana ma Kafka: nā mea kūʻai aku, nā mea kaulike, a ʻoi aʻe a liʻiliʻi paha ka mākaukau no ka scaling horizontal, makemake wau e mālama i kēia. Makemake mākou e hoʻopau i ka hoʻopaʻa ʻana ma o kekahi Gateway aka Events-bus, a eia ke kumu.
Nā hanana-bus
A i ʻole kahi kaʻa kaʻa hanana. He ʻīpuka http ʻole kēia, e lawe ana i nā hana koʻikoʻi:
Hoʻopuka ʻana i ka hōʻoia - nānā mākou i nā hanana i kūpono i kā mākou kikoʻī.
Pūnaehana haku hanana, ʻo ia hoʻi, ʻo ia ka ʻōnaehana nui a hoʻokahi wale nō i ka ʻoihana e pane i ka nīnau o nā hanana me nā hale i manaʻo ʻia he kūpono. Hoʻopili wale ʻia ka hōʻoia ʻana i nā ʻano ʻikepili a me nā enum e kuhikuhi pono i ka ʻike.
Hana Hash no ka sharding - ʻo ke ʻano memo Kafka ka waiwai nui a me ka hoʻohana ʻana i ka hash o ke kī e helu ʻia ma kahi e waiho ai.
No ke aha mai
Hana mākou i kahi hui nui me kahi kaʻina hana maʻalahi. No ke aha e hoʻololi ai i kekahi mea? He hoʻokolohua kēia, a ke manaʻo nei mākou e ʻohi i nā pōmaikaʻi.
1:n+1 hoʻololi (hoʻokahi i ka nui)
Maʻalahi loa ʻo Kafka e hoʻopili i nā mea kūʻai aku i ka API.
E ʻōlelo mākou he papa kuhikuhi kāu e pono ai e hoʻomau i ka manawa i nā ʻōnaehana i ka manawa hoʻokahi (a i kekahi mau mea hou). Ma mua, ua hana mākou i kahi puʻupuʻu i hoʻokō i ka set-API, a ua hoʻomaopopo ʻia ka ʻōnaehana kumu i nā ʻōlelo a nā mea kūʻai aku. I kēia manawa, hoʻouna ka ʻōnaehana kumu i nā mea hou i ke kumuhana, a heluhelu ka poʻe hoihoi. Ua puka mai kahi ʻōnaehana hou - ua kau inoa mākou no ke kumuhana. ʻAe, pūʻolo pū kekahi, akā maʻalahi.
I ka hihia o ka hoʻihoʻi-mea hana, ʻo ia kahi ʻāpana o BOB, he mea maʻalahi iā mākou ke mālama iā lākou ma o Kafka. Ua ʻōlelo ka uku ua hoʻihoʻi ʻia ke kālā: ʻike ʻo BOB, RT e pili ana i kēia, hoʻololi i kā lākou mau kūlana, ʻike ʻo Fiscalization Service e pili ana i kēia a hāʻawi i kahi leka.
Loaʻa iā mākou nā manaʻo e hana i kahi lawelawe hoʻolaha i hui ʻia e haʻi aku i ka mea kūʻai aku e pili ana i ka nūhou e pili ana i kāna kauoha/hoʻihoʻi. I kēia manawa ua hoʻolaha ʻia kēia kuleana ma waena o nā ʻōnaehana. Ua lawa ia no mākou e aʻo i ka Service Notifications e hopu i ka ʻike pili mai Kafka a pane aku iā ia (a hoʻopau i kēia mau hoʻolaha ma nā ʻōnaehana ʻē aʻe). ʻAʻole koi ʻia nā hoʻololi pololei hou.
Hoʻokele ʻikepili
ʻIke maopopo ʻia ka ʻike ma waena o nā ʻōnaehana - ʻaʻohe mea i loaʻa iā ʻoe ka "ʻoihana koko" a me ka nui o kāu backlog. Loaʻa iā Lamoda kahi keʻena ʻikepili ʻikepili e hōʻiliʻili i nā ʻikepili mai nā ʻōnaehana a hoʻokomo iā ia i kahi ʻano hoʻohana hou, no ka ʻoihana a no nā ʻōnaehana naʻauao. Hāʻawi ʻo Kafka iā ʻoe e hāʻawi koke iā lākou i nā ʻikepili he nui a mālama i kēlā kahe ʻike i kēia lā.
Palapala hoʻopili
ʻAʻole nalo nā memo ma hope o ka heluhelu ʻana, e like me ka RabbitMQ. Ke lawa ka ʻike no ka hana ʻana i kahi hanana, loaʻa iā mākou kahi moʻolelo o nā loli hou i ka mea, a inā makemake ʻia, hiki ke hoʻohana i kēia mau loli.
ʻO ka manawa mālama o ka log replication e pili ana i ka ikaika o ke kākau ʻana i kēia kumuhana; ʻAe ʻo Kafka iā ʻoe e hoʻonohonoho maʻalahi i nā palena o ka manawa mālama a me ka nui o ka ʻikepili. No nā kumuhana koʻikoʻi, he mea nui e loaʻa i nā mea kūʻai aku ka manawa e heluhelu ai i ka ʻike ma mua o ka nalo ʻana, ʻoiai i ka wā pōkole. Hiki ke mālama i ka ʻikepili no nā ʻāpana o nā lā, i lawa pono no ke kākoʻo.
A laila, haʻi hou i ka palapala, no ka poʻe i kamaʻāina ʻole iā Kafka (mai ka palapala hoʻi ke kiʻi)
He mau pila kā AMQP: kākau mākou i nā leka i kahi pila no ka mea kūʻai. ʻO ka maʻamau, hoʻohana ʻia kahi queue e hoʻokahi ʻōnaehana me ka loiloi ʻoihana like. Inā pono ʻoe e hoʻomaopopo i kekahi mau ʻōnaehana, hiki iā ʻoe ke aʻo i ka palapala noi e kākau i kekahi mau queues a i ʻole e hoʻonohonoho i ka hoʻololi ʻana me ka mīkini fanout, nāna e hoʻopaʻa iā lākou iho.
Loaʻa iā Kafka kahi abstraction like Kumuhana, kahi āu e kākau ai i nā memo, akā ʻaʻole nalo ma hope o ka heluhelu ʻana. Ma ka maʻamau, ke hoʻopili ʻoe iā Kafka, loaʻa iā ʻoe nā memo āpau a loaʻa iā ʻoe ke koho e mālama i kahi āu i haʻalele ai. ʻO ia hoʻi, heluhelu pū ʻoe, ʻaʻole paha ʻoe e kaha i ka memo e like me ka heluhelu ʻana, akā e mālama i ka id e hiki ai iā ʻoe ke hoʻomau i ka heluhelu. ʻO ka Id āu i hoʻonoho ai, ua kapa ʻia ʻo offset, a ʻo ke ʻano hana ke hoʻopaʻa ʻia.
No laila, hiki ke hoʻokō ʻia nā loina like ʻole. No ka laʻana, loaʻa iā mākou BOB i nā manawa 4 no nā ʻāina like ʻole - aia ʻo Lamoda ma Russia, Kazakhstan, Ukraine, Belarus. No ka mea ua hoʻokaʻawale ʻia lākou, loaʻa iā lākou nā configs ʻokoʻa a me kā lākou ʻoihana ponoʻī. Hōʻike mākou ma ka leka i ka ʻāina e pili ana. Heluhelu ʻia kēlā me kēia mea kūʻai aku BOB ma kēlā me kēia ʻāina me kahi groupId ʻokoʻa, a inā ʻaʻole pili ka leka iā lākou, lele lākou, ʻo ia. hana koke ia offset +1. Inā heluhelu ʻia ke kumuhana like e kā mākou uku uku, a laila hana ia me kahi hui ʻokoʻa, a no laila ʻaʻole i hui ʻia nā offsets.
Nā koi hanana:
Paʻa ʻikepili. Makemake au e lawa ka ʻikepili i ka hanana i hiki ke hana ʻia.
Pono pono. Hāʻawi mākou iā Events-bus i ka hōʻoia ʻana ua kūlike ka hanana a hiki iā ia ke hana.
He mea nui ke kauoha. I ka hihia o ka hoʻi ʻana, koi ʻia mākou e hana me ka mōʻaukala. Me nā leka hoʻomaopopo, ʻaʻole koʻikoʻi ke kauoha, inā he mau hoʻolaha homogeneous lākou, e like ka leka uila me ka nānā ʻole i ke kauoha i hiki mua. I ka hihia o ka hoʻihoʻi ʻana, aia kahi kaʻina hana; inā mākou e hoʻololi i ke kauoha, e kū mai nā ʻokoʻa, ʻaʻole e hana ʻia ka hoʻihoʻi kālā - e pau mākou i kahi kūlana ʻē aʻe.
Kūlike. He hale kūʻai mākou, a i kēia manawa hana mākou i nā hanana ma kahi o kahi API. Pono mākou i ala e hoʻouna wikiwiki a maʻalahi i ka ʻike e pili ana i nā hanana hou a me nā loli i nā mea i loaʻa i kā mākou lawelawe. Loaʻa kēia ma o kahi kikoʻī maʻamau i kahi waihona git kaʻawale a me nā mea hana code. No laila, hoʻonohonoho ʻia nā mea kūʻai aku a me nā kikowaena i nā lawelawe like ʻole.
Kafka ma Lamoda
Loaʻa iā mākou ʻekolu mau hoʻonohonoho Kafka:
Nā moʻolelo;
R&D;
Nā hanana-bus.
I kēia lā mākou e kamaʻilio nei e pili ana i ka helu hope. I nā hanana-bus, ʻaʻohe o mākou hoʻonohonoho nui loa - 3 brokers (servers) a he 27 mau kumuhana wale nō. E like me ke kānāwai, hoʻokahi kumuhana hoʻokahi kaʻina hana. Akā he mea maʻalahi kēia, a e hoʻopili mākou iā ia i kēia manawa.
Aia ma luna ka pakuhi rps. Hōʻailona ʻia ke kaʻina hana hoʻihoʻi me kahi laina turquoise (ʻae, ka mea ma ke axis X), a ʻo ka laina ʻulaʻula ke kaʻina hana hou.
Loaʻa i ka palapala Lamoda nā miliona o nā huahana, a ua hoʻonui ʻia ka ʻikepili i nā manawa āpau. Ke hele nei kekahi mau hōʻiliʻili i waho o ke ʻano, hoʻokuʻu ʻia nā mea hou e pani iā lākou, a ʻike mau ʻia nā hiʻohiʻona hou i ka papa inoa. Ke hoʻāʻo nei mākou e wānana i ka mea e hoihoi ai i kā mākou mea kūʻai aku i ka lā ʻapōpō, no laila ke kūʻai mau nei mākou i nā mea hou, kiʻi iā lākou a hoʻonui i ka pahu hōʻike.
ʻO nā peaks ʻulaʻula nā mea hou huahana, ʻo ia hoʻi, nā loli i nā huahana. Hiki ke ʻike ʻia ua kiʻi nā kāne, paʻi kiʻi, a laila hou! - hoʻouka i kahi pūʻulu hanana.
Hoʻohana nā Lamoda Events i nā hihia
Hoʻohana mākou i ka hale hana i kūkulu ʻia no kēia mau hana:
Hoʻihoʻi kūlana ʻimi: kahea-i-hana a me ka huli kūlana mai nā ʻōnaehana pili. Uku, statuses, fiscalization, hoʻolaha. Maanei mākou i hoʻāʻo ai i ke ala, hana i nā mea hana, hōʻiliʻili i nā pōpoki āpau, kākau i nā palapala a haʻi i kā mākou mau hoa pehea e hoʻohana ai.
Ke hōʻano hou nei i nā kāleka huahana: hoʻonohonoho, meta-data, hiʻohiʻona. Hoʻokahi ʻōnaehana heluhelu (e hōʻike ana), a kākau kekahi.
E leka uila, paʻi a sms: ua ohi ia ke kauoha, ua hiki mai ke kauoha, ua loaa ka hoihoi, a pela aku, ua nui lakou.
Kahua, hoʻohou hale kūʻai - ka hoʻonui nui o nā mea, nā helu wale nō: hōʻea i ka hale kūʻai, hoʻi. Pono nā ʻōnaehana āpau e pili ana i ka mālama ʻana i nā waiwai me ka ʻikepili o kēia manawa. I kēia manawa, paʻakikī loa ka ʻōnaehana hōʻano hou; E maʻalahi ʻo Kafka.
KaʻIkepiliʻIkepili (Keʻena R&D), nā mea hana ML, nā ʻikepili, nā helu. Makemake mākou e ʻike maopopo - ua kūpono ʻo Kafka no kēia.
I kēia manawa ʻo ka ʻāpana hoihoi e pili ana i nā puʻupuʻu nui a me nā ʻike hoihoi i loaʻa i nā mahina ʻeono i hala.
Nā pilikia hoʻolālā
E ʻōlelo mākou makemake mākou e hana i kahi mea hou - no ka laʻana, e hoʻololi i ke kaʻina hana holoʻokoʻa iā Kafka. I kēia manawa ua hoʻokō ʻia kahi ʻāpana o ke kaʻina hana ma ka Order Processing ma BOB. Aia kahi hiʻohiʻona kūlana ma hope o ka hoʻoili ʻana i kahi kauoha i ka lawelawe lawe, neʻe i kahi hale kūʻai waena, a pēlā aku. Aia kahi monolith holoʻokoʻa, ʻelua ʻelua, me kahi pūʻulu o nā API i hoʻolaʻa ʻia no ka lawe ʻana. ʻIke nui lākou e pili ana i ka lawe ʻana.
Me he mea lā he mau wahi like kēia, akā he mau statuses ʻokoʻa ka Order Processing in BOB a me ka System Shipping. No ka laʻana, ʻaʻole hoʻouna kekahi mau lawelawe ʻelele i nā statuses waena, akā ʻo nā mea hope wale nō: "hāʻawi" a "nalo". ʻO nā mea ʻē aʻe, e hōʻike i nā kikoʻī nui e pili ana i ka neʻe ʻana o nā waiwai. Loaʻa i kēlā me kēia kanaka ko lākou mau kānāwai ponoʻī: no kekahi, ua kūpono ka leka uila, ʻo ia hoʻi e hoʻoponopono ʻia; no nā mea ʻē aʻe ʻaʻole kūpono, akā e hoʻokō ʻia ke kauoha no ka mea aia kahi helu kelepona no ka hoʻopili ʻana, a e ʻōlelo kekahi ʻaʻole e hoʻokō ʻia kēlā kauoha.
kahawai ʻikepili
Ma ka hihia o Kafka, ua kū mai ka nīnau o ka hoʻonohonoho ʻana i ka kahe ʻikepili. ʻO kēia hana e pili ana i ke koho ʻana i kahi hoʻolālā e pili ana i nā helu he nui; e hele kākou ma o lākou āpau.
Ma kekahi kumuhana a i ʻole ma nā kumuhana like ʻole?
Loaʻa iā mākou kahi kikoʻī hanana. Ma BOB kākau mākou e pono e hāʻawi ʻia kēlā a me kēlā kauoha, a hōʻike: ka helu kauoha, kona haku mele ʻana, kekahi mau SKU a me nā code bar, etc. Ke hōʻea nā waiwai i ka hale kūʻai, hiki i ka lawe ʻana ke loaʻa i nā statuses, timestamp a me nā mea āpau e pono ai. Akā makemake mākou e loaʻa nā mea hou i kēia ʻikepili ma BOB. Loaʻa iā mākou kahi kaʻina hoʻohuli o ka loaʻa ʻana o ka ʻikepili mai ka lawe ʻana. ʻO kēia ka hanana like? A i ʻole he hoʻololi kaʻawale kēia i kūpono i kāna kumuhana ponoʻī?
ʻO ka mea nui, e like loa lākou, a ʻo ka hoʻowalewale e hana i hoʻokahi kumuhana ʻaʻole ia he kumu ʻole, no ka mea, ʻo ke kumuhana ʻokoʻa ke ʻano o nā mea kūʻai kaʻawale, nā configs kaʻawale, kahi hanauna kaʻawale o kēia mau mea a pau. ʻAʻole naʻe he ʻoiaʻiʻo.
kahua hou a i ʻole hanana hou?
Akā inā hoʻohana ʻoe i nā hanana like, a laila e kū mai kekahi pilikia. No ka laʻana, ʻaʻole hiki i nā ʻōnaehana hoʻopuka āpau ke hana i ke ʻano o DTO i hiki iā BOB ke hana. Hoʻouna mākou iā lākou i ka id, akā ʻaʻole lākou e mālama no ka mea ʻaʻole pono lākou, a mai ka manaʻo o ka hoʻomaka ʻana i ke kaʻina hana-bus, pono kēia kahua.
Inā mākou e hoʻokomo i kahi lula no ka hanana-bus e koi ʻia kēia kahua, a laila koi ʻia mākou e hoʻonohonoho i nā lula hōʻoia hou i ka BOB a i ʻole ka mea hoʻomaka hanana hanana. Hoʻomaka ka hōʻoia e laha i ka lawelawe - ʻaʻole maʻalahi kēia.
ʻO kekahi pilikia ʻo ka hoʻowalewale ʻana i ka ulu ʻana. Ua ʻōlelo ʻia iā mākou he mea pono e hoʻohui ʻia i ka hanana, a malia paha, inā mākou e noʻonoʻo e pili ana i ia mea, he hanana ʻokoʻa paha ia. Akā i loko o kā mākou papahana, kahi hanana kaʻawale kahi kumuhana ʻokoʻa. ʻO kahi kumuhana kaʻawale ka hana holoʻokoʻa aʻu i wehewehe ai ma luna. Hoʻowalewale ʻia ka mea hoʻomohala e hoʻohui i kahi kahua ʻē aʻe i ka schema JSON a hana hou.
I ka hihia o ka hoihoi, ua hōʻea mākou i ka hanana o nā hanana i ka hapalua makahiki. Ua loaʻa iā mākou hoʻokahi hanana meta i kapa ʻia ʻo refund update, nona kahi kahua ʻano e wehewehe ana i ke ʻano o kēia mea hou. Ma muli o kēia, ua loaʻa iā mākou nā hoʻololi "kamahaʻo" me nā mea hōʻoia i haʻi iā mākou pehea e hōʻoia ai i kēia hanana me kēia ʻano.
Hoʻololi hanana
No ka hōʻoia ʻana i nā memo ma Kafka hiki iā ʻoe ke hoʻohana Avro, akā, pono e kau koke i luna a hoʻohana i ka Confluent. I kā mākou hihia, pono mākou e makaʻala i ka versioning. ʻAʻole hiki ke heluhelu hou i nā memo mai ka loina kope no ka mea ua "haʻalele" ke kumu hoʻohālike. ʻO ke kumu, hoʻololi ia i ke kūkulu ʻana i nā mana i hiki ke hoʻohālikelike ʻia ke kumu hoʻohālike: no ka laʻana, e koho i kahi kahua no ka manawa pōkole. Inā ikaika loa nā ʻokoʻa, hoʻomaka mākou e kākau i kahi kumuhana hou, a hoʻololi i nā mea kūʻai aku ke pau ka heluhelu ʻana i ka mea kahiko.
Hoʻonohonoho ʻia ka heluhelu ʻana o nā ʻāpana
Hoʻokaʻawale ʻia nā kumuhana i loko o Kafka i nā ʻāpana. ʻAʻole koʻikoʻi kēia i ka wā e hoʻolālā ana mākou i nā hui a me nā hoʻololi ʻana, akā he mea nui ia i ka wā e hoʻoholo ai pehea e ʻai ai a hoʻonui.
Ma ka hihia maʻamau, kākau ʻoe i hoʻokahi kumuhana ma Kafka. Ma ka maʻamau, hoʻohana ʻia hoʻokahi ʻāpana, a hele aku nā memo āpau i kēia kumuhana. A no laila, heluhelu ka mea kūʻai i kēia mau memo. E ʻōlelo kākou i kēia manawa pono mākou e hoʻonui i ka ʻōnaehana i heluhelu ʻia nā memo e nā mea kūʻai like ʻole. Inā, no ka laʻana, e hoʻouna ana ʻoe i SMS, a laila hiki iā ʻoe ke haʻi iā Kafka e hana i kahi ʻāpana hou aʻe, a e hoʻomaka ʻo Kafka e hoʻokaʻawale i nā leka i ʻelua ʻāpana - ka hapalua ma aneʻi, ka hapalua ma aneʻi.
Pehea e puunaue ai o Kafka ia lakou? He kino ko kēlā me kēia memo (kahi e mālama ai mākou iā JSON) a me kahi kī. Hiki iā ʻoe ke hoʻopili i kahi hana hash i kēia kī, kahi e hoʻoholo ai i ka ʻāpana e komo ai ka memo.
I kā mākou hihia me ka hoʻihoʻi, he mea nui kēia, inā mākou e lawe i ʻelua mau ʻāpana, a laila aia kahi manawa e hana ai ka mea kūʻai like i ka hanana ʻelua ma mua o ka mea mua a aia ka pilikia. ʻO ka hana hash e hōʻoia i ka pau ʻana o nā memo me ke kī like i ka pā like.
Nā hanana vs nā kauoha
ʻO kēia kekahi pilikia i loaʻa iā mākou. He hanana kekahi hanana: ʻōlelo mākou ua hiki mai kekahi mea ma kahi (something_happened), no ka laʻana, ua kāpae ʻia kahi mea a i ʻole ua loaʻa ke kālā. Inā hoʻolohe kekahi i kēia mau hanana, a laila e like me ka "mea i hoʻopau ʻia," e hana ʻia ka mea hoʻihoʻi, a e kākau ʻia ka "hoʻihoʻi" ma kahi o nā hoʻonohonoho.
Akā ʻo ka mea maʻamau, ke hoʻolālā ʻoe i nā hanana, ʻaʻole ʻoe makemake e kākau hewa iā lākou - hilinaʻi ʻoe i ka ʻoiaʻiʻo e heluhelu kekahi iā lākou. Loaʻa ka hoʻowalewale nui e kākau ʻaʻole i kahi mea_happened (item_canceled, refund_refunded), akā kekahi mea_should_be_done. No ka laʻana, mākaukau ka mea e hoʻihoʻi ʻia.
Ma kekahi ʻaoʻao, hōʻike ia pehea e hoʻohana ʻia ai ka hanana. Ma kekahi ʻaoʻao, ʻoi aku ka liʻiliʻi e like me ka inoa hanana maʻamau. Eia kekahi, ʻaʻole mamao loa mai ʻaneʻi i ke kauoha do_something. Akā, ʻaʻohe ou hōʻoia e heluhelu kekahi i kēia hanana; a ina heluhelu oe, alaila, heluhelu pono oe; a inā he pono kāu heluhelu ʻana, a laila ua hana ʻoe i kekahi mea, a ua holomua kekahi mea. ʻO ka manawa e lilo ai kahi hanana i mea_mea, pono ka manaʻo, a he pilikia ia.
Ma ka hoʻololi asynchronous ma RabbitMQ, ke heluhelu ʻoe i ka memo, e hele i http, loaʻa iā ʻoe kahi pane - ma ka liʻiliʻi loa ua loaʻa ka leka. Ke kākau ʻoe iā Kafka, aia kahi leka āu i kākau ai iā Kafka, akā ʻaʻole ʻoe i ʻike i ke ʻano o ka hana ʻana.
No laila, i kā mākou hihia, pono mākou e hoʻokomo i kahi hanana pane a hoʻonohonoho i ka nānā ʻana inā inā he nui nā hanana i hoʻouna ʻia, ma hope o ia a me ia manawa e hiki mai ka helu like o nā hanana pane. Inā ʻaʻole hiki kēia, a laila, ua hewa kekahi mea. No ka laʻana, inā hoʻouna mākou i ka hanana "item_ready_to_refund", manaʻo mākou e hana ʻia kahi hoʻihoʻi, e hoʻihoʻi ʻia ke kālā i ka mea kūʻai aku, a e hoʻouna ʻia ka hanana "money_refunded" iā mākou. Akā ʻaʻole maopopo kēia, no laila pono ke nānā ʻana.
Nuances
Aia kekahi pilikia maopopo loa: inā heluhelu ʻoe mai kahi kumuhana i ka sequentially, a loaʻa iā ʻoe kekahi ʻōlelo maikaʻi ʻole, e hāʻule ka mea kūʻai, a ʻaʻole ʻoe e hele hou aku. Pono ʻoe hoʻopau i nā mea kūʻai a pau, commit offset hou e hoomau heluhelu.
Ua ʻike mākou e pili ana iā ia, ua helu mākou iā ia, akā ua hiki nō. A ua hana kēia no ka mea ua kūpono ka hanana mai ka manaʻo o nā hanana-bus, ua kūpono ka hanana mai ka manaʻo o ka mea hōʻoia noi, akā ʻaʻole kūpono ia mai ka manaʻo o PostgreSQL, no ka mea ma kā mākou ʻōnaehana hoʻokahi. MySQL me UNSIGNED INT, a ma ka palapala hou i loaʻa i ka ʻōnaehana PostgreSQL me INT wale nō. ʻOi aku ka liʻiliʻi o kona nui, ʻaʻole i kūpono ka Id. Ua make ʻo Symfony me kahi ʻokoʻa. ʻOiaʻiʻo, ua loaʻa iā mākou ka ʻokoʻa no ka mea ua hilinaʻi mākou iā ia, a e hana ana mākou i kēia offset, akā ma mua o kēlā makemake mākou e hoʻonui i ka counter pilikia, no ka mea ua hoʻokō ʻole ʻia ka leka. Aia nā helu helu ma kēia papahana i loko o ka waihona, a ua pani mua ʻo Symfony i ke kamaʻilio me ka waihona, a ʻo ka lua o ka hoʻokaʻawale i pepehi i ke kaʻina holoʻokoʻa me ka ʻole o ka manawa e hana i ka offset.
Noho ka lawelawe no kekahi manawa - ʻoi aku ka maikaʻi, me Kafka ʻaʻole maikaʻi loa kēia, no ka mea e mau ana nā leka. Ke hoʻihoʻi ʻia ka hana, hiki iā ʻoe ke hoʻopau i ka heluhelu ʻana iā lākou. He oluolu.
Loaʻa iā Kafka ka hiki ke hoʻonohonoho i kahi offset arbitrary ma o ka mea hana. Akā no ka hana ʻana i kēia, pono ʻoe e hoʻōki i nā mea kūʻai aku a pau - i kā mākou hihia, e hoʻomākaukau i kahi hoʻokuʻu kaʻawale kahi e loaʻa ʻole ai nā mea kūʻai aku, redeployments. A laila ma Kafka hiki iā ʻoe ke hoʻololi i ka offset ma o ka mea hana, a hele ka memo.
ʻO kekahi nuance - moʻolelo hoʻopiʻi vs rdkafka.so - pili i nā kikoʻī o kā mākou papahana. Hoʻohana mākou i ka PHP, a ma PHP, ma ke ʻano he kānāwai, kamaʻilio nā hale waihona puke āpau me Kafka ma o ka waihona rdkafka.so, a laila aia kekahi ʻano o ka wahī. ʻO kēia paha kā mākou mau pilikia pilikino, akā ua ʻike ʻia ʻaʻole maʻalahi ka heluhelu hou ʻana i kahi ʻāpana o ka mea a mākou i heluhelu mua ai. Ma keʻano laulā, aia nā pilikia lako polokalamu.
Ke hoʻi nei i nā kikoʻī o ka hana ʻana me nā ʻāpana, ua kākau pololei ʻia i ka palapala nā mea kūʻai > = nā māhele kumuhana. Akā ua ʻike au i kēia ma mua o koʻu makemake. Inā makemake ʻoe e hoʻonui a loaʻa i ʻelua mau mea kūʻai aku, pono ʻoe i ʻelua mau ʻāpana. ʻO ia hoʻi, inā loaʻa iā ʻoe kahi ʻāpana i hōʻiliʻili ʻia he 20 tausani mau memo, a hana ʻoe i kahi hou, ʻaʻole e hoʻohālikelike koke ʻia ka helu o nā memo. No laila, no ka loaʻa ʻana o nā mea kūʻai like ʻelua, pono ʻoe e hana i nā ʻāpana.
Ka mālama ʻana
Manaʻo wau e ʻoi aku ka maopopo o ke ʻano o kā mākou nānā ʻana i nā pilikia i loaʻa i ke ala e kū nei.
No ka laʻana, helu mākou i ka nui o nā huahana i loko o ka waihona i hoʻololi hou i ko lākou kūlana, a, no laila, pono e hana ʻia nā hanana ma muli o kēia mau loli, a hoʻouna mākou i kēia helu i kā mākou ʻōnaehana nānā. A laila mai Kafka mai ka helu ʻelua, ehia mau hanana i hoʻopaʻa ʻia. ʻIke loa, ʻo ka ʻokoʻa ma waena o kēia mau helu ʻelua he ʻole.
Eia kekahi, pono ʻoe e nānā i ke ʻano o ka hana ʻana o ka mea hana, inā paha i loaʻa i nā hanana-bus i nā memo, a me ke ʻano o ka mea kūʻai aku. No ka laʻana, i nā kiʻi ma lalo nei, ke hana maikaʻi nei ʻo Refund Tool, akā loaʻa iā BOB kekahi mau pilikia (blue peaks).
Ua ʻōlelo mua wau i ka lag consumer-group. ʻO ka ʻōlelo koʻikoʻi, ʻo ia ka helu o nā memo i heluhelu ʻole ʻia. Ma keʻano holoʻokoʻa, hana wikiwiki kā mākou mea kūʻai, no laila ʻo ka lag maʻamau ka 0, akā i kekahi manawa hiki ke loaʻa kahi kiʻekiʻe pōkole. Hiki iā Kafka ke hana i kēia ma waho o ka pahu, akā pono ʻoe e hoʻonohonoho i kekahi manawa.
Aia kahi papahana Burrowe hāʻawi iā ʻoe i ka ʻike hou aku ma Kafka. Hoʻohana wale ia i ka API hui mea kūʻai aku e hāʻawi i ke kūlana o ke ʻano o kēia hui. Ma kahi o OK a Failed, aia kahi ʻōlelo aʻo, a hiki iā ʻoe ke ʻike ʻaʻole hiki i kāu mea kūʻai ke hoʻokō i ka wikiwiki o ka hana - ʻaʻohe o lākou manawa e hōʻoia i ka mea i kākau ʻia. He akamai a maʻalahi ka ʻōnaehana.
ʻO kēia ke ʻano o ka pane API. Eia ka hui bob-live-fifa, partition refund.update.v1, kūlana OK, lag 0 - ka hope hope offset penei a me ia.
Ka mālama ʻana updated_at SLA (paʻa) Ua haʻi mua wau. No ka laʻana, ua hoʻololi ka huahana i ke kūlana i mākaukau no ka hoʻihoʻi. Hoʻokomo mākou iā Cron, ka mea i ʻōlelo inā inā ʻaʻole i hoʻihoʻi kēia mea i loko o 5 mau minuke (hoʻihoʻi mākou i ke kālā ma o nā ʻōnaehana uku wikiwiki loa), a laila ua hewa kekahi mea, a he hihia maoli kēia no ke kākoʻo. No laila, lawe wale mākou iā Cron, nāna e heluhelu i ia mau mea, a inā ʻoi aku lākou ma mua o 0, a laila e hoʻouna i kahi makaʻala.
No ka hōʻuluʻulu ʻana, maʻalahi ka hoʻohana ʻana i nā hanana i ka wā:
pono ka ʻike e kekahi mau ʻōnaehana;
ʻaʻole nui ka hopena o ka hana ʻana;
he mau hanana liʻiliʻi paha.
Me he mea lā he kumuhana koʻikoʻi ko ka ʻatikala - asynchronous API ma Kafka, akā e pili ana me ia makemake wau e paipai i nā mea he nui i ka manawa hoʻokahi.
ʻAkahi, aʻe Hoʻouka kiʻekiʻe++ pono mākou e kali a hiki i Nowemapa, ma ʻApelila e loaʻa kahi mana o St. Petersburg, a ma Iune e kamaʻilio mākou e pili ana i nā ukana kiʻekiʻe ma Novosibirsk.
ʻO ka lua, ʻo ka mea kākau o ka hōʻike, ʻo Sergei Zaika, he lālā o ke Kōmike Polokalamu o kā mākou hālāwai kūkā hou e pili ana i ka hoʻokele ʻike. KnowledgeConf. ʻO ka ʻaha kūkā he lā hoʻokahi, e hana ʻia ma ʻApelila 26, akā ikaika loa kāna papahana.
A i ka mahina o Mei PHP Rusia и RIT++ (me DevOpsConf i hoʻokomo ʻia) - hiki iā ʻoe ke hōʻike i kāu kumuhana ma laila, e kamaʻilio e pili ana i kāu ʻike a hoʻopiʻi e pili ana i kāu mau cones.