Микросервисы в Docker: уроки, которые дал прод
Микросервисы в контейнерах выглядят игрушечно, пока не приходит первый же пиковый трафик: OOMKilled, рестарт-лупы и очередь сообщений, которая растёт быстрее, чем мы успеваем читать алерты.
Урок первый: лимиты памяти и CPU — не формальность. Сервис без limits однажды съел всю ноду и утащил за собой трёх соседей, включая авторизацию.
services:
billing:
deploy:
resources:
limits: { memory: 512M, cpus: "0.75" }
restart: unless-stopped
healthcheck:
interval: 10s
retries: 3
Урок второй: healthcheck должен проверять зависимости, а не просто отвечать 200 на /ping. Иначе оркестратор считает «здоровым» сервис, который не может достучаться до базы.
Урок третий: логируйте структурированно и пишите в stdout. JSON-логи + централизованный сбор сэкономили нам часы разборов инцидентов.
Контейнер — это не «маленькая виртуалка», а контракт между кодом и инфраструктурой. Контракты надо писать явно.
Комментарии 1
Про healthcheck с зависимостями — боль. У нас ещё readiness и liveness разведены, иначе роллинг-апдейт убивал живые поды.