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

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

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

Перед нашим клиентом, компанией 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
Понравилась статья?
Поделитесь ссылкой с друзьями и коллегами!

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

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

Мы работаем по одному из двух форматов:

  • аренда команды (от 2 человек, не менее 3 месяцев);
  • итерации с фиксированной ценой (1-3 месяца длительностью).

ИНТЕРВОЛГА предоставляет:

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

Для доработок и развития мы предлагаем формат 100 часов в месяц. Что можно сделать за это время:

  • новые нетиповые страницы или раздел;
  • 2 отчета с индивидуальными настройками;
  • 3-5 веб-сервисов интеграции;
  • замудренный калькулятор и т.п.

Поддержка «чтобы все работало как часы» стоит 45 тысяч рублей в месяц и описана тут.

Хочешь получать лучшие статьи от INTERVOLGA раз в месяц?
Подпишись на рассылку — спамить не будем