"Kev taug kev hauv kuv nkawm khau" - tos, lawv puas tau cim?

Txij li xyoo 2019, Russia tau muaj txoj cai lij choj hais txog qhov yuav tsum tau sau npe. Txoj cai lij choj tsis siv rau txhua pab pawg ntawm cov khoom, thiab cov hnub rau kev nkag mus rau hauv lub zog ntawm qhov yuav tsum tau ua daim ntawv lo rau pawg khoom sib txawv. Kev haus luam yeeb, khau, thiab tshuaj yuav yog thawj zaug uas yuav tsum tau sau npe; lwm yam khoom yuav raug ntxiv tom qab, piv txwv li, naj hoom, textiles, thiab mis nyuj. Cov kev cai lij choj tshiab no tau ua rau kev tsim kho tshiab IT cov kev daws teeb meem uas yuav ua rau nws tuaj yeem taug qab tag nrho lub neej ntawm cov khoom lag luam los ntawm kev tsim khoom los ntawm cov neeg siv khoom kawg, rau txhua tus neeg koom nrog hauv cov txheej txheem: ob lub xeev nws tus kheej thiab txhua lub koom haum muag khoom nrog. yuav tsum labeling.

Hauv X5, lub kaw lus uas yuav taug qab cov khoom lag luam thiab pauv cov ntaub ntawv nrog lub xeev thiab cov chaw muag khoom hu ua "Marcus". Cia peb qhia koj nyob rau hauv kev txiav txim yuav ua li cas thiab leej twg tsim nws, dab tsi nws cov cuab yeej technology yog dab tsi, thiab yog vim li cas peb muaj ib yam dab tsi yuav tsum txaus siab rau.

"Kev taug kev hauv kuv nkawm khau" - tos, lawv puas tau cim?

Tiag tiag HighLoad

"Marcus" daws tau ntau yam teeb meem, qhov tseem ceeb yog kev sib koom ua ke ntawm X5 cov ntaub ntawv xov xwm thiab lub xeev cov ntaub ntawv kaw lus rau cov khoom lag luam (GIS MP) txhawm rau taug qab kev txav ntawm cov khoom sau npe. Lub platform tseem khaws tag nrho cov ntawv sau npe tau txais los ntawm peb thiab tag nrho keeb kwm ntawm kev txav ntawm cov lej no hla cov khoom, thiab pab tshem tawm kev rov muab qhab nia ntawm cov khoom sau npe. Siv cov piv txwv ntawm cov khoom luam yeeb, uas tau suav nrog thawj pawg ntawm cov khoom sau npe, tsuas yog ib lub tsheb thauj khoom ntawm cov luam yeeb muaj txog 600 pob khoom, txhua tus muaj nws tus kheej cov cai. Thiab lub luag haujlwm ntawm peb qhov system yog taug qab thiab txheeb xyuas qhov raug cai ntawm kev txav ntawm txhua lub pob ntawm cov tsev khaws khoom thiab cov khw muag khoom, thiab thaum kawg txheeb xyuas qhov kev lees paub ntawm lawv qhov muag rau tus neeg yuav khoom kawg. Thiab peb tau sau txog 000 nyiaj ntsuab muas ib teev, thiab peb kuj yuav tsum tau sau tseg tias txhua pob khoom ntawd tau mus rau hauv lub khw li cas. Yog li, coj mus rau hauv tus account tag nrho cov kev txav ntawm cov khoom, peb cia siab tias yuav muaj ntau txhiab lab cov ntaub ntawv nyob rau ib xyoos.

Pab neeg M

Txawm hais tias Marcus suav hais tias yog ib qhov project hauv X5, nws tau raug coj los siv cov khoom mus kom ze. Pab neeg ua haujlwm raws li Scrum. Qhov project tau pib lub caij ntuj sov dhau los, tab sis thawj qhov tshwm sim tsuas yog thaum Lub Kaum Hli - peb tus kheej pab pawg tau sib sau ua ke, cov txheej txheem tsim tau tsim thiab cov khoom siv tau yuav. Tam sim no pab neeg no muaj 16 tus neeg, rau ntawm cov neeg koom nrog kev txhim kho backend thiab frontend, peb tus neeg koom nrog hauv kev tshuaj xyuas. Rau ntau tus neeg koom nrog hauv phau ntawv qhia, kev thauj khoom, kev ntsuas tsis siv neeg, thiab kev saib xyuas cov khoom. Tsis tas li ntawd, peb muaj ib tus kws tshaj lij SRE.

Tsis tsuas yog cov neeg tsim khoom sau cov lej hauv peb pab pawg; yuav luag txhua tus hais mav paub yuav ua li cas rau kev pab cuam thiab sau autotests, thauj cov ntawv sau thiab cov ntawv sau automation. Peb them nyiaj tshwj xeeb rau qhov no, txij li txawm tias cov khoom txhawb nqa yuav tsum muaj qib siab ntawm automation. Peb ib txwm sim qhia thiab pab cov npoj yaig uas tsis tau npaj ua ntej, thiab muab qee yam haujlwm me me rau lawv ua haujlwm.

Vim muaj tus kab mob coronavirus pandemic, peb tau hloov tag nrho pab pawg mus rau kev ua haujlwm nyob deb; muaj tag nrho cov cuab yeej rau kev tswj hwm kev txhim kho, kev tsim ua haujlwm hauv Jira thiab GitLab tau ua kom yooj yim dhau los ntawm theem no. Lub hli tau siv nyob deb tau pom tias pab pawg tsim khoom tsis raug kev txom nyem vim li ntawd; rau ntau, kev nplij siab ntawm kev ua haujlwm tau nce, qhov tsuas yog qhov ploj yog kev sib txuas lus.

Kev sib tham ntawm pab neeg nyob deb

"Kev taug kev hauv kuv nkawm khau" - tos, lawv puas tau cim?

Cov rooj sib tham thaum ua haujlwm nyob deb

"Kev taug kev hauv kuv nkawm khau" - tos, lawv puas tau cim?

Technology pawg ntawm cov tshuaj

Tus txheej txheem repository thiab CI / CD cuab yeej rau X5 yog GitLab. Peb siv nws rau kev khaws cia, kev sim txuas ntxiv, thiab xa mus rau kev sim thiab tsim cov servers. Peb kuj siv cov kev coj ua ntawm kev tshuaj xyuas cov cai, thaum tsawg kawg 2 cov npoj yaig yuav tsum tau pom zoo cov kev hloov pauv los ntawm tus tsim tawm rau cov cai. Static code analyzers SonarQube thiab JaCoCo pab peb ua kom peb cov cai huv si thiab xyuas kom cov qib yuav tsum tau muaj ntawm chav ntsuas ntsuas. Txhua qhov kev hloov pauv rau tus lej yuav tsum dhau los ntawm cov tshev no. Tag nrho cov ntawv xeem uas tau khiav manually yog tom qab automated.

Rau kev ua tiav cov txheej txheem kev lag luam los ntawm "Marcus", peb yuav tsum daws cov teeb meem thev naus laus zis, txog txhua qhov kev txiav txim.

Txoj Haujlwm 1. Qhov xav tau rau kab rov tav scalability ntawm lub kaw lus

Txhawm rau daws qhov teeb meem no, peb xaiv txoj hauv kev microservice rau architecture. Nyob rau tib lub sijhawm, nws tseem ceeb heev kom nkag siab txog lub luag haujlwm ntawm cov kev pabcuam. Peb sim faib lawv mus rau hauv kev ua lag luam, coj mus rau hauv tus account qhov tshwj xeeb ntawm cov txheej txheem. Piv txwv li, kev lees txais ntawm lub tsev khaws khoom tsis yog ib qho nquag, tab sis kev ua haujlwm loj heev, thaum lub sijhawm nws yuav tsum tau txais sai sai los ntawm lub xeev cov ntaub ntawv tswj hwm txog cov khoom uas tau txais, tus naj npawb ntawm cov khoom xa tuaj txog 600000. , xyuas qhov kev lees paub ntawm kev lees txais cov khoom no rau hauv lub tsev khaws khoom thiab xa rov qab txhua cov ntaub ntawv tsim nyog rau lub tsev khaws khoom automation system. Tab sis kev xa khoom los ntawm warehouses muaj kev siv ntau dua, tab sis tib lub sijhawm ua haujlwm nrog cov ntaub ntawv me me.

Peb siv tag nrho cov kev pabcuam ntawm lub hauv paus tsis muaj neeg nyob thiab txawm tias sim faib cov haujlwm sab hauv rau hauv cov kauj ruam, siv qhov peb hu ua Kafka tus kheej cov ntsiab lus. Qhov no yog thaum lub microservice xa cov lus rau nws tus kheej, uas tso cai rau koj kom sib npaug ntawm cov khoom siv ntawm kev ua haujlwm ntau dua thiab ua kom yooj yim rau kev saib xyuas cov khoom, tab sis ntxiv rau tom qab ntawd.

Peb tau txiav txim siab cais cov modules rau kev cuam tshuam nrog cov txheej txheem sab nraud rau hauv cov kev pabcuam cais. Qhov no ua rau nws muaj peev xwm daws tau qhov teeb meem ntawm kev hloov pauv APIs ntawm cov txheej txheem sab nraud, uas tsis muaj kev cuam tshuam rau cov kev pabcuam nrog kev ua haujlwm ntawm kev lag luam.

"Kev taug kev hauv kuv nkawm khau" - tos, lawv puas tau cim?

Tag nrho cov microservices raug xa mus rau hauv OpenShift pawg, uas daws ob qho teeb meem ntawm kev ntsuas txhua qhov microservice thiab tso cai rau peb tsis txhob siv cov cuab yeej thib peb Service Discovery.

Txoj Haujlwm 2. Qhov xav tau kom muaj kev thauj khoom siab thiab siv cov ntaub ntawv sib pauv ntawm cov kev pabcuam platform: Thaum lub sijhawm pib qhov project ib leeg, kwv yees li 600 kev ua haujlwm ib ob yog ua. Peb cia siab tias tus nqi no yuav nce mus rau 5000 ops / sec raws li cov khw muag khoom txuas rau peb lub platform.

Qhov teeb meem no tau daws tau los ntawm kev xa tawm Kafka pawg thiab yuav luag tag nrho tso tseg synchronous sib cuam tshuam ntawm lub platform microservices. Qhov no yuav tsum tau ua tib zoo tshuaj xyuas ntawm qhov system yuav tsum tau ua, vim tias tsis yog txhua qhov haujlwm tuaj yeem ua asynchronous. Nyob rau tib lub sijhawm, peb tsis tsuas yog xa cov xwm txheej los ntawm tus broker, tab sis kuj xa tag nrho cov ntaub ntawv lag luam uas xav tau hauv cov lus. Yog li, cov lus loj tuaj yeem ncav cuag ntau pua kilobytes. Cov lus txwv loj hauv Kafka xav kom peb yuav tsum tau twv kom raug cov lus loj, thiab yog tias tsim nyog, peb faib lawv, tab sis kev faib tawm yog qhov laj thawj, ntsig txog kev lag luam.
Piv txwv li, peb faib cov khoom uas tuaj txog hauv lub tsheb mus rau hauv lub thawv. Rau kev ua haujlwm synchronous, cais microservices raug faib thiab kev kuaj xyuas tag nrho yog nqa tawm. Siv Kafka nthuav qhia peb nrog lwm qhov kev sib tw - kev sim kev ua haujlwm ntawm peb cov kev pabcuam suav nrog kev koom ua ke Kafka ua rau tag nrho peb chav kuaj asynchronous. Peb daws qhov teeb meem no los ntawm kev sau peb tus kheej txoj kev siv hluav taws xob siv Embedded Kafka Broker. Qhov no tsis tshem tawm qhov yuav tsum tau sau cov ntawv xeem rau ib tus neeg txoj kev, tab sis peb nyiam sim cov teeb meem nyuaj uas siv Kafka.

Ntau qhov kev saib xyuas tau them rau cov ntawv txheeb xyuas kom lawv cov TraceId yuav tsis ploj thaum muaj kev zam thaum lub sijhawm ua haujlwm ntawm cov kev pabcuam lossis thaum ua haujlwm nrog Kafka batch. Thiab yog tias tsis muaj teeb meem tshwj xeeb nrog thawj tus, ces nyob rau hauv rooj plaub thib ob peb raug yuam kom teev tag nrho cov TraceIds uas cov batch tuaj nrog thiab xaiv ib qho mus txuas ntxiv mus. Tom qab ntawd, thaum tshawb nrhiav los ntawm tus thawj TraceId, tus neeg siv yuav pom tau yooj yim uas qhov kev taug qab txuas ntxiv mus.

Txoj Haujlwm 3. Qhov yuav tsum tau khaws cov ntaub ntawv ntau: Ntau tshaj 1 billion daim ntawv lo rau ib xyoos rau kev haus luam yeeb ib leeg tuaj rau X5. Lawv xav tau kev nkag mus tas li thiab nrawm. Nyob rau hauv tag nrho, lub kaw lus yuav tsum ua txog 10 billion cov ntaub ntawv ntawm kev txav mus los ntawm cov khoom sau npe no.

Txhawm rau daws qhov teeb meem thib peb, NoSQL database MongoDB raug xaiv. Peb tau tsim ib tug shard ntawm 5 nodes thiab txhua tus ntawm muaj ib tug Replica Set ntawm 3 servers. Qhov no tso cai rau koj los ntsuas lub kaw lus kab rov tav, ntxiv cov servers tshiab rau pawg, thiab xyuas kom meej tias nws ua txhaum cai. Ntawm no peb tau ntsib lwm qhov teeb meem - kom ntseeg tau tias kev hloov pauv hauv pawg mongo, suav nrog kev siv cov kab rov tav scalable microservices. Piv txwv li, ib qho ntawm peb txoj haujlwm yog txhawm rau txheeb xyuas kev sim rov muag cov khoom nrog tib cov ntawv sau npe. Ntawm no, overlays tshwm sim nrog kev soj ntsuam yuam kev lossis kev ua haujlwm yuam kev los ntawm cov neeg nqa nyiaj. Peb pom tias cov duplicates no tuaj yeem tshwm sim ob qho tib si hauv ib qho Kafka batch tau ua tiav, thiab nyob rau hauv ob pawg ua tiav ua ke. Yog li, tshawb xyuas cov duplicates los ntawm kev nug cov ntaub ntawv tsis tau muab dab tsi. Rau txhua qhov microservice, peb tau daws qhov teeb meem sib cais raws li kev lag luam logic ntawm qhov kev pabcuam no. Piv txwv li, rau cov tshev, peb ntxiv ib daim tshev rau hauv batch thiab cais ua rau cov tsos ntawm duplicates thaum inserting.

Txhawm rau kom ntseeg tau tias cov neeg siv kev ua haujlwm nrog keeb kwm ntawm kev ua haujlwm tsis nyob rau hauv ib qho kev cuam tshuam rau qhov tseem ceeb tshaj plaws - kev ua haujlwm ntawm peb cov txheej txheem kev lag luam, peb tau cais tag nrho cov ntaub ntawv keeb kwm mus rau hauv ib qho kev pabcuam cais nrog cov ntaub ntawv cais, uas kuj tau txais cov ntaub ntawv los ntawm Kafka. . Txoj kev no, cov neeg siv ua haujlwm nrog cov kev pabcuam cais tsis cuam tshuam rau cov kev pabcuam uas ua cov ntaub ntawv rau kev ua haujlwm tsis tu ncua.

Txoj Haujlwm 4: Queue reprocessing thiab saib xyuas:

Hauv kev faib cov tshuab, cov teeb meem thiab qhov yuam kev inevitably tshwm sim nyob rau hauv muaj cov databases, queues, thiab cov ntaub ntawv sab nraud. Nyob rau hauv cov ntaub ntawv ntawm Marcus, lub hauv paus ntawm xws li kev ua yuam kev yog kev koom ua ke nrog lwm systems. Nws yog ib qho tsim nyog los nrhiav kev daws teeb meem uas yuav tso cai rov qab thov rau cov lus teb tsis raug nrog qee lub sijhawm teev tseg, tab sis tib lub sijhawm tsis txhob ua tiav kev thov ua tiav hauv cov kab tseem ceeb. Rau lub hom phiaj no, lub ntsiab lus hu ua "lub ntsiab lus rov ua dua tshiab" tau xaiv. Rau txhua lub ntsiab lus tseem ceeb, ib lossis ntau lub ntsiab lus rov ua dua yog tsim los uas cov lus tsis raug xa mus thiab tib lub sijhawm qhov kev ncua sijhawm ntawm kev ua cov lus los ntawm lub ntsiab lus tseem ceeb raug tshem tawm. Cov txheej txheem kev sib tham -

"Kev taug kev hauv kuv nkawm khau" - tos, lawv puas tau cim?

Txhawm rau siv cov tswv yim zoo li no, peb xav tau cov hauv qab no: txhawm rau muab cov kev daws teeb meem no nrog Caij Nplooj Ntoos Hlav thiab zam dhau qhov code duplication. Thaum lub caij nthwv dej hauv lub vev xaib, peb tau hla cov kev daws teeb meem zoo sib xws raws li Spring BeanPostProccessor, tab sis nws zoo li tsis tsim nyog cumbersome rau peb. Peb pab neeg tau ua ib qho kev daws teeb meem yooj yim uas tso cai rau peb sib koom ua ke rau lub caij nplooj ntoos hlav caij nplooj ntoos hlav rau kev tsim cov neeg siv khoom thiab ntxiv rau Retry Consumers. Peb muab cov qauv ntawm peb cov kev daws teeb meem rau Pab Pawg Caij Nplooj Ntoos Hlav, koj tuaj yeem pom nws S, SΡ“S,. Tus naj npawb ntawm Retry Consumers thiab tus naj npawb ntawm kev sim rau txhua tus neeg siv khoom raug teeb tsa los ntawm qhov tsis muaj, nyob ntawm qhov xav tau ntawm cov txheej txheem kev lag luam, thiab rau txhua yam ua haujlwm, txhua yam uas tseem tshuav yog ntxiv cov annotation org.springframework.kafka.annotation.KafkaListener , uas yog paub rau tag nrho cov Spring developers.

Yog tias cov lus tsis tuaj yeem ua tiav tom qab txhua qhov kev sim rov ua dua, nws mus rau DLT (lub ntsiab lus tuag) siv Spring DeadLetterPublishingRecoverer. Ntawm qhov kev thov ntawm kev txhawb nqa, peb nthuav dav qhov kev ua haujlwm no thiab tsim ib qho kev pabcuam cais uas tso cai rau koj saib cov lus suav nrog hauv DLT, stackTrace, traceId thiab lwm yam ntaub ntawv tseem ceeb ntawm lawv. Tsis tas li ntawd, kev saib xyuas thiab kev ceeb toom tau ntxiv rau tag nrho DLT cov ncauj lus, thiab tam sim no, qhov tseeb, qhov tshwm sim ntawm cov lus hauv DLT cov ncauj lus yog qhov laj thawj los tshuaj xyuas thiab kho qhov tsis xws luag. Qhov no yog qhov yooj yim heev - los ntawm lub npe ntawm lub ncauj lus, peb tam sim ntawd nkag siab ntawm cov kauj ruam ntawm cov txheej txheem teeb meem tshwm sim, uas ua rau nrawm nrawm rau kev tshawb nrhiav nws lub hauv paus.

"Kev taug kev hauv kuv nkawm khau" - tos, lawv puas tau cim?

Tsis ntev los no, peb tau siv lub interface uas tso cai rau peb rov xa cov lus siv peb cov kev txhawb nqa tom qab tshem tawm lawv cov laj thawj (piv txwv li, rov ua haujlwm ntawm cov txheej txheem sab nraud) thiab, tau kawg, tsim kom muaj qhov cuam tshuam sib xws rau kev tshuaj xyuas. Qhov no yog qhov uas peb tus kheej cov ntsiab lus tuaj yeem ua ke: txhawm rau kom tsis txhob rov pib ua haujlwm ntev, koj tuaj yeem rov pib dua los ntawm cov kauj ruam xav tau.

"Kev taug kev hauv kuv nkawm khau" - tos, lawv puas tau cim?

Kev ua haujlwm platform

Lub platform twb nyob rau hauv kev tsim khoom lag luam, txhua txhua hnub peb nqa cov khoom xa tuaj thiab xa khoom, txuas cov chaw faib khoom tshiab thiab cov khw muag khoom. Raws li ib feem ntawm tus tsav, lub kaw lus ua haujlwm nrog "Tobacco" thiab "Shoes" pawg khoom.

Peb pab neeg tag nrho koom nrog ua tus tsav, tshuaj xyuas cov teeb meem tshwm sim thiab ua tswv yim rau kev txhim kho peb cov khoom, los ntawm kev txhim kho cov cav mus rau kev hloov pauv.

Txhawm rau kom tsis txhob rov ua dua peb qhov ua yuam kev, txhua qhov xwm txheej pom thaum lub sijhawm tsav tsheb raug cuam tshuam los ntawm kev ntsuas kev siv tshuab. Lub xub ntiag ntawm ntau tus autotests thiab cov kev ntsuam xyuas hauv chav tso cai rau koj los ua qhov kev ntsuam xyuas rov qab thiab teeb tsa qhov kev kho qhov kub ntxhov hauv ob peb teev.

Tam sim no peb txuas ntxiv txhim kho thiab txhim kho peb lub platform, thiab niaj hnub ntsib cov kev cov nyom tshiab. Yog tias koj txaus siab, peb yuav tham txog peb cov kev daws teeb meem hauv cov lus hauv qab no.

Tau qhov twg los: www.hab.com

Ntxiv ib saib