К содержимому
CodeHero

разделение монолита

Монолит на микросервисы: первый сервис в проде к 20-му дню

Четыреста таблиц в одной схеме и релизный поезд раз в квартал, потому что выкатить одну часть отдельно никто не может. Инженеры с продакшен-стажем больше 25 лет делят это: первый сервис в проде к 20-му дню, остальные к 30-му.

Пришлите размер репозитория и частоту релизов сегодня. Через 48 часов вы знаете, где проходят швы и сколько это стоит.

Один деплой

Один репозиторий, одна схема, один релиз в квартал и импорты, которые ходят по кругу.

  • one deployable11 years of commits
  • shared schema400+ tables
  • release trainquarterly
  • circular importscycles

Первый сервис к 20-му дню, разделение закончено к 30-му

Разделено

Сервисы со своими схемами и пайплайнами, маленькая общая библиотека, деплой, когда команда готова.

  • billingGo · own schema
  • catalogueGo · own schema
  • shared kernellibrary
  • deploysper service
Сервисов вырезаем столько, сколько у вас команд, готовых держать по ним пейджер. Каждый деплоится, масштабируется и падает сам по себе.

Сначала делится схема, потом переезжает код

Базу разделяем раньше, чем сдвинется хоть строка кода. Такой порядок оставляет каждый шаг обратимым и ставит первый сервис в прод к 20-му дню.
  1. 01дни 1–4

    Находим швы в данных

    Логи запросов показывают, какие таблицы читаются вместе в одном запросе. Там и проходят границы, что бы ни утверждала структура пакетов.

  2. 02дни 3–9

    Сначала делим схему

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

  3. 03дни 8–20

    Вынимаем первый сервис

    Берём сервис с наименьшим числом входящих зависимостей, и это редко тот, что раздражает всех больше всего. К 20-му дню он работает в продакшене за тем же интерфейсом.

  4. 04дни 18–30

    Свой пайплайн, потом следующий

    Сервис получает свой репозиторий, деплой и график дежурств. Следующие идут быстрее по тому же методу, и с 30-го дня ваши команды релизятся, не дожидаясь поезда.

Платформа меряет, где резать, выбирают инженеры

Платформа находит кандидатов в швы по вашим же логам запросов. Выбор между ними упирается в то, кто чем владеет, и делает его инженер с 25-летним стажем вместе с вашими лидами.
  • Карта совместного доступа к таблицам и связности модулей

    Платформа

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

  • Предложение швов

    Вместе

    Платформа ранжирует кандидатов. Инженер сверяет каждого с границами ваших команд.

  • Разрыв джойнов через границу

    Платформа

    Механическая работа, ревью как у пул-реквестов, выкатка маленькими кусками, за которыми ваша команда успевает следить.

  • Какой сервис идёт первым

    Инженер

    Это чаще решает то, какая команда чем владеет, чем сам код.

  • Границы транзакций

    Инженер

    Там, где одна транзакция раньше пересекала шов, решаем, что происходит при сбое, и записываем это.

  • Пайплайны, деплой и дежурства

    Вместе

    Каждый пайплайн и график строим вместе с вашей командой, так что сервисы она ведёт с первого деплоя.

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

Люди, которые проводят шов

Наши инженеры выпускают продакшен-код больше 25 лет, и лучше людей на это разделение вы не поставите. Монолиты на Rails, Django, Spring, .NET, Node, PHP и Go, схемы на четыреста таблиц с десятилетием джойнов через границы, десятки миграций. Шов никогда не проходит там, где его рисует архитектурная схема, и они находят настоящий.

Фиксированная цена до первого разреза, а день, когда первый сервис деплоится сам, вписан в договор. Сервис, который не совпадает с монолитом на вашем трафике, не принимается.

О чём спрашивают тимлиды перед разделением

Сколько сервисов у нас должно получиться?

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

Обязательно переписывать на Go?

Только там, где это окупается. Вынос и переписывание решаются отдельно, и многие сервисы остаются на своём исходном языке. Где монолит жжёт память на Java или Python, переписывание на Go срезает счёт за инстансы в тот же срок. Скажите, какие модули дороже всего держать.

Сможем выпускать фичи во время разделения?

Да. Шаг, который мы бережём, это разделение схемы, дни 3–9, и ваш релизный календарь мы планируем вокруг него вместе с вами. Всё остальное движется, пока ваша команда выпускает фичи. Пришлите частоту релизов, и мы подгоним план под неё.

А общая база, о которой все предупреждают?

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

Что будет с общим кодом?

Он становится версионируемой библиотекой с маленькой поверхностью. Если библиотека растёт каждый спринт, шов проведён не там, и мы переносим его по ходу проекта, пока это дёшево. Пришлите репозиторий, и через 48 часов мы покажем швы.

Выведите первый сервис

Дайте нам размер репозитория, частоту релизов и то, что подгоняет перемены. Через 48 часов у вас швы, фиксированная цена и дата. К 20-му дню первый сервис деплоится сам.

Получить оценку

Форму читает инженер с продакшен-стажем больше 25 лет. Первый вопрос будет про частоту ваших релизов.