Сложности роста Ruby-приложений

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Привет! Меня зовут Валентин Бритвич, я Unit Lead интеграций в СберМаркете. В статье я расскажу о сложностях роста Ruby-приложений, с которыми мы столкнулись по мере роста бизнеса, и о том, как с ними справиться. На заре СберМаркета мы начинали с одного Rails-монолита, но бизнес рос: за 5 лет tech-команда выросла в 19 раз, а потребление инфраструктуры — в 77 раз. А помимо монолита сейчас у нас 100+ микросервисов на Go, Ruby и Python.

С чего всё начиналось

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

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

Наш экран для пользователей, на котором виден список доступных магазинов, время доставки и сумма минимального заказа
Наш экран для пользователей, на котором виден список доступных магазинов, время доставки и сумма минимального заказа

Но одного Rails-монолита было мало: помимо витрины для клиентов, у нас есть бэк-офис для управления заказами. Мы сделали второй монолит, и разделили логику наших приложений на клиентское и партнёрское, для взаимодействия с нашими курьерами и сборщиками. 

Тогда начались трудности: бизнес масштабируется, в монолите работает одновременно много команд разработчиков, и нужны огромные объёмы техподдержки. Я выделил четыре основных проблемы и расскажу вам, как мы с ними справились — возможно, это будет полезно и в вашем бизнесе.

Сотни разработчиков в монолите

Чтобы обслуживать большой монолит, нужна была команда из нескольких десятков разработчиков, которые начинали «толкаться» друг с другом, выполняя продуктовые задачи. В итоге скапливалась большая очередь на релизы, обновления выкатывались неделями, и это начинало мешать нашим клиентам. 

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

Миграция террабайтной базы

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

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

Источник: https://habr.com/ru/companies/sbermarket/articles/797221/


Интересные статьи

Интересные статьи

В ресторане с большой проходимостью разморозка — та еще задача: ее нужно делать быстро, но так, чтобы продукты не потеряли свои вкусовые качества.Можно положить замороженные продукты в холодильную кам...
Кейс, как без манипуляций с рекламой удалось увеличить заказы лестниц на 50%. Незначительные доработки сайта повысили его конверсию в 2 раза. СМС-верификация помогла не платить «Яндексу» за нецелевые ...
Мы писали о том, как регуляторы и крупный бизнес работают над внедрением IPv6. Но этот процесс идёт уже более десяти лет с сопутствующими сложностями.
Операционный усилитель – одна из базовых схем аналоговой электроники, на основе которой можно строить сложные системы. Данный элемент присутствует почти во всех интегральных микросхемах: управление пи...
Введение Имитационное моделирование это метод, при котором для проведения экспериментов изучаемая реальная система заменяется моделью. В подобной модели можно проиграть как отдельные ситуаци...