Inovio Hub

Изазов
Inovio doo купује од дистрибутера и продаје преко маркетплејса, партнера и сопствене продавнице. Уобичајени софтвер за е-трговину полази од тога да производ има једног добављача и једну цену. Овде их има по неколико, а сваки канал има своје комерцијалне услове. Стари каталог то није могао да прати, па су људи разлике усклађивали ручно. Посао је растао с бројем добављача помноженим с бројем канала, што је ограничавало колико фирма може да преузме.
Наш приступ
Изградили смо платформу у којој је каталог једини извор истине, а сваки спољни систем стоји иза адаптера. Фидови добављача стижу у један интерни облик, у ком год формату да дођу. Сваки продајни канал се храни из тог истог облика. Један механизам за обрачун цена производи број који се објављује, тако да се ништа не прерачунава на изласку, а залихе се рачунају на једном месту. AI сервис за обогаћивање попуњава поља која фидови не дају, а човек одобрава његове предлоге пре него што се рачунају. Бек-офис је густ оперативни алат за људе који по цео дан прегледају дугачке табеле, а не маркетиншка површина.
Резултати
У продукцији и у сталној испоруци од краја 2025. Миграција је задржала шифре производа које су продајни канали већ имали у евиденцији, тако да ништа није морало поново да се објављује. Додавање добављача или канала сада је ограничен посао, уместо измене која се прелива на цене, залихе и сваку постојећу интеграцију. Унос података који је раније чекао у реду сада стиже као предлози које оператер одобрава.
- 4,703 аутоматизованих тестова у 461 тест фајлу
- 106,000 линија тест кода наспрам 109,000 линија кода апликације
- 164 API endpoint-а и 199 бек-офис компоненти
- 288 испоручених тикета кроз 559 комитова
- 23 записа о архитектонским одлукама и 90 страна документације
- 9 месеци непрекидне испоруке, испорука се наставља
Шта је однело време
Најтеже је било оно што нико није унапред проценио.
Први су биле цене. Чим производ може да се купи од више дистрибутера и прода кроз више канала, цена престаје да буде поље и постаје прорачун. Систем који смо преузели то је погоршавао тиме што је цене прерачунавао унутар кода који је правио сваки фид, па су се број у бази и број на маркетплејсу могли разликовати, а нико није могао да каже који је тачан. Све смо преместили у један механизам. Кад смо уклонили последње од тих преправки у тренутку извоза, неке објављене цене су се помериле. Тај разговор је био непријатан, али исправан.
Други су били идентификатори, и њих смо потценили. Сваки продајни канал је каталог већ познавао по шифрама које је издао стари систем, а те шифре стоје у базама других фирми, везане за историју огласа. Чисте нове шифре значиле би да се све поново објављује од нуле. Зато мигрирани производ и даље одговара на своју стару шифру где год је канал већ зна, а свуда другде носи нову интерну.
Кад је пукло у четири ујутру
Један заказани посао за фидове почео је да исцрпљује меморију воркера. При сваком поновном покушају потрошња је скакала на скоро три гигабајта.
Узрок је био обичан, и у потпуности наш. Извоз је цео фид градио као један стринг у меморији, компресија је држала оригинал живим, а грешка касније у отпремању спречавала је да се било шта од тога ослободи док је ред поново покушавао.
Ништа што корисници виде није пало, и управо зато се позадински рад одваја. Али фид није отишао, и пао би поново следеће ноћи. Преписали смо ток тако да ради стримовањем: курсор базе храни XML писач, а компресија и отпремање стримују уместо да баферују. Затим смо ограничили меморију контејнера, смањили број поновних покушаја за ту врсту посла и записали узрок и хронологију.
Радије бисмо потенцијалном клијенту показали ово него чисту статусну страницу. Питање које вреди поставити ономе ко вам гради систем јесте колико брзо сазна кад се нешто поквари и шта после тога постоји осим поправке.
Како ради
У рад се пушта из CI-ја, као контејнери с ограничењем меморије, тако да једно лоше оптерећење не може да обори хост. Позадински рад се одвија у реду заснованом на Redis-у, с контролном таблом. Логови су структурирани и претраживи, грешке иду у Sentry, а долазни фидови добављача стоје иза circuit breaker-а, па дистрибутер који има лоше јутро добије предах, уместо да га затрпамо поновним покушајима.
Део који оператери највише користе је дневник покретања. Свака синхронизација и извоз фида бележе своју статистику, трајање, окидач и исход. Упозорења се намерно броје одвојено од грешака, тако да покретање које се завршило, али је урадило нешто што вреди знати, изгледа чисто. Погрешите ту и контролна табла трајно стоји у жутом, а људи престану да је гледају.
Шта добијате поред софтвера
Двадесет три писане архитектонске одлуке, деведесет страна документације и речник који утврђује шта сваки термин у домену значи. Звучи бирократски, али захваљујући томе нова особа корисна на овом коду већ после недељу дана.
И тестове, у горе наведеној сразмери: отприлике онолико тест кода колико и кода апликације. У оваквом систему тихи баг у ценама или залихама не појављује се као грешка. Појављује се као погрешне бројке на туђем маркетплејсу, недељама касније.