"Naglakaw sa akong sapatos" - paghulat, gimarkahan ba sila?

Sukad sa 2019, ang Russia adunay balaod bahin sa mandatory nga pag-label. Ang balaod wala magamit sa tanan nga mga grupo sa mga butang, ug ang mga petsa sa pagsulod sa kusog sa mandatory nga pag-label alang sa mga grupo sa produkto lahi. Ang tabako, sapatos, ug mga tambal mao ang una nga ipailalom sa mandatory nga label; ang ubang mga produkto idugang sa ulahi, pananglitan, pahumot, panapton, ug gatas. Kini nga lehislatibo nga kabag-ohan nag-aghat sa pag-uswag sa mga bag-ong solusyon sa IT nga maghimo nga posible nga masubay ang tibuuk nga kadena sa kinabuhi sa usa ka produkto gikan sa produksiyon hangtod sa pagpalit sa katapusan nga konsumidor, sa tanan nga mga partisipante sa proseso: ang estado mismo ug ang tanan nga mga organisasyon nga namaligya mga butang nga adunay mandatory nga pag-label.

Sa X5, ang sistema nga magsubay sa gimarkahan nga mga butang ug magbinayloay sa datos sa estado ug mga supplier gitawag nga "Marcus". Atong isulti kanimo sa han-ay kung giunsa ug kinsa ang nagpalambo niini, kung unsa ang stack sa teknolohiya niini, ug ngano nga aduna kitay ikapasigarbo.

"Naglakaw sa akong sapatos" - paghulat, gimarkahan ba sila?

Tinuod nga HighLoad

Ang "Marcus" nagsulbad sa daghang mga problema, ang panguna mao ang interaksyon sa panagsama tali sa mga sistema sa impormasyon sa X5 ug ang sistema sa impormasyon sa estado alang sa mga produkto nga gimarkahan (GIS MP) aron masubay ang paglihok sa mga produkto nga adunay label. Gitipigan usab sa plataporma ang tanan nga mga code sa pag-label nga nadawat kanamo ug ang tibuuk nga kasaysayan sa paglihok niini nga mga code sa mga butang, ug nagtabang sa pagtangtang sa pag-re-grading sa mga produkto nga adunay label. Gamit ang pananglitan sa mga produkto sa tabako, nga gilakip sa unang mga grupo sa mga butang nga gimarkahan, usa lamang ka trak nga puno sa sigarilyo ang adunay mga 600 ka pakete, nga ang matag usa adunay kaugalingong talagsaon nga code. Ug ang tahas sa among sistema mao ang pagsubay ug pag-verify sa legalidad sa mga lihok sa matag ingon nga pakete tali sa mga bodega ug mga tindahan, ug sa katapusan pamatud-an ang pagkadawat sa ilang pagbaligya sa katapusan nga pumapalit. Ug among girekord ang mga 000 nga mga transaksyon sa salapi matag oras, ug kinahanglan usab namon nga irekord kung giunsa ang matag usa nga pakete nakasulod sa tindahan. Sa ingon, nga gikonsiderar ang tanan nga mga paglihok tali sa mga butang, gipaabut namon ang napulo ka bilyon nga mga rekord matag tuig.

Team M

Bisan pa sa kamatuoran nga si Marcus giisip nga usa ka proyekto sulod sa X5, kini gipatuman gamit ang usa ka produkto nga pamaagi. Ang team nagtrabaho sumala sa Scrum. Ang proyekto nagsugod sa miaging ting-init, apan ang unang mga resulta miabut lamang sa Oktubre - ang among kaugalingong team hingpit nga gitigum, ang sistema sa arkitektura naugmad ug ang mga ekipo gipalit. Karon ang team adunay 16 ka mga tawo, unom kanila ang nalambigit sa backend ug frontend development, tulo kanila nalambigit sa sistema sa pagtuki. Unom pa ka tawo ang nalambigit sa manual, load, automated testing, ug product maintenance. Dugang pa, kami adunay espesyalista sa SRE.

Dili lang ang mga developer ang nagsulat og code sa among team; halos tanan nga mga lalaki nahibal-an kung unsaon pagprograma ug pagsulat sa mga autotest, pag-load sa mga script ug mga script sa automation. Naghatag kami espesyal nga pagtagad niini, tungod kay bisan ang suporta sa produkto nanginahanglan taas nga lebel sa automation. Kanunay kaming naningkamot sa pagtambag ug pagtabang sa mga kauban nga wala pa nakaprograma kaniadto, ug hatagan sila og pipila ka gagmay nga mga buluhaton nga buhaton.

Tungod sa pandemya sa coronavirus, gibalhin namon ang tibuuk nga koponan sa hilit nga trabaho; ang pagkaanaa sa tanan nga mga himan alang sa pagdumala sa pag-uswag, ang gitukod nga daloy sa trabaho sa Jira ug GitLab nagpaposible nga dali nga makaagi sa kini nga yugto. Ang mga bulan nga gigugol sa layo nagpakita nga ang pagka-produktibo sa team wala mag-antus ingon nga resulta; alang sa kadaghanan, ang kaharuhay sa trabaho misaka, ang bugtong butang nga kulang mao ang live nga komunikasyon.

Hilit nga miting sa team

"Naglakaw sa akong sapatos" - paghulat, gimarkahan ba sila?

Mga miting sa panahon sa layo nga trabaho

"Naglakaw sa akong sapatos" - paghulat, gimarkahan ba sila?

Technology stack sa solusyon

Ang standard repository ug CI/CD tool para sa X5 mao ang GitLab. Gigamit namon kini alang sa pagtipig sa code, padayon nga pagsulay, ug pag-deploy sa pagsulay ug mga server sa produksiyon. Gigamit usab namo ang praktis sa pagrepaso sa code, kung ang labing menos 2 nga mga kauban kinahanglan nga aprobahan ang mga pagbag-o nga gihimo sa developer sa code. Ang mga static code analyzers nga SonarQube ug JaCoCo motabang kanamo nga magpabiling limpyo ang among code ug masiguro ang gikinahanglan nga lebel sa coverage sa unit test. Ang tanan nga mga pagbag-o sa code kinahanglan nga moagi niini nga mga pagsusi. Ang tanan nga mga script sa pagsulay nga gipadagan sa mano-mano nga pagkahuman awtomatiko.

Alang sa malampuson nga pagpatuman sa mga proseso sa negosyo ni "Marcus", kinahanglan namon nga sulbaron ang daghang mga problema sa teknolohiya, bahin sa matag usa.

Buluhaton 1. Ang panginahanglan alang sa pinahigda scalability sa sistema

Aron masulbad kini nga problema, gipili namon ang usa ka pamaagi sa microservice sa arkitektura. Sa samang higayon, importante kaayo nga masabtan ang mga bahin sa responsibilidad sa mga serbisyo. Gisulayan namon nga bahinon sila sa mga operasyon sa negosyo, nga gikonsiderar ang mga detalye sa mga proseso. Pananglitan, ang pagdawat sa usa ka bodega dili kaayo kanunay, apan dako kaayo nga operasyon, diin gikinahanglan nga dali nga makuha gikan sa regulator sa estado ang kasayuran bahin sa mga yunit sa mga butang nga gidawat, ang gidaghanon niini sa usa ka pagpadala moabot sa 600000. , susiha ang pagkadawat sa pagdawat niini nga produkto ngadto sa bodega ug ibalik ang tanang gikinahanglan nga impormasyon alang sa sistema sa automation sa bodega. Apan ang pagpadala gikan sa mga bodega adunay labi ka labi ka kusog, apan sa parehas nga oras naglihok nga adunay gamay nga gidaghanon sa datos.

Among gipatuman ang tanang mga serbisyo sa walay estado nga basehan ug bisan sa pagsulay sa pagbahin sa internal nga mga operasyon ngadto sa mga lakang, gamit ang gitawag namo nga Kafka-sa-kaugalingon nga mga hilisgutan. Kini kung ang usa ka microservice nagpadala usa ka mensahe sa iyang kaugalingon, nga nagtugot kanimo nga balansehon ang pagkarga sa daghang mga operasyon nga kusog sa kapanguhaan ug gipasimple ang pagpadayon sa produkto, apan labi pa kana sa ulahi.

Nakahukom kami nga ibulag ang mga module alang sa interaksyon sa mga eksternal nga sistema sa lainlaing mga serbisyo. Naghimo kini nga posible nga masulbad ang problema sa kanunay nga pagbag-o sa mga API sa mga eksternal nga sistema, nga halos wala’y epekto sa mga serbisyo nga adunay gamit sa negosyo.

"Naglakaw sa akong sapatos" - paghulat, gimarkahan ba sila?

Ang tanan nga mga microservices gipakatap sa usa ka OpenShift cluster, nga nagsulbad sa problema sa pag-scale sa matag microservice ug nagtugot kanamo nga dili mogamit sa mga tool sa Pagdiskubre sa Serbisyo sa ikatulo nga partido.

Buluhaton 2. Ang panginahanglan sa pagpadayon sa usa ka taas nga load ug kaayo intensive data exchange tali sa mga serbisyo sa plataporma: Atol sa yugto sa paglunsad sa proyekto lamang, mga 600 ka operasyon kada segundo ang gihimo. Gilauman namo nga kini nga kantidad mosaka ngadto sa 5000 ops/sec samtang ang mga retail outlet nagkonektar sa among plataporma.

Nasulbad kini nga problema pinaagi sa pag-deploy sa usa ka cluster sa Kafka ug hapit hingpit nga gibiyaan ang dungan nga interaksyon tali sa mga microservice sa platform. Nagkinahanglan kini og usa ka mabinantayon nga pag-analisar sa mga kinahanglanon sa sistema, tungod kay dili tanan nga mga operasyon mahimong asynchronous. Sa samang higayon, dili lamang kami nagpadala sa mga panghitabo pinaagi sa broker, apan nagpadala usab sa tanang gikinahanglan nga impormasyon sa negosyo sa mensahe. Busa, ang gidak-on sa mensahe mahimong moabot sa pipila ka gatos ka kilobytes. Ang limitasyon sa gidak-on sa mensahe sa Kafka nagkinahanglan kanato sa tukmang pagtagna sa gidak-on sa mensahe, ug kon gikinahanglan, atong bahinon sila, apan ang dibisyon lohikal, nga may kalabutan sa mga operasyon sa negosyo.
Pananglitan, among gibahin ang mga butang nga moabut sa usa ka awto sa mga kahon. Alang sa dungan nga mga operasyon, gigahin ang bulag nga mga microservice ug gihimo ang hingpit nga pagsulay sa pagkarga. Ang paggamit sa Kafka nagpresentar kanamo og lain nga hagit - ang pagsulay sa operasyon sa among serbisyo nga gikonsiderar ang panagsama sa Kafka naghimo sa tanan namon nga mga pagsulay sa yunit nga asynchronous. Nasulbad namo kini nga problema pinaagi sa pagsulat sa among kaugalingong mga pamaagi sa paggamit gamit ang Embedded Kafka Broker. Dili kini magwagtang sa panginahanglan sa pagsulat sa mga pagsulay sa yunit alang sa tagsa-tagsa nga mga pamaagi, apan mas gusto namo nga sulayan ang mga komplikadong kaso gamit ang Kafka.

Daghang pagtagad ang gihatag sa pagsubay sa mga troso aron ang ilang TraceId dili mawala kung adunay mga eksepsiyon sa panahon sa operasyon sa mga serbisyo o kung nagtrabaho kauban ang Kafka batch. Ug kung wala’y espesyal nga mga isyu sa una, nan sa ikaduha nga kaso napugos kami sa pag-log sa tanan nga TraceId nga kauban sa batch ug pagpili usa aron magpadayon sa pagsubay. Unya, kung mangita pinaagi sa orihinal nga TraceId, dali nga mahibal-an sa tiggamit kung diin nagpadayon ang pagsubay.

Buluhaton 3. Ang panginahanglan sa pagtipig sa daghang mga datos: Kapin sa 1 ka bilyon nga label kada tuig para sa tabako lamang ang moabot sa X5. Nagkinahanglan sila kanunay ug dali nga pag-access. Sa kinatibuk-an, kinahanglan nga iproseso sa sistema ang mga 10 bilyon nga mga rekord sa kasaysayan sa paglihok niining mga butang nga gimarkahan.

Aron masulbad ang ikatulo nga problema, gipili ang database sa NoSQL nga MongoDB. Nagtukod kami usa ka shard sa 5 nga mga node ug ang matag node adunay usa ka Replica Set sa 3 nga mga server. Gitugotan ka niini nga sukdon ang sistema nga pinahigda, pagdugang bag-ong mga server sa cluster, ug pagsiguro nga ang pagtugot sa sayup niini. Dinhi among nasugatan ang laing problema - ang pagsiguro sa transactionality sa mongo cluster, nga gikonsiderar ang paggamit sa horizontally scalable microservices. Pananglitan, usa sa mga buluhaton sa among sistema mao ang pag-ila sa mga pagsulay nga ibaligya pag-usab ang mga produkto nga adunay parehas nga mga code sa pag-label. Dinhi, ang mga overlay makita nga adunay mga sayup nga pag-scan o sayup nga mga operasyon sa mga cashier. Among nakita nga ang maong mga duplicate mahimong mahitabo sulod sa usa ka batch sa Kafka nga giproseso, ug sulod sa duha ka batch nga giproseso nga managsama. Sa ingon, ang pagsusi sa mga duplicate pinaagi sa pagpangutana sa database wala maghatag bisan unsa. Alang sa matag microservice, gilain namo ang pagsulbad sa problema base sa lohika sa negosyo niini nga serbisyo. Pananglitan, alang sa mga tseke, gidugang namo ang usa ka tseke sulod sa batch ug gilain nga pagproseso alang sa dagway sa mga duplicate sa dihang gisal-ot.

Aron masiguro nga ang pagtrabaho sa mga tiggamit sa kasaysayan sa mga operasyon dili sa bisan unsang paagi makaapekto sa labing hinungdanon nga butang - ang paglihok sa among mga proseso sa negosyo, gibulag namon ang tanan nga mga datos sa kasaysayan sa usa ka lahi nga serbisyo nga adunay usa ka lahi nga database, nga nakadawat usab kasayuran pinaagi sa Kafka . Niining paagiha, ang mga tiggamit nagtrabaho sa usa ka nahilit nga serbisyo nga wala makaapekto sa mga serbisyo nga nagproseso sa datos alang sa nagpadayon nga mga operasyon.

Buluhaton 4: Pagproseso ug pag-monitor sa pila:

Sa gipang-apod-apod nga mga sistema, ang mga problema ug mga sayup dili kalikayan nga motumaw sa pagkaanaa sa mga database, pila, ug mga gigikanan sa datos sa gawas. Sa kaso ni Marcus, ang gigikanan sa ingon nga mga sayup mao ang paghiusa sa mga eksternal nga sistema. Kinahanglan nga mangita usa ka solusyon nga magtugot sa gibalikbalik nga mga hangyo alang sa sayup nga mga tubag nga adunay piho nga oras, apan sa samang higayon dili mohunong sa pagproseso sa malampuson nga mga hangyo sa panguna nga pila. Alang niini nga katuyoan, gipili ang gitawag nga "topic based retry" nga konsepto. Alang sa matag nag-unang hilisgutan, usa o daghan nga mga hilisgutan sa pagsulay pag-usab gihimo diin ang mga sayup nga mensahe gipadala ug sa parehas nga oras ang paglangan sa pagproseso sa mga mensahe gikan sa panguna nga hilisgutan giwagtang. Eskema sa Interaksyon -

"Naglakaw sa akong sapatos" - paghulat, gimarkahan ba sila?

Aron ipatuman ang ingon nga laraw, kinahanglan namon ang mga musunud: aron mahiusa kini nga solusyon sa Spring ug malikayan ang pagdoble sa code. Samtang nag-surf sa web, nakit-an namon ang parehas nga solusyon nga gibase sa Spring BeanPostProccessor, apan ingon og dili kinahanglan nga hasol kanamo. Naghimo ang among team og mas simple nga solusyon nga nagtugot kanamo sa pag-integrate sa Spring cycle para sa pagmugna og mga konsumidor ug dugangan ang Retry Consumers. Nagtanyag kami og prototype sa among solusyon sa Spring team, makita nimo kini dinhi. Ang gidaghanon sa Retry Consumers ug ang gidaghanon sa mga pagsulay alang sa matag konsumidor gi-configure pinaagi sa mga parameter, depende sa mga panginahanglan sa proseso sa negosyo, ug aron ang tanan molihok, ang nahabilin mao ang pagdugang sa annotation org.springframework.kafka.annotation.KafkaListener , nga pamilyar sa tanan nga mga developer sa Spring.

Kung ang mensahe dili maproseso pagkahuman sa tanan nga pagsulay pag-usab, kini moadto sa DLT (patay nga sulat nga hilisgutan) gamit ang Spring DeadLetterPublishingRecoverer. Sa hangyo sa suporta, gipalapdan namo kini nga gamit ug naghimo ug bulag nga serbisyo nga nagtugot kanimo sa pagtan-aw sa mga mensahe nga gilakip sa DLT, stackTrace, traceId ug uban pang mapuslanong impormasyon bahin niini. Dugang pa, ang pag-monitor ug mga alerto gidugang sa tanan nga mga hilisgutan sa DLT, ug karon, sa tinuud, ang pagpakita sa usa ka mensahe sa usa ka hilisgutan sa DLT usa ka hinungdan sa pag-analisar ug pag-ayo sa usa ka depekto. Kini sayon ​​​​kaayo - pinaagi sa ngalan sa hilisgutan, masabtan dayon nato kung unsa nga lakang sa proseso ang mitungha ang problema, nga makapadali sa pagpangita sa hinungdan niini.

"Naglakaw sa akong sapatos" - paghulat, gimarkahan ba sila?

Labing bag-o, nagpatuman kami usa ka interface nga nagtugot kanamo sa pagpadala pag-usab sa mga mensahe gamit ang among suporta pagkahuman sa pagwagtang sa ilang mga hinungdan (pananglitan, pagpasig-uli sa pagpaandar sa eksternal nga sistema) ug, siyempre, pag-establisar sa katugbang nga depekto alang sa pagtuki. Dinhi diin magamit ang among kaugalingon nga mga hilisgutan: aron dili ma-restart ang usa ka taas nga kadena sa pagproseso, mahimo nimo kini i-restart gikan sa gusto nga lakang.

"Naglakaw sa akong sapatos" - paghulat, gimarkahan ba sila?

Operasyon sa Platform

Ang plataporma anaa na sa produktibo nga operasyon, kada adlaw nagpahigayon kami og mga paghatod ug pagpadala, pagkonektar sa mga bag-ong distribution center ug mga tindahan. Isip kabahin sa piloto, ang sistema nagtrabaho uban sa mga grupo sa produkto nga "Tabako" ug "Mga Sapatos".

Ang among tibuok nga team miapil sa pagpahigayon og mga piloto, pag-analisar sa mga mitumaw nga mga problema ug paghimo og mga sugyot alang sa pagpalambo sa among produkto, gikan sa pagpaayo sa mga troso ngadto sa pagbag-o sa mga proseso.

Aron dili masubli ang among mga kasaypanan, ang tanan nga mga kaso nga nakit-an sa panahon sa piloto makita sa mga awtomatiko nga pagsulay. Ang presensya sa daghang mga autotest ug mga pagsulay sa yunit nagtugot kanimo sa pagpahigayon sa regression testing ug pag-instalar sa usa ka hotfix sa literal sulod sa pipila ka oras.

Karon nagpadayon kami sa pagpalambo ug pagpalambo sa among plataporma, ug kanunay nga nag-atubang sa bag-ong mga hagit. Kung interesado ka, hisgutan namon ang among mga solusyon sa sunod nga mga artikulo.

Source: www.habr.com

Idugang sa usa ka comment