📌 Полноценный микросервис - это не только API и база

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

☝️Так вот - у сервиса может быть аккуратная бизнес логика, open api и k8s-манифест. Но в Проде он становится полноценным только тогда, когда с ним можно работать во время сбоя: понять, что произошло, оценить влияние и безопасно вернуть его в строй.

Для этого у каждого сервиса должен быть базовый эксплуатационный контракт.

🔸Структурированные логи Не просто строки с Exception, а обязательные поля: имя сервиса, окружение, идентификатор операции, trace id, тип внешнего вызова, длительность, номер попытки. По ним должна собираться история одного запроса через несколько сервисов.

🔸Метрики Как минимум число запросов, ошибки, задержки, активные воркеры, очередь и насыщение ключевых ресурсов: пул соединений, CPU, память. Логи отвечают на вопрос «что случилось с этой операцией». Метрики — «когда началось и насколько широко затронуло».

🔸Трассировка В синхронной цепочке HTTP/gRPC и в асинхронной через брокер. Без неё расследование превращается в сопоставление временных меток между сервисами. Correlation id полезен, но trace id и span’ы показывают ещё и границы вызовов с их длительностью.

🔸Хелсчеки с разными смыслами Liveness: процесс вообще жив и не завис. Readiness: экземпляр действительно может принять трафик. Это не один endpoint, который всегда отвечает 200. Во время старта, миграций, потери критичной зависимости или перегрева сервис может быть жив, но не готов обслуживать запросы.

🔸Корректное завершение работы При остановке экземпляр сначала должен уйти из балансировки, перестать брать новые сообщения и завершить уже начатые в разумный срок. Иначе обычный rolling update выглядит для клиентов как случайные 5xx и дубли в очереди.

🔸Таймауты, отмена и ограничение параллелизма У каждого внешнего вызова должно быть время ожидания. У обработчиков — реакция на cancellation token. У тяжёлых операций — понятный предел конкуренции. Иначе одна зависшая интеграция постепенно забирает потоки, соединения и весь сервис.

🔸Конфигурация и секреты вне сборки Адреса, лимиты, флаги и ключи должны меняться без пересборки образа и без попадания в логи. Ещё лучше, когда у конфигурации есть валидация на старте: сервис падает сразу с понятной причиной, а не через полчаса на первом запросе.

🔸Единый способ отдать всё это наружу Эндпоинты, форматы логов, имена метрик, propagation заголовков и правила алертов не стоит каждый раз придумывать заново. Обычно это хороший общий пакет или шаблон сервиса, а не копипаста из прошлого проекта.

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

‼️Микросервис без него - не маленький самостоятельный сервис. Это просто приложение, которое пока никто не пытался чинить в три часа ночи.

📌 Полноценный микросервис - это не только API и база | Сетка — социальная сеть от hh.ru