Эволюция BP-сервиса компании Магнит

Дисклеймер: В статье описана эволюция системы управления процессами в компании «Магнит». Некоторые детали были упрощены для лаконичности и последовательности повествования, некоторые были изменены по соображениям безопасности. В любом случае, целью статьи является с одной стороны желание поделиться с сообществом техническим опытом, с другой — оставить ретроспективный взгляд на историю компании.

Прежде чем приступить непосредственно к теме, предлагаю бегло взглянуть на то, что из себя представляет компания «Магнит» на сегодняшний день. Посмотрим на текущее состояние, так сказать, с высоты птичьего полета. Это важно сделать в самом начале, так как именно сегодняшнее положение будет своего рода бэкграундом для всего дальнейшего повествования. Далее мы будем постепенно спускаться всё ниже и ниже, и так, слой за слоем, открывать новые аспекты предмета этой статьи.

Поехали!

Почти тридцать тысяч торговых точек, почти полмиллиона сотрудников и около миллиона уникальных товарных единиц (SKU)

Почти тридцать тысяч торговых точек, почти полмиллиона сотрудников и около миллиона уникальных товарных единиц (SKU)

На первый взгляд, сами по себе — это просто ничего не значащие цифры, но давайте прибегнем к магии сравнения, чтобы понять их действительную значимость.

Начнем с количества торговых точек. По данным БТИ, в Москве насчитывается около ста пятнадцати тысяч различных зданий, из которых примерно треть (сорок тысяч) — это жилые помещения. Только представьте, количество объектов Магнита примерно соответствует количеству жилых домов города Москвы. Другими словами, гипотетически, можно поставить торговую точку компании в каждый московский двор!

Теперь взглянем на цифру, отвечающую за человеческий ресурс. Количество сотрудников на момент написания статьи варьируется в районе четырехсот тысяч человек. Это соответствует размеру крупного города России, например, Чебоксар, Пензы, Липецка, Кирова, Тулы, Калуги, Сочи, Брянска или Владимира. Впечатляет, не правда ли?

Таким образом, получается, что компания «Магнит» по своим ресурсам и активам — это крупный город Российской Федерации со своим населением, фондом недвижимости и даже собственным производством. При этом в отличии от обычного города, вышеупомянутые ресурсы располагаются не сконцентрированно на отдельном участке местности, а расположены по всей территории страны — то есть на площади размером в семнадцать миллионов квадратных километров!

Вот теперь показатели просто потрясают своим гигантизмом, и, несмотря на кажущуюся нереальность, они определяют текущую действительность «Магнита»: широкая география, разветвлённая транспортная инфраструктура, управление финансами, активами, людьми, ассортиментом — всё это превращается сложное переплетение бесконечного множества бизнес-процессов, из которых состоит текущая система управления.

Так выглядит ситуация на сегодняшний день. Теперь давайте взглянем на то, что же к этому привело. Или, другими словами, взглянем на путь, предшествующий этой картине.

Естественно, Магнит стал гигантом не сразу, а постепенно эволюционировал в него из небольшой компании по оптовой торговле товарами бытовой химии. Термин «эволюция» по отношению к Магниту применим гораздо в более оправданной степени, чем «рост». Как мы увидим ниже, развитие компании происходило скачкообразно, сопровождалось отмиранием одних технологий и принципов управления и рождением замещающих их новых. Всё согласно естественному процессу развития.

Так или иначе наряду с общей эволюцией компании множились количественно и усложнялись качественно бизнес-процессы, а вместе с ними возрастали требования к системе управления.

Всё началось в 1994 году с Excel

Простой, родной, не требующий сложных знаний и удобный в обращении, он удовлетворял потребностям компании на протяжении почти десяти лет. Менеджеры различных уровней обменивались файлами по почте для согласования, использовали общий доступ, переносили их на носителях и были счастливы.

2b0188a13452e46964ec385cc81bbaff.jpg

Со временем в эту игру подключили программистов, и они привнесли в нее VBA, интеграцию с базами данных и внешними программами. И все были счастливы вновь.

2005 год — экспансия «Магнита» и выбор HPBPM

Ближе к 2005 году компания Магнит начинает агрессивную экспансию: перезапускает всю сеть в новом формате «Магазин у дома», существенно увеличивает ассортимент и количество торговых точек, которое к этому моменту дорастает до показателя тысяча пятьсот магазинов в нескольких регионах России.

Само собой, это незамедлительно отражается на системе управления процессами. Текущий документооборот возрастает, Excel перестает быть надежным и быстрым средством. Руководство компании ставит задачу своим немногочисленным на тот момент ИТ-специалистам в короткие сроки подобрать оптимальное, соответствующие насущным потребностям компании решение.

Таким решением становится продукт от компании Hewlett Packard: HP Business Process Management (HPBPM). Не будем подробно останавливаться на технической составляющей этого программного решения, однако отметим, несколько моментов.

На 2005 год HPBPM являлось достаточно серьёзным корпоративным решением от компании с мировым именем. Это, соответственно, давало мощную техническую поддержку, широкую интеграцию, гарантии актуальности функционала и соответствия современным тенденциям того времени.

Тем не менее, несмотря на все свои преимущества, программное решение от Hewlett Packard закрыло потребности Магнита лишь на следующие десять лет. Виной вновь становится экспоненциальный и даже взрывной рост компании. За десять лет «Магнит» стал открытой компанией и вышел на рынок акций, запустил несколько новых форматов «Компактный городской гипермаркет», «Магнит семейный», «Магнит Косметик», собственное производство овощей и зелени, достиг количества розничных магазинов в десять тысяч.

Несмотря на то, что HPBPM по-прежнему был способен достойно выдерживать вызовы, бросаемые системой учета Магнит, он обладал недостатками, не существенными при старте работы с ним, но ощутимыми впоследствии.

В результате высшее руководство компании вновь поставило задачу найти решение, способное удовлетворить все потребности системы управления бизнес-процессами.

2016 год — собственное решение

На дворе 2016 год. Стильная, модная, молодежная Camunda — ещё пока малопривлекательный и малоизвестный на тот момент времени проект, хотя и перспективный. К тому же с открытым исходным кодом, что тоже исключало её из списка рассматриваемых программных решений: популярность opensource ещё не достигла в России необходимого уровня доверия бизнеса — в отличие от сегодняшних реалий. 

Как говорил мне один из работников-ветеранов «Магнита», был еще вариант перехода на продукт IBM Blueworks Live, но он имел почти тот же список достоинств и недостатков, как и сменяемый HPBPM.

Таким образом, оставался один путь: написание собственного решения. И команда ИТ-специалистов «Магнита» с энтузиазмом принимает вызов и приступает к написанию нового сервиса с таинственным названием СУАГ (Системы Управления Ассортиментом и Географией).

Вот мы и добрались до героя нашего повествования. Сегодня львиная доля исполнения бизнес-процессов компании приходится на СУАГ. Думаю, не стоит и говорить, что от скорости и надёжности его работы зависят многие важные аспекты работы всей организации. Именно поэтому требования к новой системе предъявлялись самые жесткие: должна быть достигнута производительность и стабильность, равная сменяемому HPBPM, и, в то же время, новый сервис должен быть лишен всех его недостатков.

Небольшое отступление. На данный момент я работаю в команде Развития Информационных Систем Управления Ценообразованием. И, как следует из названия, наша команда разрабатывает и поддерживает сервисы, которые рассчитывают и доставляют цены в розничные магазины — это если в двух словах о нашей работе. В это трудно поверить, но почти у каждого из моих коллег есть курьезная история, связанная с «кривой» ценой в магазине. 

Так, например, одна моя коллега, назовем ее условно В, на одном из корпоративов поделилась историей про стиральный порошок, который из-за нелепой ошибки в расчетах стоил всего один рубль. Порошок, естественно, молниеносно раскупили… правда сами сотрудники магазина.

Другая коллега А поведала историю, когда ею была допущена маленькая опечатка. Казалось бы, перепутан всего один маленький символ: вместо знака умножения проставлен знак плюс в новой формуле расчета. При этом требования прошли все необходимые этапы согласования, их утвердили ответственные сотрудники, разработчики внедрили в бизнес-процесс и запустили. В итоге магазины пополнились сыром Ламбер по шестьдесят рублей (средняя цена на 2023 год = 750–850 рублей). Ошибку обнаружили только через полгода. 

Есть ещё истории про укроп по шестьсот рублей, кетчуп Хайнц по тысяча семьсот вместо семнадцати, про алкоголь, рассчитанный по старым ценам и продававшийся ниже среднерыночной цены (но выше федерального ограничения)… Так или иначе, все эти истории — со счастливым концом.

Но какими бы забавными не казались истории выше, они могут иметь достаточно серьезные последствия, и я осознано включил их в контекст повествования, чтобы показать, с одной стороны, как даже незначительные ошибки могут приводить к непредсказуемым и негативным результатам, с другой — подчеркнуть важность и центральность роли СУАГ в системе управления бизнес-процессами компании Магнит.

Справедливости ради, нужно отметить, что в данный момент по всем инцидентам проведены расследования и выработаны меры по недопущению подобных ситуаций в будущем. В частности, внедрены стоп-листы, и сильные колебания цен не уходят в магазины без согласований ответственных лиц. 

Но мы немного отклонились от намеченного курса. Итак, СУАГ — это сегодняшний день Магнита. Его техническую начинку мы рассмотрим чуть ниже, а пока представляю вам BPMN Worker — день завтрашний.

Несмотря на то, что СУАГ успешно эксплуатируется на протяжении уже чуть менее десяти лет, он не лишен недостатков. Сейчас наша команда из сектора разработки сервисов ценообразования внедряет новую итерацию системы управления бизнес-процессами. На момент написания этого текста мы находимся на стадии выхода в боевой режим, что является темой отдельной и возможно будущей статьи. 

Итак, мы рассмотрели эволюцию развития системы управления процессами, а теперь давайте погрузимся на уровень ниже и посмотрим, как бизнес-процесс интегрируется в систему «Магнита», проследим его путь.

Интеграция бизнес-процессов

Бизнес-процесс (далее БП) — это последовательность шагов, выполняемых в определенном порядке и направленная на достижение определенной цели. Каждый шаг — это действие, которое необходимо выполнить, чтобы приблизиться к цели или завершить процесс. Например, процесс изменения розничных цен в магазинах. Его шаги — получение списка товаров, расчёт цен по товарам и так далее, а конечной целью процесса может быть отправка розничных цен в магазины.

Сам по себе БП — это нечто абстрактное, нематериальное и существующее только как видение в голове менеджера, поэтому первым этапом внедрения новой сущности в СУАГ является описание схемы. 

Общая принципиальная схема внедрения БП

Общая принципиальная схема внедрения БП

Все начинается с того, что ответственный менеджер, которому поставлена задача по внедрению нового процесса, создает графическую схему в любом стороннем приложении, которое он предпочитает.

Графическая схема — первый шаг к воплощению БП

Графическая схема — первый шаг к воплощению БП

Конечно, есть ещё словесное описание, но опустим этот способ представления, так как его влияние на наш контекст ничтожно-минимальное.

Результатом работы менеджера является файл в формате BPMN 2.0.

BPMN-нотация — описание графической схемы в формале XML

BPMN-нотация — описание графической схемы в формале XML

Другими словами, файл .bpmn описывает представленные блоки схемы (прямоугольники, ромбы, стрелки, круги и пр.) как XML-секции, которые, в свою очередь, содержат описание того или иного элемента блок-схемы: его вид, содержание, связи и прочую информацию.

Далее полученный на предыдущем шаге файл .bpmn проходит через специальный скрипт в СУАГ и на выходе появляется файл .py, который представляет из себя шаблон, заготовку для дальнейшей обработки программистом.

4d3234d37ed6e5ab0ae29cbc8ca55d0e.jpg

В этом файле каждый шаг процесса (блок) представлен в виде пустой Python-функции, и задача разработчика заключается в том, чтобы написать программный код для имплементации алгоритма шага.

Например, для шага получения списка товаров необходимо написать запрос в базу данных и сохранить полученные результаты в специальном внутреннем хранилище СУАГ. В следующей функции-шаге необходимо считать данные списка товаров из хранилища и сделать запрос в БД, чтобы получить закупочные цены по этим товарам — и так далее, шаг за шагом, функция за функцией.

Когда реализованы все шаги БП, ему присваивается уникальный идентификатор. Теперь процесс может быть запущен в любой момент по какому-либо триггеру.

Необходимо отметить несколько моментов:

  • Шагом БП может быть другой, дочерний процесс. Может даже существовать целая иерархия бизнес-процессов.

  • Шаги могут выполняться как последовательно, так и параллельно, и существует понятие «Очередь выполнения».

  • Возможно переиспользование кода одного шага в другом, то есть СУАГ содержит накопленную кодовую базу, которая используется разработчиками при имплементации новых БП.

  • У шагов могут быть приоритеты выполнения.

Пример исполнения бизнес-процесса по запрограммированному алгоритму

Пример исполнения бизнес-процесса по запрограммированному алгоритму

На первых трёх шагах происходит выборка из базы данных сети «Магнит» (БД СМ). При этом шаги 2 и 3 будут выполнены параллельно. Когда все данные получены, запускается шаг 3 — расчёт розничных цен. Промежуточные, временные данные между шагами и конечные результаты записываются и хранятся в БД СМ. Ну и последний шаг — это отправка новых цен в магазины. В каждом из магазинов ответственным сотрудникам останется только распечатать новые ценники и прикрепить их на полки с соответствующими продуктами.

Что же представляет из себя СУАГ технологически? Давайте заглянем под капот.

8ca05c4f0ab79a6d7a551f7630e01ac2.jpg

Картина тут не сильно печальная, но и не очень радужная: устаревший синхронный стек, старый Python версии 3.6. И всё это без возможности апгрейда: во-первых, чистые SQL-запросы без ОРМ, во-вторых, привязка к БД СМ (Oracle) написанными для СУАГ представлениями (view), и в-третьих, специально конфигурируемое для СУАГ ядро Linux.  

Проблема СУАГ заключается в том, что то, что делало его быстрым и производительным всё это время, не даёт возможности применять современные подходы. Учитывая выбранную «Магнитом» стратегию на serverless-архитектуру, СУАГ, несмотря на свою мощь, не вписывается в неё никоим образом.

В мощности СУАГ не отказать

В мощности СУАГ не отказать

Посудите сами: вес базы данных на момент написания статьи составляет около десяти терабайт. Это данные за последние два года работы системы. Они включают в себя все существенные результаты расчётов и обменов, произведенных в сервисе, и хранятся в течение двух лет согласно политике компании «Магнит» — для разбора инцидентов и аналитики. При этом ежедневный оборот составляет один терабайт — это данные, обрабатываемые каждым шагом во время его работы.

Третий показатель — это количество шагов, выполняющихся за один день. Он может варьироваться от одного до двухсот миллионов и зависит от различных внешних факторов. Например, пересчёт цен в период праздничных акций или изменение товаров в линейке ассортимента. 

Коллега рассказывал, что, когда из России уходили бренды Coca-Cola, Fanta, Sprite и прочие, «Магнит» в срочном порядке обновлял свои матрицы ассортимента. Необходимо было заменить напитки этих брендов на отечественные. Я напомню, у «Магнита» насчитывается около ста тысяч уникальных мест хранения, и задача состояла в том, чтобы заменить одни наименования другими, рассчитать и отправить в магазины новые розничные цены, перепечатать и заменить ценники на полках — в общем, гигантское количество работы, как автоматизированной, так и ручной. Так вот, в те нелегкие дни количество шагов, запускаемых за день, достигало отметки в семьсот миллионов!

Но, как бы великолепно СУАГ ни справлялся со своей работой, очевидно, что предел его возможностей почти достиг своего апогея. В январе 2023 года руководство компании совместно с командой разработчиков и аналитиков приняли решение: разработать новый сервис обработки бизнес-процессов. При этом необходимо сохранить и приумножить исполняемую мощность СУАГ, и, в то же время, реализовать соответствие актуальным и современным тенденциям информационных технологий.

В результате прямо сейчас, в момент написания этой статьи, наша команда находится на финальной стадии разработки нового сервиса под названием BPMN Worker.

Технологический стек BPMN Worker

Технологический стек BPMN Worker

Как видно из зависимостей, сервис асинхронный и использует современные компоненты. BPMN Worker будет развернут в кластере Kubernetes, и, в отличие от своего предшественника, будет иметь возможность автомасштабироваться. Всё это в сумме дает неоспоримое и существенное преимущество перед СУАГ.

Мы рассмотрели эволюцию системы обработки бизнес-процессов компании Магнит: сделали ретроспективу, познакомились с настоящим и даже заглянули в завтрашний день. Как проявит себя новый сервис — ждите подробный отчет в следующем году.

Пользуясь случаем, хочу поблагодарить всех своих прекрасных коллег за неоценимую помощь в подготовке этой статьи, за их терпение при ответах на мои расспросы.

© Habrahabr.ru