"Дар пойафзоли ман қадам мезанам" - интизор шавед, оё онҳо нишон дода шудаанд?

Аз соли 2019 дар Русия қонун дар бораи тамғагузории ҳатмӣ амал мекунад. Қонун ба ҳамаи гурӯҳҳои молҳо дахл надорад ва санаи эътибор пайдо кардани тамғагузории ҳатмӣ барои гурӯҳҳои маҳсулот гуногун аст. Тамоку, пойафзол ва доруворӣ аввалин шуда тамғагузории ҳатмӣ хоҳанд буд, дигар маҳсулот баъдтар, масалан, атриёт, нассоҷӣ ва шир илова карда мешаванд. Ин навоварии қонунгузорӣ ба таҳияи қарорҳои нави IT водор кард, ки имкон медиҳад, ки тамоми занҷири ҳаёти маҳсулот аз истеҳсол то хариди истеъмолкунандаи ниҳоӣ, ба ҳамаи иштирокчиёни ин раванд пайгирӣ карда шавад: ҳам худи давлат ва ҳам ҳама ташкилотҳое, ки молро бо тамғагузории ҳатмӣ.

Дар X5, системае, ки молҳои тамғагузориро пайгирӣ мекунад ва маълумотро бо давлат ва таъминкунандагон мубодила мекунад, "Маркус" номида мешавад. Биёед ба шумо бо тартиб бигӯем, ки онро чӣ гуна ва кӣ таҳия кардааст, стеки технологияи он чист ва чаро мо аз он ифтихор дорем.

"Дар пойафзоли ман қадам мезанам" - интизор шавед, оё онҳо нишон дода шудаанд?

Сарбории воқеӣ

"Маркус" мушкилоти зиёдеро ҳал мекунад, яке аз масъалаҳои асосӣ ин ҳамкории мутақобилаи байни системаҳои иттилоотии X5 ва системаи давлатии иттилоотии маҳсулоти тамғагузорӣ (GIS MP) барои пайгирии ҳаракати маҳсулоти тамғагузорӣ мебошад. Платформа инчунин ҳама рамзҳои тамғагузории аз ҷониби мо гирифташуда ва тамоми таърихи ҳаракати ин рамзҳоро дар байни объектҳо нигоҳ медорад ва барои аз байн бурдани дараҷаи дубораи маҳсулоти тамғагузорӣ кӯмак мекунад. Бо мисоли маҳсулоти тамоку, ки ба гурӯҳҳои аввали молҳои тамғагузорӣ дохил карда шудаанд, танҳо як мошини боркаши сигарет тақрибан 600 000 бастаро дар бар мегирад, ки ҳар яки онҳо рамзи беназири худро доранд. Ва вазифаи системаи мо аз он иборат аст, ки қонунӣ будани ҳаракати ҳар як чунин бастаро дар байни анборҳо ва мағозаҳо пайгирӣ ва санҷед ва дар ниҳоят қобили қабул будани фурӯши онҳоро ба харидори ниҳоӣ тафтиш кунед. Ва мо дар як соат тақрибан 125 000 амалиёти нақдро сабт мекунем ва инчунин бояд сабт кунем, ки чӣ гуна ҳар як чунин баста ба мағоза ворид шудааст. Хамин тавр, тамоми харакати байни объектхоро ба назар гирифта, мо дар як сол даххо миллиард сабт интизорем.

Дастаи М

Сарфи назар аз он, ки Маркус як лоиҳа дар доираи X5 ҳисобида мешавад, он бо истифода аз равиши маҳсулот амалӣ карда мешавад. Гурӯҳ мувофиқи Scrum кор мекунад. Лоиҳа тобистони соли гузашта оғоз ёфт, аммо натиҷаҳои аввал танҳо дар моҳи октябр ба даст омаданд - дастаи мо пурра ҷамъ карда шуд, меъмории система таҳия ва таҷҳизот харидорӣ карда шуд. Ҳоло даста дорои 16 нафар аст, ки шаш нафари онҳо дар таҳияи backend ва frontend, се нафари онҳо дар таҳлили системаҳо машғуланд. Боз шаш кас ба кори дастй, боркунй, санчиши автоматй ва нигохубини махсулот машгул аст. Илова бар ин, мо мутахассиси SRE дорем.

Дар дастаи мо на танҳо таҳиягарон код менависанд; қариб ҳама бачаҳо медонанд, ки чӣ гуна барномарезӣ ва навиштани автотестҳо, бор кардани скриптҳо ва скриптҳои автоматикунониро медонанд. Мо ба ин диққати махсус медиҳем, зеро ҳатто дастгирии маҳсулот сатҳи баланди автоматизатсияро талаб мекунад. Мо ҳамеша кӯшиш мекунем, ки ба ҳамкасбоне, ки қаблан барномарезӣ накардаанд, маслиҳат ва ёрӣ диҳем ва ба онҳо супоришҳои хурдеро барои кор кардан медиҳем.

Дар робита ба пандемия аз коронавирус, мо тамоми дастаро ба кори фосилавӣ гузаронидем; мавҷудияти ҳама асбобҳо барои идоракунии рушд, ҷараёни кории сохташуда дар Jira ва GitLab имкон дод, ки ин марҳиларо ба осонӣ гузаранд. Моҳҳое, ки аз фосилаи дур гузаронида шуданд, нишон доданд, ки маҳсулнокии даста дар натиҷа коҳиш наёфтааст; барои бисёриҳо бароҳатӣ дар кор зиёд шуд, ягона чизе, ки намерасид, муоширати зинда буд.

Вохӯрии дастаи дурдаст

"Дар пойафзоли ман қадам мезанам" - интизор шавед, оё онҳо нишон дода шудаанд?

Вохӯриҳо ҳангоми кори дурдаст

"Дар пойафзоли ман қадам мезанам" - интизор шавед, оё онҳо нишон дода шудаанд?

Дастгоҳи технологии ҳалли

Анбори стандартӣ ва абзори CI/CD барои X5 GitLab мебошад. Мо онро барои нигаҳдории код, санҷиши пайваста ва ҷойгиркунӣ барои озмоиш ва серверҳои истеҳсолӣ истифода мебарем. Мо инчунин таҷрибаи баррасии кодро истифода мебарем, вақте ки ҳадди аққал 2 ҳамкасбон бояд тағиротҳои аз ҷониби таҳиякунанда ба код воридшударо тасдиқ кунанд. Таҳлилгарони коди статикӣ SonarQube ва JaCoCo ба мо кӯмак мекунанд, ки рамзи моро тоза нигоҳ дорем ва сатҳи зарурии фарогирии санҷиши воҳидро таъмин кунем. Ҳама тағиротҳо ба код бояд аз ин санҷишҳо гузаранд. Ҳама скриптҳои санҷишӣ, ки дастӣ иҷро мешаванд, баъдан автоматӣ карда мешаванд.

Барои татбиқи бомуваффақияти равандҳои бизнес аз ҷониби "Маркус" ба мо лозим омад, ки як қатор мушкилоти технологӣ, дар бораи ҳар яки онҳо бо тартиби ҳал карда шаванд.

Вазифаи 1. Зарурати миқёспазирии уфуқии система

Барои ҳалли ин мушкилот мо равиши микросервисро ба меъморӣ интихоб кардем. Дар баробари ин, фаҳмидани самтҳои масъулияти хадамот хеле муҳим буд. Мо кушиш кардем, ки хусусиятхои процессхоро ба назар гирифта, онхоро ба амалиёти тичоратй таксим кунем. Масалан, кабул ба анбор на он кадар зуд-зуд, балки хеле калон аст, ки дар рафти он аз танзимгари давлатй дар бораи вохиди молхои кабулшаванда, ки шумораи онхо дар як тахвил ба 600000 хазор дона мерасад, зуд маълумот гирифтан лозим аст. , кобили кабули ин махсулотро ба анбор санчида, тамоми маълумоти заруриро барои системаи автоматикунонии анбор баргардонед. Аммо интиқол аз анборҳо шиддати бештар дорад, аммо дар айни замон бо миқдори ками маълумот кор мекунад.

Мо ҳама хидматҳоро дар асоси бидуни шаҳрвандӣ амалӣ менамоем ва ҳатто кӯшиш мекунем, ки амалиёти дохилиро ба марҳилаҳо тақсим кунем, бо истифода аз он чизе, ки мо Кафкаро мавзӯъҳои худшиносӣ меномем. Ин дар ҳолест, ки хидматрасонии хурд ба худ паёме мефиристад, ки ба шумо имкон медиҳад, ки сарбориро ба амалиёти бештар захираҳо мувозинат кунед ва нигоҳдории маҳсулотро соддатар созед, аммо дар ин бора баъдтар.

Мо тасмим гирифтем, ки модулҳоро барои ҳамкорӣ бо системаҳои беруна ба хидматҳои алоҳида ҷудо кунем. Ин имкон дод, ки мушкилоти зуд-зуд иваз кардани API-ҳои системаҳои беруна бидуни таъсир ба хидматҳо бо функсияҳои тиҷоратӣ ҳал карда шавад.

"Дар пойафзоли ман қадам мезанам" - интизор шавед, оё онҳо нишон дода шудаанд?

Ҳама хидматҳои хурд дар кластери OpenShift ҷойгир шудаанд, ки ҳам мушкилоти миқёси ҳар як хидматрасониро ҳал мекунад ва ба мо имкон медиҳад, ки абзорҳои кашфи хидматҳои тарафи сеюмро истифода набарем.

Вазифаи 2. Зарурати нигоҳ доштани сарбории баланд ва мубодилаи хеле пуршиддати маълумот байни хидматҳои платформа: Танҳо дар марҳилаи оғози лоиҳа дар як сония тақрибан 600 амалиёт иҷро карда мешавад. Мо интизорем, ки ин арзиш то 5000 опс / сония афзоиш меёбад, зеро фурӯшгоҳҳои чакана ба платформаи мо пайваст мешаванд.

Ин мушкилот тавассути ҷойгиркунии кластери Кафка ва тақрибан комилан даст кашидан аз ҳамкории синхронӣ байни микросервисҳои платформа ҳал карда шуд. Ин таҳлили хеле дақиқи талаботи системаро талаб мекунад, зеро на ҳама амалиётҳо асинхронӣ буда метавонанд. Дар айни замон, мо на танҳо рӯйдодҳоро тавассути брокер интиқол медиҳем, балки инчунин ҳама маълумоти зарурии тиҷоратро дар паём интиқол медиҳем. Ҳамин тариқ, андозаи паём метавонад ба чандсад килобайт расад. Маҳдудияти андозаи паём дар Кафка аз мо талаб мекунад, ки андозаи паёмро дақиқ пешгӯӣ кунем ва агар лозим бошад, мо онҳоро тақсим мекунем, аммо тақсимот мантиқист, ки ба амалиёти тиҷоратӣ алоқаманд аст.
Масалан, мо молхоеро, ки бо мошин меояд, ба куттихо таксим мекунем. Барои амалиёти синхронӣ, хидматрасониҳои алоҳида ҷудо карда мешаванд ва санҷиши ҳамаҷонибаи сарборӣ гузаронида мешавад. Истифодаи Кафка ба мо боз як мушкилии дигар пешниҳод кард - санҷиши кори хидмати мо бо назардошти интегратсияи Кафка ҳамаи санҷишҳои воҳиди моро асинхронӣ мекунад. Мо ин мушкилотро тавассути навиштани усулҳои коммуналии худ бо истифода аз Broker Embedded Kafka ҳал кардем. Ин зарурати навиштани тестҳои воҳидиро барои усулҳои инфиродӣ бартараф намекунад, аммо мо бартарӣ медиҳем, ки ҳолатҳои мураккабро бо истифода аз Кафка санҷем.

Диққати зиёд ба пайгирии гузоришҳо дода шуд, то TraceId-и онҳо ҳангоми истифодаи хидматҳо ё ҳангоми кор бо партияи Кафка рух додани истисноҳо гум нашавад. Ва агар бо аввалин ягон мушкилоти махсус вуҷуд надошта бошад, пас дар ҳолати дуюм мо маҷбур мешавем, ки ҳамаи TraceIds-ро, ки партия бо он оварда шудааст, сабт кунем ва якеро барои идомаи пайгирӣ интихоб кунем. Пас, ҳангоми ҷустуҷӯи TraceId аслӣ, корбар ба осонӣ мефаҳмад, ки пайгирӣ бо кадоме идома дорад.

Вазифаи 3. Зарурати нигоҳ доштани миқдори зиёди маълумот: Дар як сол танҳо барои тамоку зиёда аз 1 миллиард тамға ба X5 меояд. Онҳо дастрасии доимӣ ва зудро талаб мекунанд. Дар маҷмӯъ, система бояд тақрибан 10 миллиард сабти таърихи ҳаракати ин молҳои тамғагузориро коркард кунад.

Барои ҳалли масъалаи сеюм, базаи NoSQL MongoDB интихоб карда шуд. Мо як пораи 5 гиреҳ сохтем ва ҳар як гиреҳ маҷмӯи Replica аз 3 сервер дорад. Ин ба шумо имкон медиҳад, ки системаро ба таври уфуқӣ васеъ кунед, ба кластер серверҳои нав илова кунед ва таҳаммулпазирии хатогиҳои онро таъмин кунед. Дар ин ҷо мо бо мушкилоти дигар рӯ ба рӯ шудем - таъмини транзаксия дар кластери mongo бо дарназардошти истифодаи микросервисҳои ба таври уфуқӣ миқёспазир. Масалан, яке аз вазифаҳои системаи мо муайян кардани кӯшишҳои дубора фурӯхтани маҳсулот бо ҳамон рамзҳои тамғагузорӣ мебошад. Дар ин чо бо сканхои хато ё амалиёти нодурусти кассирхо кабатхо пайдо мешаванд. Мо дарёфтем, ки чунин такрорҳо метавонанд ҳам дар дохили як партияи коркарди Кафка ва ҳам дар ду партияи мувозӣ коркард шаванд. Ҳамин тариқ, тафтиши такрорӣ бо роҳи пурсиши пойгоҳи додаҳо чизе надод. Барои ҳар як хидматрасонии хурд, мо мушкилотро дар асоси мантиқи тиҷоратии ин хидмат алоҳида ҳал кардем. Масалан, барои чекҳо, мо чек дар дохили партия ва коркарди алоҳида барои пайдоиши такрорӣ ҳангоми ворид кардан илова кардем.

Барои он ки кори корбарон бо таърихи амалиёт ба ҳеҷ ваҷҳ ба чизи муҳимтарин - ба фаъолияти равандҳои тиҷоратии мо таъсир нарасонад, мо ҳама маълумоти таърихиро ба хидмати алоҳида бо пойгоҳи додаҳои алоҳида ҷудо кардем, ки он инчунин тавассути Кафка маълумот мегирад. . Ҳамин тариқ, корбарон бо хидмати ҷудогона бидуни таъсир ба хидматҳое, ки маълумотро барои амалиёти ҷорӣ коркард мекунанд, кор мекунанд.

Вазифаи 4: Аз нав коркард ва мониторинги навбат:

Дар системаҳои тақсимшуда мушкилот ва хатогиҳо ногузир дар мавҷудияти пойгоҳи додаҳо, навбатҳо ва манбаъҳои берунии додаҳо ба миён меоянд. Дар мавриди Маркус, манбаи чунин хатогиҳо ҳамгироӣ бо системаҳои беруна мебошад. Барои дарёфти роҳи ҳалли он зарур буд, ки дархостҳои такрорӣ барои посухҳои хато бо вақти муайяни вақт имкон диҳад, аммо дар айни замон коркарди дархостҳои муваффақро дар навбати асосӣ қатъ накунад. Бо ин маќсад консепсияи ба истилоњ "озмоиши такрории мавзўъ" интихоб карда шуд. Барои ҳар як мавзӯи асосӣ як ё якчанд мавзӯъҳои такрорӣ эҷод карда мешаванд, ки ба онҳо паёмҳои хато фиристода мешаванд ва ҳамзамон таъхир дар коркарди паёмҳо аз мавзӯи асосӣ бартараф карда мешавад. Нақшаи ҳамкорӣ -

"Дар пойафзоли ман қадам мезанам" - интизор шавед, оё онҳо нишон дода шудаанд?

Барои татбиқи чунин схема, ба мо лозим буд, ки ин ҳалли худро бо Spring ҳамроҳ кунем ва такрори кодро пешгирӣ кунем. Ҳангоми сайругашт дар интернет, мо бо як ҳалли шабеҳ дар асоси Spring BeanPostProccessor дучор шудем, аммо он барои мо нолозим менамуд. Дастаи мо як ҳалли соддатареро таҳия кардааст, ки ба мо имкон медиҳад, ки ба давраи баҳорӣ барои эҷоди истеъмолкунандагон ворид шавем ва ба таври иловагӣ истеъмолкунандагонро такрор кунем. Мо ба дастаи Spring як прототипи ҳалли худро пешниҳод кардем, шумо онро мебинед дар ин ҷо. Шумораи истеъмолкунандагони такрорӣ ва шумораи кӯшишҳо барои ҳар як истеъмолкунанда тавассути параметрҳо вобаста ба эҳтиёҷоти раванди тиҷорат танзим карда мешаванд ва барои ҳама чиз кор кардан танҳо илова кардани шарҳи org.springframework.kafka.annotation.KafkaListener боқӣ мемонад. , ки ба ҳамаи таҳиягарони Spring шинос аст.

Агар паём пас аз ҳама кӯшишҳои такрорӣ коркард карда нашавад, он бо истифода аз Spring DeadLetterPublishingRecoverer ба DLT (мавзӯи ҳарфҳои мурда) меравад. Бо дархости дастгирӣ, мо ин функсияро васеъ кардем ва хидмати алоҳидаеро таъсис додем, ки ба шумо имкон медиҳад паёмҳои дар DLT, stackTrace, traceId ва дигар маълумоти муфидро дар бораи онҳо дидан кунед. Илова бар ин, мониторинг ва огоҳиҳо ба ҳама мавзӯъҳои DLT илова карда шуданд ва ҳоло, воқеан, пайдоиши паём дар мавзӯи DLT сабаби таҳлил ва ислоҳи нуқсон аст. Ин хеле қулай аст - аз номи мавзӯъ, мо дарҳол дарк мекунем, ки мушкилот дар кадом марҳила ба миён омадааст, ки ҷустуҷӯи сабаби аслии онро ба таври назаррас суръат мебахшад.

"Дар пойафзоли ман қадам мезанам" - интизор шавед, оё онҳо нишон дода шудаанд?

Ба наздикӣ, мо интерфейсеро татбиқ кардем, ки ба мо имкон медиҳад, ки паёмҳоро бо истифода аз дастгирии мо пас аз рафъи сабабҳои онҳо (масалан, барқарор кардани функсияи системаи беруна) ва албатта, муқаррар кардани нуқсони мувофиқ барои таҳлил дубора ирсол кунем. Дар ин ҷо мавзӯъҳои худи мо муфиданд: барои аз нав оғоз накардани занҷири коркарди дароз, шумо метавонед онро аз қадами дилхоҳ аз нав оғоз кунед.

"Дар пойафзоли ман қадам мезанам" - интизор шавед, оё онҳо нишон дода шудаанд?

Фаъолияти платформа

Платформа аллакай дар кори пурмаҳсул аст, мо ҳар рӯз интиқол ва интиқолро анҷом медиҳем, марказҳои паҳнкунӣ ва мағозаҳои навро пайваст мекунем. Дар доираи озмоиш, система бо гурӯҳҳои маҳсулоти "Тамоку" ва "Пойафзол" кор мекунад.

Тамоми дастаи мо дар гузаронидани озмоишҳо иштирок мекунад, мушкилоти пайдошударо таҳлил мекунад ва барои беҳтар кардани маҳсулоти мо, аз такмил додани гузоришҳо то тағир додани равандҳо пешниҳод мекунад.

Барои такрор нашудани хатогиҳои мо, ҳамаи ҳолатҳое, ки ҳангоми озмоиш ошкор карда шудаанд, дар санҷишҳои автоматӣ инъикос карда мешаванд. Мавҷудияти шумораи зиёди автотестҳо ва санҷишҳои воҳид ба шумо имкон медиҳад, ки санҷиши регрессияро гузаронед ва дар тӯли чанд соат ислоҳотро дар асл насб кунед.

Ҳоло мо таҳия ва такмил додани платформаи худро идома медиҳем ва пайваста бо мушкилоти нав рӯ ба рӯ мешавем. Агар шумо таваҷҷӯҳ дошта бошед, мо дар бораи роҳҳои ҳалли мо дар мақолаҳои зерин сӯҳбат хоҳем кард.

Манбаъ: will.com

Илова Эзоҳ