Система тормозит в часы пик
Днём нормально, в пик отчёты и заказы идут минутами. Прежде чем делить систему на сервисы, нужно найти узкое место: часто это один запрос, одна блокировка или одна внешняя система, а не вся архитектура.
Микросервисы нужны не каждой системе, а высокая нагрузка не всегда требует их. Мы начинаем не с выбора технологий, а с замеров: где система упирается сейчас, какая нагрузка будет через год и какой простой вам действительно дорого стоит. После этого проектируем границы модулей, очереди и события, разделение данных и порядок перехода от старой системы к новой. Где хватит модульного монолита, так и скажем. Исходники лежат в вашем репозитории с первого коммита.
Обследование и замеры — от 200 000 ₽, 2–3 неделиСначала нагрузочная модель, потом схема сервисовПереход этапами: старая система работает, пока новая не принята
Днём нормально, в пик отчёты и заказы идут минутами. Прежде чем делить систему на сервисы, нужно найти узкое место: часто это один запрос, одна блокировка или одна внешняя система, а не вся архитектура.
Выгрузка отчёта занимает ресурсы, и перестаёт работать приём заказов. Нужно разделить критичное и второстепенное так, чтобы сбой одной части не останавливал другую.
Команды мешают друг другу в одном репозитории, любая правка требует полной проверки. Это проблема границ модулей и процесса выпуска, и она решается не только микросервисами.
Код писали разные люди, документации нет, тестов мало. Переписывать целиком дорого и рискованно, оставлять как есть нельзя. Нужен план постепенной замены.
Выбор записывается в обследовании с причинами. О том, как принимать это решение самостоятельно, написано в статье «Микросервисы или монолит».
Границы проводятся по предметной области и по скорости изменений, а не по слоям приложения.
Записываем, из каких деловых понятий состоит система: заказ, клиент, склад, платёж, документ. Для каждого понятия выясняем, кто его владелец, какие правила его меняют и кому нужны его данные. Модуль или сервис получается там, где у понятия есть собственный владелец и собственные правила. Если два «сервиса» постоянно меняются вместе и обращаются друг к другу на каждом шаге, это один сервис, разрезанный неудачно.
Первым выделяют самое независимое: уведомления, формирование файлов, приём вебхуков. Ядро с заказами и деньгами трогают в последнюю очередь.
Слово «высоконагруженная» без цифр ничего не значит, поэтому первым результатом работы становится нагрузочная модель.
Event-driven подход не лечит медленную систему сам по себе, он решает конкретные задачи.
Очередь нужна там, где отправитель не должен ждать получателя: приём заказа не должен зависеть от того, доступна ли сегодня 1С. События нужны там, где одно изменение интересно многим: смена статуса заказа важна и клиенту, и складу, и аналитике. Всё остальное можно оставить обычными вызовами, и это проще.
Брокер выбирается по задаче. Для небольших потоков хватает очереди на PostgreSQL, для заметных нагрузок берём RabbitMQ, для потока событий с повторным чтением по журналу рассматриваем Kafka. Выбор записывается в обследовании вместе с тем, кто будет этим брокером управлять после сдачи.
Каждый вызов чужой системы имеет предел ожидания и ограниченное число повторов с нарастающей паузой. Иначе один медленный сервис занимает все соединения и останавливает остальных.
Если недоступен второстепенный компонент, основной сценарий продолжает работать в урезанном виде: заказ принимается, уведомление уходит позже. Что именно можно отключить, решается заранее.
Копия, из которой ни разу не восстанавливались, не считается. Проверка восстановления проводится на отдельном стенде, время восстановления измеряется и записывается.
Журналы с общим идентификатором запроса, метрики по ключевым операциям и трассировка через сервисы. Без неё распределённую систему невозможно отлаживать.
Старая система кормит бизнес, поэтому «остановить и переписать» почти никогда не годится. Состояние кода оцениваем на аудите кода и архитектуры.
Цены совпадают с тарифами. Названа точная цена только у обследования, дальше вилка, которая сужается по его результатам. Остановиться можно после любой ступени.
Замеры нагрузки, карта предметной области, оценка текущей архитектуры, выбор подхода с причинами, вилка бюджета. Вычитается из первого этапа, если продолжаете с нами.
То же с картой обменов и матрицей источников данных, когда система окружена учётными и внешними сервисами.
Один выделенный сервис, одна очередь или одно исправленное узкое место на реальных данных, с нагрузочными испытаниями до и после.
Выделение сервиса вместе с обменом, наблюдаемостью и проверкой отказа, а также прослойка для постепенной замены.
Поэтапный переход, опытная эксплуатация, нагрузочные испытания, регламент обновлений и восстановления, передача документации. Этапы с отдельной приёмкой.
Мониторинг, разбор инцидентов, плановые доработки с пакета на 60 000 ₽. Сверх пакета — 5 000 ₽ в час.
Журналы, метрики, схема системы, разговор с теми, кто её эксплуатирует. Результат: нагрузочная модель, карта границ и рекомендация с причинами.
Какие части выделяются и в каком порядке, что остаётся в монолите, как данные переезжают и как откатиться на каждом шаге.
Самое независимое: очередь, приём событий или один сервис. Проверяем развёртывание, наблюдаемость и поведение при отказе до того, как трогать ядро.
Трафик переходит частями, старый путь остаётся на случай отката. Расхождения между старым и новым путями разбираем до отключения старого.
Документация, схемы, регламенты, обучение вашей команды работе с развёрнутым. Либо сопровождение помесячно.
Работа растёт не по числу сервисов, а по числу связей: каждая связь — контракт, версии, тесты и поведение при отказе.
Если одну таблицу читают десять модулей напрямую, разделение данных превращается в отдельный проект. Это самая частая причина, по которой вилка уезжает вверх.
Цель «простой допустим в нерабочее время» и цель «почти без простоев в любое время» различаются по цене многократно: второе требует дублирования, проверок восстановления и дежурства со стороны заказчика.
Если система уже работает и вы не уверены, что её стоит менять, начните с аудита кода и архитектуры: он даёт заключение без обязательств по разработке. Если нужно построить серверную часть с нуля, смотрите разработку API и бэкенда. Если вы делаете продукт для многих организаций, SaaS-платформа включает разделение данных клиентов и тарифы, а выбор схемы изоляции описан в статье про мультиарендность.
Если проблема в обмене с учётной системой, начинать нужно с интеграции с ERP. Слова о доступности в договоре разобраны в статье «Что означает доступность три девятки».
Критерии решения, цена распределённости, признаки того, что пора выделять сервис, и типичные ошибки.
Сколько простоя допускает каждый уровень, что считать недоступностью и как измерять.
Версии, идемпотентность, ошибки и ограничение частоты: то, на чём держатся обмены между сервисами.
Сорок минут созвона: что за система, как ведёт себя в пик, какие у неё границы и где болит. По итогам скажем, нужны ли сервисы вообще, с какой ступени начинать и в какую вилку это укладывается.
Начинается с обследования: 200 000 ₽ за один контур (2–3 недели), 350 000 ₽ за несколько систем, 500 000 ₽ за контур с оборудованием или жёсткими требованиями. На выходе нагрузочная модель, карта границ и вилка бюджета. Пилот одного шага стоит 150 000–400 000 ₽, вывод в эксплуатацию начинается от 1 500 000 ₽ этапами по 300 000–700 000 ₽. Обследование вычитается из первого этапа, если продолжаете с нами.
Часто нет. Если одна команда, одна база и тормозит конкретное место, обычно достаточно настройки и фоновых задач. Если границы внутри системы размыты, сначала вводим модули внутри монолита. Отдельные сервисы выделяем там, где нужны независимые релизы, другой масштаб или изоляция сбоев. Вывод записываем в обследовании с причинами.
Не по названию, а по замерам: профиль запросов, время ответа по операциям, рост данных, поведение при перегрузке. Испытания проводим на стенде с данными, похожими на боевые.
Да, обычно через постепенную замену: перед старой системой ставится прослойка, функции переезжают по одной, старое отключается, когда в него не остаётся обращений. Для каждого шага заранее описан откат. Это дольше, чем остановка и переписывание, но риск остановки бизнеса ниже.
Мы не обещаем доступности «три девятки» или круглосуточной реакции: круглосуточной дежурной смены у нас нет. Мы проектируем систему так, чтобы цель по доступности была достижима и проверяема, и измеряем её. Реакция по сопровождению зависит от пакета и записана в договоре.
На вашем оборудовании или у выбранного вами хостера. Исходный код лежит в вашем репозитории с первого коммита. Результат работ передаётся вам по акту, порядок передачи прав записывается в договоре; открытые компоненты остаются под своими лицензиями. Персональные данные граждан России обычно должны храниться на серверах в России.
Да, помесячно: 20 000, 60 000 или 120 000 ₽ в месяц, до 4, 12 или 25 часов. Часы сверх пакета стоят 5 000 ₽ в час и согласуются до начала работ. Круглосуточного дежурства нет, об этом говорим до договора.
Мы в Ростове-на-Дону, работаем с заказчиками по всей России: удалённо и в вашем контуре. Доступ к системам и обследование согласуем на старте с вашей службой безопасности.