"Mixi fiż-żraben tiegħi" - stenna, huma mmarkati?

Mill-2019, ir-Russja kellha liġi dwar it-tikkettar obbligatorju. Il-liġi ma tapplikax għall-gruppi kollha ta 'oġġetti, u d-dati għad-dħul fis-seħħ ta' tikkettar obbligatorju għal gruppi ta 'prodotti huma differenti. It-tabakk, iż-żraben u l-mediċini se jkunu l-ewwel li jkunu suġġetti għal tikkettar obbligatorju; prodotti oħra se jiżdiedu aktar tard, pereżempju, fwieħa, tessuti u ħalib. Din l-innovazzjoni leġiżlattiva wasslet għall-iżvilupp ta’ soluzzjonijiet tal-IT ġodda li se jagħmluha possibbli li tiġi rintraċċata l-katina kollha tal-ħajja ta’ prodott mill-produzzjoni sax-xiri mill-konsumatur aħħari, lill-parteċipanti kollha fil-proċess: kemm l-istat innifsu kif ukoll l-organizzazzjonijiet kollha li jbigħu l-oġġetti b’ tikkettar obbligatorju.

F'X5, is-sistema li se ttraċċa oġġetti ttikkettjati u tiskambja data mal-istat u l-fornituri tissejjaħ "Marcus". Ejja ngħidulek fl-ordni kif u min żviluppaha, x'inhu l-munzell tat-teknoloġija tiegħu, u għaliex għandna xi ħaġa li nkunu kburin biha.

"Mixi fiż-żraben tiegħi" - stenna, huma mmarkati?

Real HighLoad

"Marcus" issolvi ħafna problemi, il-wieħed ewlieni huwa l-interazzjoni ta 'integrazzjoni bejn is-sistemi ta' informazzjoni X5 u s-sistema ta 'informazzjoni statali għal prodotti ttikkettjati (GIS MP) biex issegwi l-moviment ta' prodotti ttikkettjati. Il-pjattaforma taħżen ukoll il-kodiċijiet kollha tat-tikkettar li rċevejna u l-istorja kollha tal-moviment ta 'dawn il-kodiċijiet bejn l-oġġetti, u tgħin biex tiġi eliminata l-klassifikazzjoni mill-ġdid tal-prodotti ttikkettjati. Bl-użu tal-eżempju tal-prodotti tat-tabakk, li ġew inklużi fl-ewwel gruppi ta 'oġġetti ttikkettjati, trakk wieħed biss ta' sigaretti fih madwar 600 pakkett, li kull wieħed minnhom għandu l-kodiċi uniku tiegħu. U l-kompitu tas-sistema tagħna huwa li ssegwi u tivverifika l-legalità tal-movimenti ta 'kull pakkett bħal dan bejn imħażen u ħwienet, u fl-aħħar tivverifika l-ammissibbiltà tal-bejgħ tagħhom lix-xerrej finali. U nirreġistraw madwar 000 tranżazzjoni fi flus fis-siegħa, u għandna bżonn ukoll nirreġistraw kif kull pakkett bħal dan daħal fil-maħżen. Għalhekk, meta wieħed iqis il-movimenti kollha bejn l-oġġetti, qed nistennew għexieren ta 'biljuni ta' rekords fis-sena.

Tim M

Minkejja l-fatt li Marcus huwa meqjus bħala proġett fi ħdan X5, qed jiġi implimentat bl-użu ta 'approċċ ta' prodott. It-tim jaħdem skond Scrum. Il-proġett beda fis-sajf li għadda, iżda l-ewwel riżultati waslu biss f'Ottubru - it-tim tagħna stess ġie mmuntat bis-sħiħ, l-arkitettura tas-sistema ġiet żviluppata u nxtara t-tagħmir. Issa t-tim għandu 16-il persuna, li sitta minnhom huma involuti fl-iżvilupp backend u frontend, li tlieta minnhom huma involuti fl-analiżi tas-sistema. Sitt persuni oħra huma involuti fl-ittestjar manwali, tagħbija, awtomatizzat, u manutenzjoni tal-prodott. Barra minn hekk, għandna speċjalista SRE.

Mhux biss l-iżviluppaturi jiktbu l-kodiċi fit-tim tagħna; kważi l-ġuvini kollha jafu kif jipprogrammaw u jiktbu awtotests, jillowdja skripts u skripts ta 'awtomazzjoni. Aħna nagħtu attenzjoni speċjali lil dan, peress li anke l-appoġġ tal-prodott jeħtieġ livell għoli ta 'awtomazzjoni. Aħna dejjem nippruvaw nagħtu pariri u ngħinu lill-kollegi li ma pprogrammawx qabel, u nagħtuhom xi kompiti żgħar biex jaħdmu fuqhom.

Minħabba l-pandemija tal-koronavirus, ittrasferijna t-tim kollu għal xogħol remot; id-disponibbiltà tal-għodod kollha għall-ġestjoni tal-iżvilupp, il-fluss tax-xogħol mibni f'Jira u GitLab għamilna possibbli li tgħaddi faċilment minn dan l-istadju. Ix-xhur li qattgħu mill-bogħod urew li l-produttività tat-tim ma battitx bħala riżultat; għal ħafna, il-kumdità fuq ix-xogħol żdiedet, l-unika ħaġa nieqsa kienet il-komunikazzjoni diretta.

Laqgħa tat-tim mill-bogħod

"Mixi fiż-żraben tiegħi" - stenna, huma mmarkati?

Laqgħat waqt xogħol mill-bogħod

"Mixi fiż-żraben tiegħi" - stenna, huma mmarkati?

Munzell tat-teknoloġija tas-soluzzjoni

Ir-repożitorju standard u l-għodda CI/CD għal X5 huwa GitLab. Aħna nużawha għall-ħażna tal-kodiċi, ittestjar kontinwu, u skjerament għal servers ta 'ttestjar u produzzjoni. Aħna nużaw ukoll il-prattika tar-reviżjoni tal-kodiċi, meta mill-inqas 2 kollegi jeħtieġu japprovaw bidliet magħmula mill-iżviluppatur fil-kodiċi. Analizzaturi statiċi tal-kodiċi SonarQube u JaCoCo jgħinuna nżommu l-kodiċi tagħna nadif u jiżguraw il-livell meħtieġ ta 'kopertura tat-test tal-unità. Il-bidliet kollha fil-kodiċi għandhom jgħaddu minn dawn il-kontrolli. L-iskripts tat-test kollha li jitmexxew manwalment huma sussegwentement awtomatizzati.

Għall-implimentazzjoni b'suċċess tal-proċessi tan-negozju minn "Marcus", kellna nsolvu numru ta 'problemi teknoloġiċi, dwar kull wieħed fl-ordni.

Kompitu 1. Il-ħtieġa għal skalabbiltà orizzontali tas-sistema

Biex insolvu din il-problema, għażilna approċċ ta’ mikroservizz għall-arkitettura. Fl-istess ħin, kien importanti ħafna li wieħed jifhem l-oqsma ta’ responsabbiltà tas-servizzi. Ippruvajna naqsmuhom f'operazzjonijiet tan-negozju, b'kont meħud tal-ispeċifiċitajiet tal-proċessi. Pereżempju, l-aċċettazzjoni f'maħżen mhix operazzjoni frekwenti ħafna, iżda fuq skala kbira ħafna, li matulha huwa meħtieġ li tinkiseb malajr mingħand ir-regolatur tal-istat informazzjoni dwar l-unitajiet tal-merkanzija li qed jiġu aċċettati, li n-numru tagħhom f'kunsinna waħda jilħaq 600000 , iċċekkja l-ammissibilità li taċċetta dan il-prodott fil-maħżen u rritorna l-informazzjoni kollha meħtieġa għas-sistema ta 'awtomazzjoni tal-maħżen. Iżda l-konsenja mill-imħażen għandha intensità ħafna akbar, iżda fl-istess ħin topera b'volumi żgħar ta 'dejta.

Aħna nimplimentaw is-servizzi kollha fuq bażi mingħajr stat u anke nippruvaw naqsmu l-operazzjonijiet interni fi passi, billi nużaw dawk li nsejħu self-topics Kafka. Dan huwa meta mikroservizz jibgħat messaġġ lilu nnifsu, li jippermettilek tibbilanċja t-tagħbija fuq operazzjonijiet aktar intensivi fir-riżorsi u tissimplifika l-manutenzjoni tal-prodott, iżda aktar dwar dan aktar tard.

Iddeċidejna li nisseparaw il-moduli għall-interazzjoni ma 'sistemi esterni f'servizzi separati. Dan għamilha possibbli li tissolva l-problema tal-APIs ta' sistemi esterni li jinbidlu ta' spiss, mingħajr prattikament l-ebda impatt fuq is-servizzi b'funzjonalità tan-negozju.

"Mixi fiż-żraben tiegħi" - stenna, huma mmarkati?

Il-mikroservizzi kollha huma skjerati fi cluster OpenShift, li jsolvi kemm il-problema tal-iskala ta’ kull mikroservizz kif ukoll jippermettilna ma nużawx għodod ta’ Service Discovery ta’ partijiet terzi.

Kompitu 2. Il-ħtieġa li tinżamm tagħbija għolja u skambju ta' data intensiv ħafna bejn is-servizzi tal-pjattaforma: Matul il-fażi tat-tnedija tal-proġett biss, isiru madwar 600 operazzjoni kull sekonda. Nistennew li dan il-valur jiżdied għal 5000 ops/sek hekk kif il-ħwienet tal-bejgħ bl-imnut jgħaqqdu mal-pjattaforma tagħna.

Din il-problema ġiet solvuta billi ġie skjerat cluster Kafka u kważi kompletament abbandunat l-interazzjoni sinkronika bejn il-mikroservizzi tal-pjattaforma. Dan jeħtieġ analiżi bir-reqqa tar-rekwiżiti tas-sistema, peress li mhux l-operazzjonijiet kollha jistgħu jkunu asinkroniċi. Fl-istess ħin, aħna mhux biss jittrasmettu avvenimenti permezz tas-sensar, iżda wkoll jittrasmettu l-informazzjoni kollha tan-negozju meħtieġa fil-messaġġ. Għalhekk, id-daqs tal-messaġġ jista' jilħaq diversi mijiet ta' kilobytes. Il-limitu tad-daqs tal-messaġġ f'Kafka jeħtieġ li nbassru b'mod preċiż id-daqs tal-messaġġ, u jekk meħtieġ, naqsmuhom, iżda d-diviżjoni hija loġika, relatata mal-operazzjonijiet tan-negozju.
Pereżempju, naqsmu l-oġġetti li jaslu f'karozza f'kaxxi. Għal operazzjonijiet sinkroniċi, mikroservizzi separati huma allokati u jitwettaq ittestjar bir-reqqa tat-tagħbija. L-użu ta' Kafka ppreżentalna sfida oħra - l-ittestjar tal-operat tas-servizz tagħna filwaqt li titqies l-integrazzjoni ta' Kafka jagħmel it-testijiet tal-unità tagħna kollha asinkroniċi. Solvejna din il-problema billi niktbu l-metodi ta 'utilità tagħna stess bl-użu ta' Embedded Kafka Broker. Dan ma jeliminax il-ħtieġa li jinkitbu testijiet tal-unità għal metodi individwali, iżda nippreferu li nittestjaw każijiet kumplessi billi tuża Kafka.

Ingħatat ħafna attenzjoni lit-traċċar taz-zkuk sabiex it-TraceId tagħhom ma jintilifx meta jseħħu eċċezzjonijiet waqt it-tħaddim tas-servizzi jew meta jaħdmu mal-lott Kafka. U jekk ma kienx hemm kwistjonijiet speċjali ma 'l-ewwel waħda, allura fit-tieni każ aħna sfurzati nilloggjaw it-TraceIds kollha li ġie magħhom il-lott u nagħżlu wieħed biex inkomplu ntraċċaw. Imbagħad, meta jfittex mill-TraceId oriġinali, l-utent faċilment isib li biha kompla t-traċċar.

Kompitu 3. Il-ħtieġa li taħżen ammont kbir ta 'dejta: Aktar minn biljun tikketta fis-sena għat-tabakk biss jaslu għal X1. Huma jeħtieġu aċċess kostanti u rapidu. B'kollox, is-sistema trid tipproċessa madwar 5 biljun rekord tal-istorja tal-moviment ta 'dawn l-oġġetti ttikkettjati.

Biex issolvi t-tielet problema, intgħażlet id-database NoSQL MongoDB. Bnejna shard ta’ 5 nodi u kull nodu għandu Sett ta’ Repliki ta’ 3 servers. Dan jippermettilek li tiskala s-sistema orizzontalment, billi żżid servers ġodda mal-cluster, u tiżgura t-tolleranza tal-ħsarat tagħha. Hawnhekk iltqajna ma 'problema oħra - li niżguraw it-tranżazzjoni fil-grupp mongo, b'kont meħud tal-użu ta' mikroservizzi li jistgħu jegħlbuhom skala orizzontali. Pereżempju, wieħed mill-kompiti tas-sistema tagħna huwa li tidentifika tentattivi biex jerġgħu jbiegħu prodotti bl-istess kodiċi ta 'tikkettar. Hawnhekk, overlays jidhru bi skans żbaljati jew operazzjonijiet żbaljati mill-kaxxiera. Aħna sibna li duplikati bħal dawn jistgħu jseħħu kemm f'lott wieħed Kafka li qed jiġi pproċessat, kif ukoll f'żewġ lottijiet li qed jiġu pproċessati b'mod parallel. Għalhekk, l-iċċekkjar għal duplikati billi mistoqsija fuq id-database ma tat xejn. Għal kull mikroservizz, solvejna l-problema separatament ibbażata fuq il-loġika tan-negozju ta 'dan is-servizz. Pereżempju, għall-kontrolli, aħna żidna kontroll ġewwa lott u proċessar separat għad-dehra ta 'duplikati meta ddaħħal.

Biex jiġi żgurat li x-xogħol tal-utenti bl-istorja tal-operazzjonijiet bl-ebda mod ma jaffettwa l-aktar ħaġa importanti - il-funzjonament tal-proċessi tan-negozju tagħna, aħna sseparajna d-dejta storika kollha f'servizz separat b'database separata, li tirċievi wkoll informazzjoni permezz ta 'Kafka . B'dan il-mod, l-utenti jaħdmu b'servizz iżolat mingħajr ma jaffettwaw is-servizzi li jipproċessaw id-dejta għal operazzjonijiet li jkunu għaddejjin.

Kompitu 4: Riproċessar u monitoraġġ tal-kju:

F'sistemi distribwiti, problemi u żbalji inevitabbilment iqumu fid-disponibbiltà ta 'databases, kjuwijiet, u sorsi ta' data esterni. Fil-każ ta' Marcus, is-sors ta' żbalji bħal dawn huwa l-integrazzjoni ma' sistemi esterni. Kien meħtieġ li tinstab soluzzjoni li tippermetti talbiet ripetuti għal tweġibiet żbaljati b'xi timeout speċifikat, iżda fl-istess ħin ma tieqafx tipproċessa talbiet b'suċċess fil-kju prinċipali. Għal dan il-għan, intgħażel l-hekk imsejjaħ kunċett ta’ “retry ibbażat fuq is-suġġett”. Għal kull suġġett ewlieni, jinħolqu suġġett wieħed jew aktar mill-ġdid li jintbagħtu messaġġi żbaljati u fl-istess ħin jiġi eliminat id-dewmien fl-ipproċessar tal-messaġġi mis-suġġett prinċipali. Skema ta' interazzjoni -

"Mixi fiż-żraben tiegħi" - stenna, huma mmarkati?

Biex nimplimentaw skema bħal din, kellna bżonn dan li ġej: nintegraw din is-soluzzjoni ma' Spring u nevitaw id-duplikazzjoni tal-kodiċi. Waqt li nimxu fuq il-web, iltqajna ma 'soluzzjoni simili bbażata fuq Spring BeanPostProccessor, iżda dehret ingombranti bla bżonn għalina. It-tim tagħna għamel soluzzjoni aktar sempliċi li tippermettilna nintegraw fiċ-ċiklu tar-Rebbiegħa għall-ħolqien ta 'konsumaturi u addizzjonalment żid Konsumaturi mill-ġdid. Offrejna prototip tas-soluzzjoni tagħna lit-tim tar-Rebbiegħa, tista 'taraha hawn. In-numru ta' Konsumaturi mill-ġdid u n-numru ta' tentattivi għal kull konsumatur huma kkonfigurati permezz ta' parametri, skont il-ħtiġijiet tal-proċess tan-negozju, u biex kollox jaħdem, jibqa' biss li żżid l-annotazzjoni org.springframework.kafka.annotation.KafkaListener , li hija familjari għall-iżviluppaturi kollha tar-Rebbiegħa.

Jekk il-messaġġ ma setax jiġi pproċessat wara kull tentattiv mill-ġdid, imur f'DLT (suġġett ta' ittra mejta) bl-użu ta' Spring DeadLetterPublishingRecoverer. Fuq talba ta 'appoġġ, wessgħu din il-funzjonalità u ħloqna servizz separat li jippermettilek tara messaġġi inklużi f'DLT, stackTrace, traceId u informazzjoni utli oħra dwarhom. Barra minn hekk, il-monitoraġġ u t-twissijiet ġew miżjuda mas-suġġetti DLT kollha, u issa, fil-fatt, id-dehra ta 'messaġġ f'suġġett DLT hija raġuni biex tanalizza u tissewwa difett. Dan huwa konvenjenti ħafna - bl-isem tas-suġġett, aħna nifhmu immedjatament f'liema pass tal-proċess qamet il-problema, li tħaffef b'mod sinifikanti t-tfittxija għall-kawża ewlenija tagħha.

"Mixi fiż-żraben tiegħi" - stenna, huma mmarkati?

Iktar reċentement, implimentajna interface li tippermettilna nibgħatu mill-ġdid il-messaġġi bl-użu tal-appoġġ tagħna wara li neliminaw il-kawżi tagħhom (pereżempju, nirrestawraw il-funzjonalità tas-sistema esterna) u, ovvjament, nistabbilixxu d-difett korrispondenti għall-analiżi. Dan huwa fejn is-suġġetti tagħna nfushom jiġu utli: sabiex ma terġax tibda katina twila ta 'proċessar, tista' terġa 'tibda mill-pass mixtieq.

"Mixi fiż-żraben tiegħi" - stenna, huma mmarkati?

Operazzjoni tal-Pjattaforma

Il-pjattaforma diġà tinsab f'operazzjoni produttiva, kuljum inwettqu kunsinni u vjeġġi, nikkonnettjaw ċentri ta 'distribuzzjoni u ħwienet ġodda. Bħala parti mill-pilota, is-sistema taħdem mal-gruppi ta 'prodotti "Tabakk" u "Żraben".

It-tim kollu tagħna jipparteċipa fit-twettiq ta 'piloti, janalizza problemi emerġenti u jagħmel suġġerimenti għat-titjib tal-prodott tagħna, minn titjib ta' zkuk għal proċessi li jinbidlu.

Sabiex ma nirrepetux l-iżbalji tagħna, il-każijiet kollha misjuba waqt il-pilota huma riflessi f'testijiet awtomatizzati. Il-preżenza ta 'numru kbir ta' testijiet awtomatiċi u testijiet ta 'unità tippermettilek twettaq testijiet ta' rigressjoni u tinstalla hotfix litteralment fi żmien ftit sigħat.

Issa nkomplu niżviluppaw u ntejbu l-pjattaforma tagħna, u kontinwament niffaċċjaw sfidi ġodda. Jekk int interessat, nitkellmu dwar is-soluzzjonijiet tagħna fl-artikoli li ġejjin.

Sors: www.habr.com

Żid kumment