Разработка микросервисов

Монолит работает, пока продукт маленький. Когда функций становится много, каждая доработка затрагивает соседние модули, фоновые задачи конкурируют за ресурсы с API, а масштабирование означает покупку более мощного сервера. Разделяю монолит на независимые сервисы на Go и PHP: gRPC и очереди для связи, независимое масштабирование и поэтапный переход без остановки продукта.

  • Архитектура
  • Highload

Признаки того, что монолит мешает развитию

  • Изменение в одной области ломает другие: правка каталога затрагивает заказы, а обновление авторизации — весь продукт
  • Фоновые задачи тормозят пользовательский API: генерация отчётов и рассылки конкурируют за ресурсы с запросами клиентов
  • Масштабирование дорогое: чтобы выдержать рост, приходится увеличивать мощность одного сервера, а не добавлять экземпляры нужного модуля
  • Разработка замедляется: команда не может выпускать изменения независимо, каждое обновление требует согласования со всеми модулями
  • Ошибка в одном месте роняет всё: сбой фоновой обработки останавливает и приём заказов, и личный кабинет

Как устроена сервисная архитектура

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

Redis

Кэш горячих данных и сессий — разгружает базу данных.

Очередь

Фоновые задачи: письма, выгрузки, интеграции — без блокировки API.

PostgreSQL

Основное хранилище данных с репликами и бэкапами.

ClickHouse

Аналитика и отчёты — отдельно от операционной нагрузки.

  • Load Balancer распределяет запросы между экземплярами приложения.
  • Приложения масштабируются горизонтально — добавлением новых экземпляров.
  • Данные разделены по назначению: кэш, очереди, операционная БД, аналитика.

Пример перехода на микросервисы

Архитектура · 2024

Микросервисная платформа на Go

Сервисная архитектура для SaaS-продукта с отдельными компонентами авторизации, бизнес-логики, API и фоновой обработки.

  • Фоновые операции перестали блокировать пользовательские запросы
  • Сервисы можно масштабировать независимо друг от друга
  • Изменения в отдельных компонентах затрагивают меньше кода
Подробнее о кейсе

Что входит в разработку микросервисов

  • Декомпозиция монолита

    Определяю границы сервисов по бизнес-сценариям, а не по техническим слоям. Каждый сервис отвечает за свою область и развивается независимо.

  • Межсервисное взаимодействие

    gRPC для синхронных вызовов и очереди для асинхронных операций. Сервисы не зависят от внутренних деталей друг друга, только от контрактов.

  • Независимое масштабирование

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

  • Отказоустойчивость

    Сбой одного сервиса не останавливает продукт: очередь накапливает задачи, а повторные попытки обрабатываются после восстановления.

  • Поэтапный переход

    Монолит не переписывается за один раз. Выделяю сервисы по одному, сохраняя работающий продукт, и переношу нагрузку постепенно.

  • Наблюдаемость

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

Как проходит переход на микросервисы

  1. Анализ монолита

    Разбираю, какие сценарии нагружены, где возникают конфликты и что мешает развитию. Определяю, какие части стоит выделять, а какие оставить вместе.

  2. Проектирование границ

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

  3. Выделение первого сервиса

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

  4. Последовательное выделение

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

  5. Запуск и сопровождение

    Настраиваю мониторинг, очереди и масштабирование. После перехода остаюсь на связи для развития сервисов и решения новых задач.

Технологии микросервисов

Языки и фреймворки

  • Go
  • Gin
  • Fiber
  • PHP
  • Yii2
  • Node.js

Взаимодействие

  • gRPC
  • REST API
  • RabbitMQ
  • Kafka
  • Redis Streams

Данные

  • PostgreSQL
  • Redis
  • ClickHouse
  • Схема данных

Инфраструктура

  • Docker
  • Kubernetes
  • CI/CD
  • Мониторинг
  • Трассировка

Стоимость разработки микросервисов

от 2 500 ₽/час

Разработка и доработка. Предварительная оценка. Точная стоимость — после анализа задачи

Частые вопросы

Сколько стоит переход на микросервисы?

Работа оценивается по часам: ориентир указан в панели цен выше. Стоимость зависит от числа выделяемых сервисов и сложности интеграций. После анализа монолита даю оценку и разбивку по этапам.

Сколько времени занимает разделение монолита?

Первый сервис — 2–4 недели, включая проектирование границ и перенос нагрузки. Полный переход — от 3–6 месяцев в зависимости от размера системы. Переход идёт поэтапно, продукт не останавливается.

Обязательно ли переходить на микросервисы?

Нет. Микросервисы решают конкретные проблемы: конфликты изменений, конкуренцию за ресурсы, дорогое масштабирование. Если этих проблем нет, монолит может быть правильным решением. Начинаю с анализа и говорю, что реально нужно.

Что будет с работающим продуктом во время перехода?

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

Что нужно от меня для старта?

Доступ к коду и описание проблем: что тормозит развитие, какие сценарии нагружены, где происходят сбои. Технический бриф не нужен — разберу систему и предложу план.

Как вы измеряете результат перехода?

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

Обсудить переход на микросервисы

Опишите, что мешает развитию продукта: конфликты изменений, тормозящие фоновые задачи или дорогое масштабирование, — отвечу с оценкой подхода и планом перехода.