Интеграция каталога и стоков для Luxclusif (Farfetch Group) или история одного идеального ETL конвейера
LUX — интеграционный конвейер, который берёт данные непосредственно из Luxclusif и автоматически подгоняет их под таксономии партнёрских магазинов. Наша цель была в том, чтобы партнёры получали готовые к импорту таблицы CSV (совместимые с Matrixify для Shopify) по понятному расписанию, без ручной рутины и без сбоев в ночных задачах, а Luxclusif — контролируемый и расширяемый процесс, который можно масштабировать под новый магазин, не переписывая ядро. Это идеальный безотказный конвейер с чёткими транзакционными границами, идемпотентными операциями и гарантированной воспроизводимостью результатов.
Контекст и замысел
В этом проекте нет «зоопарка источников». Исходный поток один — Luxclusif. Задача сложнее в другом: каждый партнёр ждёт свою таксономию, свои словари категорий/брендов/цветов/размеров, свои правила округления, налогов и ценообразования, и свою форму заголовков в CSV. Мы построили настраиваемый конвейер, где из единого входа формируется множество целевых представлений, и каждое из них строго соответствует Matrixify-схеме конкретного магазина. Важная особенность — двухфазный выпуск: все преобразования сначала становятся черновиком (draft), проходят валидацию и сверки, а затем одним движением фиксируются транзакцией в финальный релиз с неизменяемой версией.
Технологический фундамент
Основа — нативный Go без тяжёлых фреймворков поверх. Это дает низкую латентность, минимальный overhead и точный контроль над потоками данных. Вся конкурентность реализована через горутины и каналы, что позволяет распараллеливать этапы конвейера и не блокировать критические пути. Хранилищный слой построен на нативном SQL: мы сознательно используем чистые SQL-конструкции и транзакции для этапов «черновик → релиз», обеспечивая атомарность и консистентность. Такой подход упрощает отладку, даёт прозрачные планы выполнения и воспроизводимые результаты, а также позволяет выжимать максимум из индексов и батчинга. Там, где нужно «в один тик» переключить партнёра на новую версию CSV, применяется двойная буферизация: старая версия остаётся доступной до тех пор, пока новая атомарно не помечена как активная.
Как течёт данные: от Luxclusif к таксономии магазина
Поток начинается с регулярной выборки актуального каталога Luxclusif и фиксации снимка во временном слое. Здесь же выполняется вычисление дельт, но без агрессивной инвалидации: черновик собирается как полноценная цельная таблица, на которую затем накладываются правила преобразования. Преобразования делятся на паттерновые и ИИ-дополняемые. Паттерны покрывают предсказуемые соответствия (например, семейств категорий, брендов, типовых суффиксов в названиях, шаблонов размеров), а AI pattern matcher дообучен на реальных примерах и «допридумывает» соответствия там, где ручные правила неизбежно оставляют «дыры». В результате каждое поле карточки — категория, тип, материал, размер, цвет, бренд, теги — нормализуется и приводится к конкретному словарю партнёра, а непокрытые случаи аккуратно репортятся в отчётах и не «роняют» выпуск.
Цены, налоги, сборы и валюты
Ценообразование — часть того же транзакционного контура. Мы берём исходные цены Luxclusif и применяем конфигурируемые правила: добавляем проценты налогов, учитываем сборы, применяем наценки/скидки, при необходимости пересчитываем валюту и делаем округление в формате, который гарантированно примет Matrixify. Расчёты детерминированы: одинаковый вход при одинаковой конфигурации даёт строго одинаковый выход, а изменения политик оформляются новой версией правил с безопасным пере-выпуском файлов. Это исключает «тихие» расхождения и позволяет в любой момент повторно собрать выпуск «как тогда».
Медиа и ИИ для визуальной консистентности
Для изображений используется ИИ-вычисление цвета фона и доминирующих оттенков. Это необходимо, когда партнёрская витрина требует строгого обозначения фона (чисто белый против «тёплого белого») или когда по цветовым признакам строятся фильтры и витринные виджеты. Мы дополнительно проверяем доступность ссылок, фиксируем подозрительные рамки/поля, нормализуем форматы и метаданные. Вычисленные признаки, когда это уместно, вкладываются в CSV отдельными полями — ими удобно пользоваться в Shopify, не прибегая к post-processing на стороне магазина.
Черновики, cron и безостановочные обновления
Выпуск строится как двухфазная транзакция. Стадия draft собирает полное представление под конкретного партнёра, прикручивает валидации схемы и контрольные суммы, а также формирует подробный отчёт о том, какие строки были скорректированы и почему. После прохода проверок срабатывает фиксация релиза — атомарное переключение «активной» версии. Запуски оркестрируются через cron: по расписанию выполняется вытягивание свежих данных Luxclusif, преобразования, draft, release и публикация артефактов. В каждый момент времени доступны два поколения выпусков, так что откат или повторная верификация не блокируют партнёвский импорт.
CSV как контракт и Matrixify как консьюмер
Мы сознательно выбрали CSV как контрактный формат: Matrixify работает с ним самым надёжным образом, а бизнес-команды легко проверяют содержимое «на глаз». Каждая таблица следует жёстко закреплённой схеме: стабильный порядок колонок, гарантированные типы, строгие заголовки, предсказуемые кодировки. В релизе нет «дрожания» структуры, поэтому ночные импорты у партнёров не спотыкаются из‑за единичных неожиданных полей. Если строка нарушает таксономию, она получает причину исключения и попадает в отчёт, а релизный CSV состоит только из валидных строк — таким образом импорт никогда не падает из‑за одной проблемной записи.
Многопоточность, производительность и стабильность
Конвейер использует многопоточную обработку на Go: независимые стадии и воркеры обмениваются данными через каналы, а тяжёлые участки разбиты на батчи, согласованные с индексами в базе. Это позволяет держать большие объёмы без деградации и при этом не «раскачивать» память. Мы не делаем «полных перезаливок» без необходимости: дельты считаются на уровне строк и полей, а итоговый релиз собирается целиком из уже нормализованной «правды». Идемпотентность гарантирует, что повторный прогон при неизменных входах даст бит-в-бит тот же CSV, а контрольные суммы партий позволяют мгновенно выявлять любые несоответствия между draft и release.
Наблюдаемость и алёртинг, включая Shopify Flow
Наблюдаемость строится на метриках конвейера (время этапов, доля скорректированных строк, доля исключений по причинам, латентность публикации) и на триггерах, связанных с покупками. На стороне магазинов в Shopify Flow мы настраиваем триггеры на события покупок и изменений заказов, которые реагируют на товары из наших релизов (по SKU, коллекциям, тегам) и вызывают вебхуки: так мы оперативно видим, как ведут себя новые таксономии и правила ценообразования «в бою». Эти сигналы идут в алёртинг (например, Telegram/Email), а также в дашборды, где можно сопоставить спрос с дисперсией цен, ошибками импорта и исключениями. Если Flow фиксирует аномалию (например, всплеск отмен в конкретной категории), мы быстро локализуем правило, которое нужно скорректировать, и переиздаём релиз без остановки работы магазинов.
Безопасность, версии и аудит
Все секреты и параметры публикации хранятся в переменных окружения/Secret-хранилище, доступы к местам выгрузки ограничены минимально необходимыми правами, а выпуски имеют неизменяемые версии. Журналы содержат трассировку прохождения строки через стадии и фиксируют причины всех автоматических правок. В спорных случаях мы можем воссоздать релиз из снимка черновика, повторно прогнав те же самые правила. Такой аудит упрощает взаимодействие и с Luxclusif, и с партнёрами: каждый видит, что именно произошло с его данными и почему.
Что получает бизнес на выходе
На выходе партнёры ежедневно получают стабильные CSV‑таблицы, автоматически обновляемые по расписанию, совместимые с Matrixify, приведённые под их таксономию, с рассчитанными налогами/ценами и обогащёнными ИИ полями (например, цвет фона изображения). Luxclusif получает предсказуемый, транзакционный и масштабируемый процесс, в котором черновики и релизы атомарно разделены, а повторы гарантированно дают идентичный результат. Это идеальный безотказный конвейер: чистый нативный Go, нативный SQL, многопоточность без лишней магии, cron‑оркестрация без простоев, алёртинг по событиям Shopify Flow и чёткие контракты CSV для Matrixify.
В итоге любые изменения в исходных данных Luxclusif быстро, безопасно и детерминированно доходят до полки партнёра, а весь процесс остаётся прозрачным, аудируемым и управляемым правилами, которые можно менять без остановки потока.
Использованные технологии
Достигнутые результаты
+100% к скорости новых интеграций
Простая и понятная система алертов
Автоматизация всех процессов
Хотите создать похожий проект?
Расскажите о вашей идее, и мы поможем её реализовать