"Mache nan soulye mwen" - rete tann, èske yo make?

Depi 2019, Larisi te gen yon lwa sou etikèt obligatwa. Lwa a pa aplike nan tout gwoup machandiz, ak dat yo pou antre an fòs nan etikèt obligatwa pou gwoup pwodwi yo diferan. Tabak, soulye, ak medikaman yo pral premye moun ki dwe sijè a etikèt obligatwa; lòt pwodwi yo pral ajoute pita, pou egzanp, pafen, twal, ak lèt. Inovasyon lejislatif sa a te pouse devlopman nouvo solisyon IT ki pral fè li posib pou swiv tout chèn lavi yon pwodwi depi nan pwodiksyon rive nan achte pa konsomatè final la, pou tout patisipan yo nan pwosesis la: ni eta a li menm ak tout òganizasyon k ap vann machandiz ak etikèt obligatwa.

Nan X5, sistèm nan ki pral swiv machandiz ki make ak echanj done ak eta a ak founisè yo rele "Marcus". Ann di w nan lòd ki jan ak ki moun ki devlope li, ki pile teknoloji li yo ye, ak poukisa nou gen yon bagay yo dwe fyè de.

"Mache nan soulye mwen" - rete tann, èske yo make?

Imobilye HighLoad

"Marcus" rezoud anpil pwoblèm, youn prensipal la se entèraksyon an entegrasyon ant sistèm enfòmasyon X5 ak sistèm enfòmasyon eta a pou pwodwi ki make (GIS MP) pou swiv mouvman an nan pwodwi ki make. Platfòm nan tou estoke tout kòd etikèt nou resevwa yo ak tout istwa mouvman kòd sa yo atravè objè yo, epi li ede elimine re-klasifikasyon pwodwi ki make yo. Sèvi ak egzanp nan pwodwi tabak, ki te enkli nan premye gwoup yo nan machandiz etikèt, jis yon kamyon sigarèt gen apeprè 600 pake, chak nan yo ki gen pwòp kòd inik li yo. Ak travay la nan sistèm nou an se swiv ak verifye legalite nan mouvman yo nan chak pake sa yo ant depo ak magazen, epi finalman verifye admisibilite nan vann yo nan fen achtè a. Epi nou anrejistre apeprè 000 tranzaksyon lajan kach pou chak èdtan, epi nou bezwen tou anrejistre ki jan chak pake sa yo te antre nan magazen an. Kidonk, pran an kont tout mouvman ki genyen ant objè yo, nou ap tann dè dizèn de milya de dosye chak ane.

Ekip M

Malgre lefèt ke Marcus konsidere kòm yon pwojè nan X5, li ap aplike lè l sèvi avèk yon apwòch pwodwi. Ekip la ap travay dapre Scrum. Pwojè a te kòmanse ete dènye a, men premye rezilta yo te vini sèlman nan mwa Oktòb - pwòp ekip nou an te konplètman reyini, yo te devlope achitekti sistèm nan epi yo te achte ekipman yo. Kounye a ekip la gen 16 moun, sis ladan yo patisipe nan devlopman backend ak frontend, twa ladan yo patisipe nan analiz sistèm. Sis plis moun patisipe nan manyèl, chaj, tès otomatik, ak antretyen pwodwi. Anplis de sa, nou gen yon espesyalis SRE.

Se pa sèlman devlopè yo ekri kòd nan ekip nou an; prèske tout mesye yo konnen ki jan yo pwograme ak ekri ototès, chaje scripts ak scripts automatisation. Nou peye atansyon espesyal sa a, depi menm sipò pwodwi mande pou yon wo nivo de automatisation. Nou toujou eseye konseye ak ede kòlèg ki pa te pwograme anvan, epi ba yo kèk ti travay yo travay sou yo.

Akòz pandemi kowonaviris la, nou te transfere tout ekip la nan travay aleka; disponiblite tout zouti pou jesyon devlopman, workflow bati nan Jira ak GitLab te fè li posib fasilman pase etap sa a. Mwa yo te pase adistans te montre ke pwodiktivite ekip la pa t soufri kòm rezilta; pou anpil moun, konfò nan travay la te ogmante, sèl bagay ki manke se kominikasyon an dirèk.

Reyinyon ekip adistans

"Mache nan soulye mwen" - rete tann, èske yo make?

Reyinyon pandan travay aleka

"Mache nan soulye mwen" - rete tann, èske yo make?

Pile teknoloji nan solisyon an

Repozitwa estanda ak zouti CI/CD pou X5 se GitLab. Nou itilize li pou depo kòd, tès kontinyèl, ak deplwaman pou tès ak pwodiksyon serveurs. Nou itilize pratik revizyon kòd tou, lè omwen 2 kòlèg bezwen apwouve chanjman pwomotè a fè nan kòd la. Analizè kòd estatik SonarQube ak JaCoCo ede nou kenbe kòd nou an pwòp epi asire nivo garanti tès inite yo. Tout chanjman nan kòd la dwe pase nan chèk sa yo. Tout scripts tès ki kouri manyèlman ap otomatikman imedyatman.

Pou aplikasyon an siksè nan pwosesis biznis pa "Marcus", nou te oblije rezoud yon kantite pwoblèm teknolojik, sou chak nan lòd.

Objektif Travay la 1. Bezwen pou évolutivité orizontal nan sistèm nan

Pou rezoud pwoblèm sa a, nou te chwazi yon apwòch mikwosèvis nan achitekti. An menm tan an, li te trè enpòtan pou w konprann domèn responsablite sèvis yo. Nou te eseye divize yo an operasyon biznis, pran an kont spesifik yo nan pwosesis yo. Pou egzanp, akseptasyon nan yon depo se pa yon operasyon trè souvan, men trè gwo-echèl, pandan ki li nesesè byen vit jwenn nan men regilatè leta a enfòmasyon sou inite yo nan machandiz yo te aksepte, ki kantite ki nan yon sèl livrezon rive nan 600000. , tcheke admisibilite pou aksepte pwodui sa a nan depo a epi retounen tout enfòmasyon ki nesesè pou sistèm automatisation depo a. Men, chajman soti nan depo gen yon pi gwo entansite, men an menm tan an opere ak ti komèsan nan done.

Nou aplike tout sèvis sou yon baz apatrid e menm eseye divize operasyon entèn yo an etap, itilize sa nou rele Kafka self-topics. Sa a se lè yon mikwosèvis voye yon mesaj nan tèt li, ki pèmèt ou balanse chaj la sou operasyon plis resous entansif ak senplifye antretyen pwodwi, men plis sou sa pita.

Nou deside separe modil pou entèraksyon ak sistèm ekstèn nan sèvis separe. Sa te fè li posib pou rezoud pwoblèm nan chanje souvan API nan sistèm ekstèn, ak nòmalman pa gen okenn enpak sou sèvis ak fonksyonalite biznis.

"Mache nan soulye mwen" - rete tann, èske yo make?

Tout mikwo-sèvis yo deplwaye nan yon gwoup OpenShift, ki rezoud tou de pwoblèm nan echèl chak mikwo-sèvis epi ki pèmèt nou pa sèvi ak zouti dekouvèt sèvis twazyèm pati.

Travay 2. Bezwen pou kenbe yon chaj segondè ak echanj done trè entansif ant sèvis platfòm: Pandan faz lansman pwojè a sèlman, yo fè anviwon 600 operasyon pou chak segonn. Nou atann nou aske valè sa a ap ogmante a 5000 ops/sec pandan plòg an detay konekte ak platfòm nou an.

Pwoblèm sa a te rezoud pa deplwaye yon gwoup Kafka ak prèske konplètman abandone entèraksyon synchrone ant mikwosèvis platfòm la. Sa a mande pou yon analiz anpil atansyon sou kondisyon sistèm yo, paske se pa tout operasyon yo ka asynchrone. An menm tan an, nou pa sèlman transmèt evènman atravè koutye a, men tou, transmèt tout enfòmasyon biznis ki nesesè nan mesaj la. Kidonk, gwosè mesaj la ka rive nan plizyè santèn kilobyte. Limit gwosè mesaj la nan Kafka mande pou nou prevwa avèk presizyon gwosè mesaj la, epi si sa nesesè, nou divize yo, men divizyon an se lojik, ki gen rapò ak operasyon biznis.
Pa egzanp, nou divize machandiz ki rive nan yon machin nan bwat. Pou operasyon synchrone, yo bay mikwosèvis separe epi yo fè tès chaj konplè. Sèvi ak Kafka prezante nou ak yon lòt defi - tès operasyon an nan sèvis nou an pran an kont entegrasyon an Kafka fè tout tès inite nou yo asynchrone. Nou rezoud pwoblèm sa a lè nou ekri pwòp metòd sèvis piblik nou yo lè l sèvi avèk Embedded Kafka Broker. Sa a pa elimine nesesite pou ekri tès inite pou metòd endividyèl, men nou prefere teste ka konplèks lè l sèvi avèk Kafka.

Yo te peye anpil atansyon sou trase mòso bwa pou ke TraceId yo pa ta pèdi lè eksepsyon yo rive pandan operasyon sèvis yo oswa lè w ap travay ak pakèt Kafka. Men, si pa te gen okenn pwoblèm espesyal ak youn nan premye, Lè sa a, nan dezyèm ka a nou oblije konekte tout TraceIds yo ki pakèt la te vini ak chwazi youn pou kontinye trase. Lè sa a, lè rechèch pa TraceId orijinal la, itilizatè a pral fasil jwenn ak ki trase a kontinye.

Objektif Travay la 3. Bezwen pou estoke yon gwo kantite done: Plis pase 1 milya etikèt pa ane pou tabak pou kont li vini nan X5. Yo bezwen aksè konstan ak rapid. An total, sistèm nan dwe trete apeprè 10 milya dosye sou istwa mouvman machandiz sa yo ki make.

Pou rezoud pwoblèm twazyèm lan, yo te chwazi baz done NoSQL MongoDB. Nou te konstwi yon shard de 5 noeuds Et chak noeuds gen yon réplique ansanm de 3 serveurs. Sa a pèmèt ou echèl sistèm nan orizontal, ajoute nouvo serveurs nan gwoup la, epi asire tolerans fay li yo. Isit la nou te rankontre yon lòt pwoblèm - asire tranzaksyon nan gwoup mongo a, pran an kont itilizasyon mikwosèvis orizontal évolutive. Pa egzanp, youn nan travay sistèm nou an se idantifye tantativ pou revann pwodwi ak menm kòd etikèt yo. Isit la, kouvri parèt ak eskanè inègza oswa operasyon inègza pa kesye. Nou te jwenn ke kopi sa yo ka rive tou de nan yon pakèt Kafka ke yo te trete, ak nan de pakèt ke yo te trete an paralèl. Kidonk, tcheke pou doublons pa demann baz done a pa t bay anyen. Pou chak mikwosèvis, nou rezoud pwoblèm nan separeman dapre lojik biznis sèvis sa a. Pou egzanp, pou chèk, nou te ajoute yon chèk andedan pakèt ak pwosesis separe pou aparans nan doublons lè mete.

Pou asire ke travay itilizatè yo ak istwa a nan operasyon yo pa nan okenn fason afekte bagay ki pi enpòtan - fonksyone nan pwosesis biznis nou an, nou te separe tout done istorik nan yon sèvis separe ak yon baz done separe, ki tou resevwa enfòmasyon atravè Kafka. . Nan fason sa a, itilizatè yo travay ak yon sèvis izole san yo pa afekte sèvis yo ki trete done pou operasyon kontinyèl yo.

Travay 4: Tretman keu ak siveyans:

Nan sistèm distribiye, pwoblèm ak erè inevitableman rive nan disponiblite a nan baz done, ke moun kap kriye, ak sous done ekstèn. Nan ka a nan Marcus, sous la nan erè sa yo se entegrasyon ak sistèm ekstèn. Li te nesesè yo jwenn yon solisyon ki ta pèmèt demann repete pou repons inègza ak kèk tan espesifye, men an menm tan an pa sispann trete demann siksè nan keu prensipal la. Pou rezon sa a, yo te chwazi konsèp sa yo rele "retry baze sou sijè". Pou chak sijè prensipal, youn oswa plizyè sijè retry yo kreye nan ki mesaj inègza yo voye epi an menm tan an reta nan pwosesis mesaj ki soti nan sijè prensipal la elimine. Konplo entèraksyon -

"Mache nan soulye mwen" - rete tann, èske yo make?

Pou aplike yon konplo konsa, nou te bezwen bagay sa yo: entegre solisyon sa a ak Spring epi evite repetisyon kòd. Pandan n ap navige sou entènèt la, nou te rankontre yon solisyon menm jan an ki baze sou Spring BeanPostProccessor, men li te sanble san nesesite ankonbran pou nou. Ekip nou an te fè yon solisyon ki pi senp ki pèmèt nou entegre nan sik prentan an pou kreye konsomatè yo epi ajoute Retry Konsomatè yo. Nou ofri yon pwototip nan solisyon nou an nan ekip la Spring, ou ka wè li isit la. Kantite Konsomatè Retry ak kantite tantativ pou chak konsomatè yo configuré atravè paramèt, tou depann de bezwen pwosesis biznis la, epi pou tout bagay travay, tout sa ki rete se ajoute annotation org.springframework.kafka.annotation.KafkaListener. , ki se abitye nan tout devlopè Spring.

Si mesaj la pa t 'kapab trete apre tout tantativ repete, li ale nan DLT (sijè lèt mouri) lè l sèvi avèk Spring DeadLetterPublishingRecoverer. Sou demann sipò a, nou te elaji fonksyonalite sa a epi kreye yon sèvis separe ki pèmèt ou wè mesaj ki enkli nan DLT, stackTrace, traceId ak lòt enfòmasyon itil sou yo. Anplis de sa, siveyans ak alèt yo te ajoute nan tout sijè DLT, e kounye a, an reyalite, aparans nan yon mesaj nan yon sijè DLT se yon rezon ki fè analize ak repare yon defo. Sa a se trè pratik - pa non an nan sijè a, nou imedyatman konprann nan ki etap nan pwosesis la pwoblèm nan leve, ki siyifikativman akselere rechèch la pou kòz rasin li yo.

"Mache nan soulye mwen" - rete tann, èske yo make?

Dènyèman, nou te aplike yon koòdone ki pèmèt nou renvoye mesaj lè l sèvi avèk sipò nou an apre elimine kòz yo (pa egzanp, retabli fonksyonalite a nan sistèm ekstèn lan) ak, nan kou, etabli defo ki koresponn lan pou analiz. Sa a se kote pwòp tèt ou-sijè nou an vin an sou la men: yo nan lòd yo pa rekòmanse yon chèn pwosesis long, ou ka rekòmanse li soti nan etap la vle.

"Mache nan soulye mwen" - rete tann, èske yo make?

Operasyon platfòm

Platfòm nan deja nan operasyon pwodiktif, chak jou nou fè livrezon ak anbakman, konekte nouvo sant distribisyon ak magazen. Kòm yon pati nan pilòt la, sistèm nan travay ak gwoup pwodwi "Tabak" ak "Soulye".

Tout ekip nou an patisipe nan fè pilòt, analize pwoblèm émergentes ak fè sijesyon pou amelyore pwodwi nou an, soti nan amelyore mòso bwa yo chanje pwosesis.

Pou nou pa repete erè nou yo, tout ka yo jwenn pandan pilòt la reflete nan tès otomatik yo. Prezans nan yon gwo kantite tès oto ak tès inite pèmèt ou fè tès regresyon ak enstale yon repare literalman nan kèk èdtan.

Koulye a, nou kontinye devlope ak amelyore platfòm nou an, epi toujou ap fè fas ak nouvo defi. Si w enterese, nou pral pale sou solisyon nou yo nan atik sa yo.

Sous: www.habr.com

Add nouvo kòmantè