"Ije ije na akpụkpọ ụkwụ m" - chere, a na-akara ha akara?

Kemgbe afọ 2019, Rọshịa nwere iwu gbasara ịde aha amanyere iwu. Iwu anaghị emetụta ndị otu niile nke ngwaahịa, na ụbọchị maka ntinye ike nke akara mmado maka otu ngwaahịa dị iche iche. ụtaba, akpụkpọ ụkwụ, na ọgwụ ga-abụ nke mbụ a ga-edobe akara mmado; a ga-agbakwunye ngwaahịa ndị ọzọ ma emechaa, dịka ọmụmaatụ, senti, textiles, na mmiri ara ehi. Nke a omebe iwu ọhụrụ kpaliri mmepe nke ọhụrụ IT ngwọta nke ga-eme ka o kwe omume soro dum agbụ ndụ nke ngwaahịa si mmepụta ịzụta site na njedebe n'ji, na ndị niile sonyere na usoro: ma ala n'onwe ya na òtù niile na-ere ngwongwo na. mmanye labelụ.

Na X5, a na-akpọ usoro nke ga-esochi ngwaahịa akpọrọ na mgbanwe data na steeti na ndị na-ebubata ya "Marcus". Ka anyị gwa gị otu na onye mepụtara ya, ihe nchịkọta teknụzụ ya bụ, yana ihe kpatara anyị ji nwee ihe anyị ga-eji na-anya isi.

"Ije ije na akpụkpọ ụkwụ m" - chere, a na-akara ha akara?

Ezigbo HighLoad

"Marcus" na-edozi ọtụtụ nsogbu, nke bụ isi bụ mmekọrịta dị n'etiti usoro ozi X5 na usoro ozi steeti maka ngwaahịa ndị a ma ama (GIS MP) iji soro mmegharị nke ngwaahịa ndị a na-akpọ. Ikpo okwu ahụ na-echekwa koodu ntinye aha niile nke anyị nwetara yana akụkọ ihe mere eme nke mmegharị koodu ndị a n'ofe ihe, ma na-enyere aka iwepụ re-grading nke ngwaahịa akara. N’iji ihe atụ nke ngwaahịa ụtaba, bụ́ ndị e tinyere n’ìgwè mbụ nke ngwá ahịa ndị e denyere aha, nanị otu gwongworo bu siga nwere ihe dị ka ngwugwu 600, nke nke ọ bụla n’ime ha nwere koodu pụrụ iche nke ya. Na ọrụ nke usoro anyị bụ soro na nyochaa n'ụzọ ziri ezi nke mmegharị nke ọ bụla dị otú ahụ mkpọ n'etiti ụlọ nkwakọba ihe na ụlọ ahịa, na n'ikpeazụ chọpụta admissibility nke ha ire ere na ọgwụgwụ asịwo. Anyị na-edekọkwa ihe dị ka azụmahịa ego 000 kwa elekere, anyị kwesịkwara idekọ otú mkpọ ọ bụla si banye n'ụlọ ahịa ahụ. Ya mere, n'iburu n'uche mmegharị niile dị n'etiti ihe, anyị na-atụ anya iri ijeri ihe ndekọ kwa afọ.

Otu M

N'agbanyeghị na a na-ewere Marcus dị ka ọrụ n'ime X5, a na-eme ya site na iji usoro ngwaahịa. Otu a na-arụ ọrụ dịka Scrum si kwuo. Ọrụ ahụ malitere n'oge okpomọkụ gara aga, ma nsonaazụ mbụ bịara naanị n'October - ndị otu anyị chịkọtara n'ụzọ zuru ezu, e mepụtara usoro ihe owuwu ụlọ ma zụta ngwá ọrụ. Ugbu a, ndị otu ahụ nwere ndị mmadụ 16, isii n'ime ha na-etinye aka na azụ azụ na mmepe ihu, atọ n'ime ha na-etinye aka na nyocha usoro. Mmadụ isii ọzọ na-etinye aka na akwụkwọ ntuziaka, ibu, nnwale akpaaka, na mmezi ngwaahịa. Na mgbakwunye, anyị nwere ọkachamara SRE.

Ọ bụghị naanị ndị mmepe na-ede koodu na otu anyị; ihe fọrọ nke nta ka ọ bụrụ ụmụ okorobịa niile maara ka esi eme mmemme na dee autotest, scripts load script na akpaaka. Anyị na-etinye uche pụrụ iche na nke a, ebe ọ bụ na ọbụna nkwado ngwaahịa chọrọ ọkwa dị elu nke akpaaka. Anyị na-agbalị mgbe niile ịdụ ọdụ ma nyere ndị ọrụ ibe anyị na-emebeghị mmemme mbụ, ma nye ha obere ọrụ ha ga-arụ ọrụ.

N'ihi ọrịa na-efe efe nke coronavirus, anyị bufere ndị otu ahụ n'ọrụ dịpụrụ adịpụ; nnweta ngwaọrụ niile maka njikwa mmepe, usoro arụrụ arụ ọrụ na Jira na GitLab mere ka o kwe omume ịgafe ọkwa a ngwa ngwa. Ọnwa ndị a nọrọ n'ebe dị anya gosipụtara na arụpụtaghị ihe nke otu ahụ ataghị ahụhụ n'ihi ya; maka ọtụtụ ndị, nkasi obi na-arụ ọrụ mụbara, naanị ihe na-efu efu bụ nkwukọrịta ndụ.

Nzukọ otu ime anya

"Ije ije na akpụkpọ ụkwụ m" - chere, a na-akara ha akara?

Nzukọ n'oge ọrụ dịpụrụ adịpụ

"Ije ije na akpụkpọ ụkwụ m" - chere, a na-akara ha akara?

Teknụzụ tojupụtara nke ngwọta

Ebe nchekwa ọkọlọtọ yana ngwa CI/CD maka X5 bụ GitLab. Anyị na-eji ya maka nchekwa koodu, ule na-aga n'ihu, na ntinye iji nwalee na mmepụta ihe nkesa. Anyị na-ejikwa omume nyochaa koodu, mgbe ọ dịkarịa ala 2 ndị ọrụ ibe kwesịrị ịkwado mgbanwe nke onye mmepụta mere na koodu. Ndị nyocha koodu static SonarQube na JaCoCo na-enyere anyị aka idobe koodu anyị ọcha wee hụ na mkpuchi mkpuchi otu chọrọ. Mgbanwe niile na koodu ga-agarịrị na nlele ndị a. Edemede ule niile ejiri aka na-arụ na-akpaghị aka.

Maka mmejuputa usoro azụmahịa nke ọma site na "Marcus", anyị ga-edozi ọtụtụ nsogbu nkà na ụzụ, banyere nke ọ bụla n'usoro.

Ọrụ 1. Mkpa maka scalability kwụ ọtọ nke usoro

Iji dozie nsogbu a, anyị họọrọ a microservice obibia na architecture. N'otu oge ahụ, ọ dị ezigbo mkpa ịghọta akụkụ ọrụ nke ọrụ ahụ. Anyị gbalịrị kewaa ha n'ime ọrụ azụmahịa, na-eburu n'uche nkọwa nke usoro ahụ. Dịka ọmụmaatụ, ịnakwere n'ụlọ nkwakọba ihe abụghị ihe na-emekarị, ma ọ bụ nnukwu ọrụ, n'oge nke ọ dị mkpa ịnweta ngwa ngwa site n'aka onye na-ahụ maka nchịkwa steeti ozi gbasara akụkụ nke ngwaahịa a na-anabata, ọnụ ọgụgụ nke n'otu nnyefe ruru 600000. , lelee nnabata nke ịnakwere ngwaahịa a n'ime ụlọ nkwakọba ihe wee weghachi ozi niile dị mkpa maka sistemụ akpaaka ụlọ nkwakọba ihe. Ma mbupu sitere na ụlọ nkwakọba ihe nwere ike dị ukwuu karị, ma n'otu oge ahụ na-arụ ọrụ na obere data.

Anyị na-emejuputa ọrụ niile na enweghị obodo na ọbụna na-agbalị ikewa ime ime n'ime usoro, na-eji ihe anyị na-akpọ Kafka onwe isiokwu. Nke a bụ mgbe microservice na-ezigara onwe ya ozi, nke na-enye gị ohere ịhazigharị ibu ahụ na arụ ọrụ ndị ọzọ na-arụ ọrụ ma na-eme ka nlekọta ngwaahịa dị mfe, ma ọzọ na nke ahụ emechaa.

Anyị kpebiri ikewapụta modul maka mmekọrịta ya na sistemu mpụga n'ime ọrụ dị iche iche. Nke a mere ka o kwe omume idozi nsogbu nke API na-agbanwe ugboro ugboro nke sistemụ mpụga, na-enweghị mmetụta ọ bụla na ọrụ nwere ọrụ azụmahịa.

"Ije ije na akpụkpọ ụkwụ m" - chere, a na-akara ha akara?

A na-ebugharị microservices niile na ụyọkọ OpenShift, nke na-edozi ma nsogbu nke ịchacha microservice ọ bụla ma na-enye anyị ohere ịghara iji ngwaọrụ nchọpụta ọrụ ndị ọzọ.

Ọrụ 2. Mkpa ọ dị ịnọgide na-enwe nnukwu ibu na nnukwu mgbanwe data n'etiti ọrụ ikpo okwu: N'oge mmalite mmalite ọrụ naanị, a na-arụ ihe dị ka ọrụ 600 kwa nkeji. Anyị na-atụ anya na uru a ga-abawanye ruo 5000 ops/sk ka ụlọ ahịa na-ejikọta na ikpo okwu anyị.

A doziri nsogbu a site na ibugharị ụyọkọ Kafka na ihe fọrọ nke nta ka ọ bụrụ ịhapụ kpamkpam mmekọrịta n'etiti microservices nke ikpo okwu. Nke a na-achọ nlezianya nyocha nke usoro chọrọ, ebe ọ bụ na ọ bụghị ọrụ niile nwere ike ịbụ asynchronous. N'otu oge ahụ, ọ bụghị naanị na anyị na-ebufe ihe omume site na onye na-ere ahịa, kamakwa na-ebufe ozi azụmahịa niile achọrọ na ozi ahụ. Ya mere, nha ozi nwere ike iru ọtụtụ narị kilobytes. Oke ozi dị na Kafka chọrọ ka anyị buru amụma nha ozi nke ọma, ma ọ bụrụ na ọ dị mkpa, anyị na-ekewa ha, mana nkewa ahụ bụ ihe ezi uche dị na ya, metụtara ọrụ azụmahịa.
Dị ka ihe atụ, anyị na-eke ngwongwo ndị rutere n’ụgbọ ala n’ime igbe. Maka ịrụkọ ọrụ ọnụ, a na-ekenye microservices dị iche iche yana a na-enyocha ibu nke ọma. Iji Kafka wetara anyị ihe ịma aka ọzọ - ịnwale ọrụ nke ọrụ anyị na-eburu n'uche njikọta Kafka na-eme ka otu anyị niile na-anwale asynchronous. Anyị doziri nsogbu a site na iji agbakwunyere Kafka Broker na-ede ụzọ ọrụ nke anyị. Nke a anaghị ewepụ mkpa ọ dị iji dee nyocha otu maka ụzọ onye ọ bụla, mana anyị na-ahọrọ iji Kafka iji nwalee ikpe mgbagwoju anya.

A na-elebara anya nke ukwuu na ịchọta ndekọ ka TraceId ha ghara ịla n'iyi mgbe ndị ọzọ na-eme n'oge ọrụ ọrụ ma ọ bụ mgbe ha na-arụ ọrụ na Kafka batch. Ma ọ bụrụ na enweghị nsogbu pụrụ iche na nke mbụ, mgbe ahụ na nke abụọ, a na-amanye anyị ịbanye TraceIds niile nke batch ahụ bịara wee họrọ otu ka ọ gaa n'ihu na-achọpụta. Mgbe ahụ, mgbe ị na-achọ TraceId mbụ, onye ọrụ ga-achọpụta ngwa ngwa nke ejiri wee gaa n'ihu.

Ọrụ 3. Mkpa ịchekwa nnukwu data: Ihe karịrị ijeri 1 ijeri kwa afọ maka ụtaba naanị na-abịa na X5. Ha na-achọ mgbe niile na ịnweta ngwa ngwa. Na mkpokọta, usoro a ga-ahazi ihe dị ka ijeri ijeri iri nke akụkọ mmegharị nke ngwaahịa ndị a akpọrọ.

Iji dozie nsogbu nke atọ, a họọrọ nchekwa data NoSQL MongoDB. Anyị arụgoro ọnụ ụzọ 5 na ọnụ nke ọ bụla nwere Ntọala oyiri nke sava 3. Nke a na-enye gị ohere ịlele sistemu ahụ n'ụzọ kwụ ọtọ, na-agbakwunye sava ọhụrụ na ụyọkọ ahụ, wee hụ na nnabata ya nwere mmejọ. N'ebe a, anyị zutere nsogbu ọzọ - ịgba mbọ hụ na azụmahịa na ụyọkọ mongo, na-eburu n'uche iji microservices na-enweghị atụ. Dịka ọmụmaatụ, otu n'ime ọrụ nke sistemu anyị bụ ịchọpụta mbọ iji regharịa ngwaahịa ndị nwere otu koodu ndopụta. N'ebe a, ihe mkpuchi na-apụta na nyocha ezighi ezi ma ọ bụ arụ ọrụ ezighi ezi nke ndị na-akwụ ụgwọ. Anyị chọpụtara na ụdị oyiri ndị dị otú ahụ nwere ike ime ma n'ime otu Kafka batch na-edozi, na n'ime batches abụọ, a na-edozi ya n'otu oge. Ya mere, ịlele maka oyiri site na ịjụ ajụjụ nchekwa data enyeghị ihe ọ bụla. Maka microservice ọ bụla, anyị doziri nsogbu ahụ iche dabere na mgbagha azụmahịa nke ọrụ a. Dịka ọmụmaatụ, maka nlele, anyị gbakwunyere nlele n'ime batch na nhazi dị iche iche maka ọdịdị nke oyiri mgbe ịtinye.

Iji hụ na ọrụ ndị ọrụ na akụkọ ihe mere eme nke arụmọrụ adịghị emetụta ihe kachasị mkpa - arụ ọrụ nke usoro azụmahịa anyị, anyị ekewapụla data akụkọ ihe mere eme niile n'ime ọrụ dị iche iche na nchekwa data dị iche, nke na-enwetakwa ozi site na Kafka. . N'ụzọ dị otú a, ndị ọrụ na-arụ ọrụ dịpụrụ adịpụ na-enweghị emetụta ọrụ ndị na-ahazi data maka ọrụ na-aga n'ihu.

Ọrụ 4: Nhazigharị na nlebanya kwụ n'ahịrị:

Na sistemu ekesa, nsogbu na mperi ga-ebilite na nnweta ọdụ data, kwụ n'ahịrị na isi mmalite data mpụga. N'ihe banyere Marcus, isi iyi nke njehie ndị dị otú ahụ bụ njikọ na usoro mpụga. Ọ dị mkpa ịchọta ngwọta nke ga-enye ohere ịrịọ arịrịọ ugboro ugboro maka nzaghachi na-ezighị ezi na oge ụfọdụ a kapịrị ọnụ, mana n'otu oge ahụ adịghị akwụsị nhazi arịrịọ na-aga nke ọma na isi kwụ n'ahịrị. Maka ebumnuche a, a họọrọ echiche a na-akpọ "nnwale isiokwu dabere". Maka isi isiokwu ọ bụla, a na-emepụta otu isiokwu ma ọ bụ karịa nke ezigara ozi na-ezighị ezi ma n'otu oge ahụ na-ewepụ oge nhazi ozi site na isi isiokwu. Atụmatụ mmekọrịta -

"Ije ije na akpụkpọ ụkwụ m" - chere, a na-akara ha akara?

Iji mejuputa atụmatụ dị otú ahụ, anyị chọrọ ihe ndị a: iji jikọta ngwọta a na mmiri ma zere mbipute koodu. Ka anyị na-achọgharị na webụ, anyị hụrụ otu ngwọta yiri nke ahụ dabere na Spring BeanPostProccessor, mana ọ dị anyị ka ọ na-esiri anyị ike. Ndị otu anyị emeela ihe ngwọta dị mfe nke na-enye anyị ohere ịbanye n'ime okirikiri mmiri maka ịmepụta ndị na-azụ ahịa ma tinyekwa ndị ahịa Retry. Anyị nyere a prototype nke ngwọta anyị na mmiri otu, ị pụrụ ịhụ ya ebe a. A na-ahazi ọnụ ọgụgụ nke ndị na-azụ ahịa Retry na ọnụ ọgụgụ nke mgbalị maka onye ọ bụla na-azụ ahịa site na paramita, dabere na mkpa nke usoro azụmahịa, na ihe niile na-arụ ọrụ, ihe niile fọdụrụ bụ ịgbakwunye nkọwa org.springframework.kafka.annotation.KafkaListener. , nke maara ndị mmepe oge opupu ihe ubi niile.

Ọ bụrụ na enweghị ike ịhazi ozi a ka emechara mbọ niile, ọ na-aga na DLT (isiokwu akwụkwọ ozi nwụrụ anwụ) site na iji Spring DeadLetterPublishingRecoverer. Na arịrịọ nkwado, anyị gbasaa ọrụ a wee mepụta ọrụ dị iche nke na-enye gị ohere ịlele ozi gụnyere na DLT, stackTrace, traceId na ozi ndị ọzọ bara uru gbasara ha. Tụkwasị na nke ahụ, a na-agbakwunye nlekota na ihe ngosi na isiokwu DLT niile, ma ugbu a, n'eziokwu, ọdịdị ozi dị na isiokwu DLT bụ ihe mere ị ga-eji nyochaa ma dozie ntụpọ. Nke a dị ezigbo mma - site n'aha isiokwu ahụ, anyị na-aghọta ozugbo na usoro nke usoro nsogbu ahụ bilitere, nke na-eme ka ọ dị ngwa ngwa ịchọta ihe kpatara ya.

"Ije ije na akpụkpọ ụkwụ m" - chere, a na-akara ha akara?

N'oge na-adịbeghị anya, anyị etinyere interface nke na-enye anyị ohere iziga ozi site na iji nkwado anyị mgbe ewepụsịrị ihe kpatara ha (dịka ọmụmaatụ, iweghachi ọrụ nke usoro mpụga) na, n'ezie, guzobe ntụpọ kwekọrọ maka nyocha. Nke a bụ ebe isiokwu nke onwe anyị na-abata: ka ị ghara ịmalitegharị ogologo usoro nhazi ogologo, ị nwere ike ịmalitegharị ya site na nzọụkwụ achọrọ.

"Ije ije na akpụkpọ ụkwụ m" - chere, a na-akara ha akara?

Nrụ ọrụ Platform

Ikpo okwu amalitelarị ọrụ na-arụpụta ihe, kwa ụbọchị anyị na-ebufe na mbupu, jikọọ ụlọ ọrụ nkesa na ụlọ ahịa ọhụrụ. Dị ka akụkụ nke onye na-anya ụgbọelu, usoro ahụ na-arụ ọrụ na otu ngwaahịa ngwaahịa "Ụtaba" na "Akpụkpọ ụkwụ".

Ndị otu anyị niile na-eso na-eduzi ndị na-anya ụgbọ elu, na-enyocha nsogbu ndị na-apụta ma na-atụ aro maka imeziwanye ngwaahịa anyị, site na ịkwalite ndekọ na usoro mgbanwe.

Ka anyị ghara imegharị mmejọ anyị, ikpe niile achọpụtara n'oge onye ọkwọ ụgbọ elu na-egosipụta na ule akpaghị aka. Ọnụnọ nke ọnụ ọgụgụ dị ukwuu nke autotests na nyocha unit na-enye gị ohere ịme nyocha nyocha na wụnye hotfix n'ụzọ nkịtị n'ime awa ole na ole.

Ugbu a, anyị na-aga n'ihu na-azụlite ma melite ikpo okwu anyị, ma na-eche ihe ịma aka ọhụrụ ihu mgbe niile. Ọ bụrụ na ị nwere mmasị, anyị ga-ekwu maka ngwọta anyị n'isiokwu ndị na-esonụ.

isi: www.habr.com

Tinye a comment