Увеличение скорости обновления информации в 100 раз за счет миграции данных из самописного хранилища на базе СУБД Postgre

Степан Овчинников
Максим В.
Подписаться

Ранее мы уже описывали архитектуру мультиязычного сайта с большим количеством магазинов в разных странах. 

Перед нашим клиентом, компанией Levenhuk, встала задача обновления и модернизации текущего самописного хранилища на СУБД Postgre. 

Добавлять новый функционал или оптимизировать текущий – долго, дорого, больно. А развитие и дальнейшее масштабирование проекта необходимо, и зависит от работы базы. Задача номер 2, которую бизнес хочет решить в рамках этого изменения – это скорость обновления информации о товарах на сайте. 

Нашли довольно быстрое и нестандартное решение – самописное хранилище данных на СУБД Postgre мигрировать в БУС (Битрикс: Управление Сайтом), заменив сущности на инфоблоки и HL-блоки.

Бизнес-задача

Исходя из текущей архитектуры проекта

Архитектура веб-проекта

Задачи перед нами стояли следующие:

  • Создать одну платформу, которая бы могла гибко работать в среде заказчика, легко интегрируясь в новые продукты. 

  • Оптимизировать способ обновления товаров (в старой архитектуре на обновление товаров могло уйти до 20 часов).

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

Почему решили что-то менять?

В самописном хранилище на СУБД Postgre содержатся данные, для “обогащения” сайта информацией о свойствах товаров. И один из критических моментов с масштабированием проекта — это увеличение памяти  под каждый сайт. Требуется гораздо больше памяти — как оперативной, так и постоянной (эта проблема, в целом, решаема, и не такая страшная).
Но основная причина экономическая:

  • старая админка;

  • слабая поддержка;

  • бизнесу нужно больше изменений, гибче настройки.

Архитектура Enrich

Enrich — агент на сайте, который следит за товарами. Он их “обогащает” переводами (много языковых версий), свойствами из HL-блоков и “включает”. Чтобы не вдаваться в детали, приведем схему первой версии работы Enrich в связке с PostgreSQL.

Архитектура работы Enrich

Мы убрали скрипт импорта товаров, и стали их записывать в HighLoad блоки (ХЛБ) из которых Enrich брал информацию и распределял между SKU и товарами.

Рефакторинг Enrich

Ключевая задача — это добавление mapper’ов ( один из подвидов воркеров). Их роль – распараллелить процессы обновления информации. Одни воркеры занимаются обновление SKU, другие занимаются привязкой данных товаров и т.п.

В нашем представлении Enrich должен быть оптимизирован по следующей схеме:

Оптимизация работы Enrich

Что это даст? Как минимум оптимизирует хранение всех данных в БД, а также ускорит процесс обновления информации на стороне сайта (многократно).

Если разбивать по шагам, то получается следующий порядок процесса рефакторинга:

  1. При импорте из 1С GUID раздела сохранять в SKU.

  2. Настроить ActiveMQ для enrich.

  3. Добавить mapper'ы, которые объединяют SKU в рамках товаров.

  4. Разместить модуль enrich в отдельный репозиторий (B2B, B2C).

Что будем переносить из PostgreSQL?

Переносим все поля свойств из PostgreSQL на highload-блок Битрикса, так называемый LOC. Простой, но в тоже время самый трудоемкий процесс, т.к. текущие таблицы очень большие и необходимо правильно и в той же последовательности связать их в highload-блок Битрикса, чтобы не нарушить целостность системы.

По сути перенеся все данные, мы можем отрубать PostgreSQL и пользоваться её аналогом в среде Битрикс и дальнейшей докруткой визуальной части системы.

Как выглядит обмен данными теперь

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

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

Оптимизация бизнес-процессов

LOC — это и есть наш аналог PostgreSQL на Битриксе. В нем содержатся данные для сайта, такие как: Файлы, изображения, свойства товаров, адреса складов/салонов. В Enrich у нас уходят только свойства и адреса. Если прям совсем подробнее то вот к такой схеме работы связки LOC-Enrich мы пришли:

Схема работы связки LOC-Enrich

Выводы

На текущий момент экосистема работает. Результаты:

  • Если товар изменили на стороне LOC, то практически моментально идет обновление на всех сайтах (если очередь забита, самая длинное обновление составляло ~10 мин, ранее это могло занимать до 20 часов).   

  • Уменьшили нагрузку на сервер и избежали пиковых нагрузок. Если раньше нагрузка росла пропорционально кол-ву языковых сайтов (запускается новая языковая версия сайта, включаем еще один экземпляр скрипта для нового сайта), то теперь количество запущенных скриптов (воркеров) постоянно. Так же все обрабатывается параллельно. В цифрах нагрузка с 52% уменьшилась до 23-25%.

  • Аналог PostgreSQL на Битриксе оптимизирует хранение данных (если раньше все свойства занимали место на сервере ~800Гб, то теперь ~300Гб).

Оцените статью
23.06.2022
Понравилась статья?
Поделитесь ссылкой с друзьями и коллегами!

Статьи по теме

23.05.2022
Как увеличить конверсию интернет-магазина обуви до 3.9% Вступление Начну с конца. Вот таких показателей мы достигли: начинали с таких: Если интрига сработала, и вопрос “Как увеличить конверсию интернет-...
18.05.2022
Обмен контрагентами между 1С и сайтом с сохранением структуры Партнеров, Контрагентов, Юридических лиц и Контактов O чем речь? Мы сделали B2B-Платформу для предприятий с партнерами-оптовиками и задачами автоматизации торговли. Некоторые Пользовательские сц...
18.05.2022
Чат-бот Программы Лояльности в TelegramЛояльность клиентов — важный показатель в деятельности любой организации. Чтобы покупатель оставался доволен продукцией, важно внимание и забота со стороны комп...
13.05.2022
Кейс: Личный кабинет партнера крупнейшего поставщика медицинских изделий В 2019 году к нам обратилась крупная компания, занимающаяся поставкой медицинских изделий. Причина обращения была типична для бизнеса, работающего с крупно...
06.05.2022
Топ-7 платформ автоматизации оптовой торговли - Выбор лучшейЭта статья будет полезна владельцам бизнеса, коммерческим директорам, а также руководителям отделов по оптовой торговле оборудованием, материалам и продукцией ...
Начать работу просто — напишите нам
Оставьте заявку и мы свяжемся с вами как можно скорее.
Хочешь получать лучшие статьи от INTERVOLGA раз в месяц?
Подпишись на рассылку — спамить не будем