разделение монолита
Монолит на микросервисы: первый сервис в проде к 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
Сначала делится схема, потом переезжает код
- 01дни 1–4
Находим швы в данных
Логи запросов показывают, какие таблицы читаются вместе в одном запросе. Там и проходят границы, что бы ни утверждала структура пакетов.
- 02дни 3–9
Сначала делим схему
Таблицы расходятся, джойны через границу уходят, пока всё ещё один деплой. Здесь сидит большая часть риска, и здесь он ещё обратим.
- 03дни 8–20
Вынимаем первый сервис
Берём сервис с наименьшим числом входящих зависимостей, и это редко тот, что раздражает всех больше всего. К 20-му дню он работает в продакшене за тем же интерфейсом.
- 04дни 18–30
Свой пайплайн, потом следующий
Сервис получает свой репозиторий, деплой и график дежурств. Следующие идут быстрее по тому же методу, и с 30-го дня ваши команды релизятся, не дожидаясь поезда.
Платформа меряет, где резать, выбирают инженеры
Карта совместного доступа к таблицам и связности модулей
Платформа
По логам запросов и графу вызовов, за период достаточно длинный, чтобы попало закрытие месяца.
Предложение швов
Вместе
Платформа ранжирует кандидатов. Инженер сверяет каждого с границами ваших команд.
Разрыв джойнов через границу
Платформа
Механическая работа, ревью как у пул-реквестов, выкатка маленькими кусками, за которыми ваша команда успевает следить.
Какой сервис идёт первым
Инженер
Это чаще решает то, какая команда чем владеет, чем сам код.
Границы транзакций
Инженер
Там, где одна транзакция раньше пересекала шов, решаем, что происходит при сбое, и записываем это.
Пайплайны, деплой и дежурства
Вместе
Каждый пайплайн и график строим вместе с вашей командой, так что сервисы она ведёт с первого деплоя.
Шов проведён верно, когда большинство изменений после разделения задевают только одну сторону. Мы меряем это, прежде чем назвать работу сделанной.
Люди, которые проводят шов
Наши инженеры выпускают продакшен-код больше 25 лет, и лучше людей на это разделение вы не поставите. Монолиты на Rails, Django, Spring, .NET, Node, PHP и Go, схемы на четыреста таблиц с десятилетием джойнов через границы, десятки миграций. Шов никогда не проходит там, где его рисует архитектурная схема, и они находят настоящий.
Фиксированная цена до первого разреза, а день, когда первый сервис деплоится сам, вписан в договор. Сервис, который не совпадает с монолитом на вашем трафике, не принимается.
О чём спрашивают тимлиды перед разделением
Сколько сервисов у нас должно получиться?
Столько, сколько у вас команд, чтобы ими владеть, и это меньше, чем в архитектурной презентации. Вынимаем первый, запускаем в продакшене, и данные показывают, где пройдёт следующий разрез. Пришлите репозиторий сегодня и через 48 часов получите карту швов с ценой.
Обязательно переписывать на Go?
Только там, где это окупается. Вынос и переписывание решаются отдельно, и многие сервисы остаются на своём исходном языке. Где монолит жжёт память на Java или Python, переписывание на Go срезает счёт за инстансы в тот же срок. Скажите, какие модули дороже всего держать.
Сможем выпускать фичи во время разделения?
Да. Шаг, который мы бережём, это разделение схемы, дни 3–9, и ваш релизный календарь мы планируем вокруг него вместе с вами. Всё остальное движется, пока ваша команда выпускает фичи. Пришлите частоту релизов, и мы подгоним план под неё.
А общая база, о которой все предупреждают?
Поэтому схема и делится первой. Два сервиса на одной схеме дают распределённый монолит, который ломается хуже исходного, и такой мы не сдаём никогда. Запросите оценку и увидите план по схеме раньше, чем сдвинется код.
Что будет с общим кодом?
Он становится версионируемой библиотекой с маленькой поверхностью. Если библиотека растёт каждый спринт, шов проведён не там, и мы переносим его по ходу проекта, пока это дёшево. Пришлите репозиторий, и через 48 часов мы покажем швы.
Выведите первый сервис
Дайте нам размер репозитория, частоту релизов и то, что подгоняет перемены. Через 48 часов у вас швы, фиксированная цена и дата. К 20-му дню первый сервис деплоится сам.
Форму читает инженер с продакшен-стажем больше 25 лет. Первый вопрос будет про частоту ваших релизов.