ʻ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.

ʻO ka ʻike i ka hoʻomohala ʻana i ka lawelawe Refund Tool me kahi API asynchronous ma Kafka

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.

ʻO ka ʻike i ka hoʻomohala ʻana i ka lawelawe Refund Tool me kahi API asynchronous 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 ka ʻike i ka hoʻomohala ʻana i ka lawelawe Refund Tool me kahi API asynchronous ma Kafka

ʻO kā mākou hoʻoikaika:

  1. 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.
  2. 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.

ʻO ka ʻike i ka hoʻomohala ʻana i ka lawelawe Refund Tool me kahi API asynchronous ma Kafka

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:

ʻO ka ʻike i ka hoʻomohala ʻana i ka lawelawe Refund Tool me kahi API asynchronous ma Kafka

  1. Loaʻa iā BOB kahi noi no ka uku.
  2. Kūkākūkā ʻo BOB e pili ana i kēia Mea Hana Hoʻihoʻi.
  3. Hōʻike ka mea hoʻihoʻi i ka uku: "E hoʻihoʻi i ke kālā."
  4. Hoʻihoʻi ka uku i ke kālā.
  5. 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.
  6. 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).

ʻO ka ʻike i ka hoʻomohala ʻana i ka lawelawe Refund Tool me kahi API asynchronous ma Kafka

ʻ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.

He aha ka API i alakaʻi ʻia i nā hanana

ʻO kahi pane maikaʻi i kēia nīnau ma ka hōʻike a Martin Fowler (GOTO 2017) "ʻO ka nui o nā manaʻo o ka hoʻolālā hoʻokele hanana".

ʻO kā mākou hana pōkole:

  1. 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.
  2. ʻ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.
  3. ʻ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.

ʻO ka ʻike i ka hoʻomohala ʻana i ka lawelawe Refund Tool me kahi API asynchronous ma Kafka

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.

ʻO ka ʻike i ka hoʻomohala ʻana i ka lawelawe Refund Tool me kahi API asynchronous ma Kafka

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:

  1. Nā moʻolelo;
  2. R&D;
  3. 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.

ʻO ka ʻike i ka hoʻomohala ʻana i ka lawelawe Refund Tool me kahi API asynchronous ma Kafka

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.

ʻO ka ʻike i ka hoʻomohala ʻana i ka lawelawe Refund Tool me kahi API asynchronous ma Kafka

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.

ʻO ka ʻike i ka hoʻomohala ʻana i ka lawelawe Refund Tool me kahi API asynchronous ma Kafka

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).

ʻO ka ʻike i ka hoʻomohala ʻana i ka lawelawe Refund Tool me kahi API asynchronous ma Kafka

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 ka ʻike i ka hoʻomohala ʻana i ka lawelawe Refund Tool me kahi API asynchronous ma Kafka

ʻ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.

ʻO ka ʻike i ka hoʻomohala ʻana i ka lawelawe Refund Tool me kahi API asynchronous ma Kafka

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.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka