0Pricing
Go Academy · Урок

Проверки работоспособности и настройка для эксплуатации

HEALTHCHECK, tini и обработка сигналов в контейнерах

«Проверки работоспособности и настройка для эксплуатации» — бесплатный урок Go Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.

Конечные точки проверки состояния

Конечная точка проверки состояния позволяет балансировщикам нагрузки и оркестраторам убедиться, что сервис работает и готов принимать трафик. Распространены два вида: проверка работоспособности (запущен ли сервис?) и проверка готовности (может ли он обрабатывать запросы?).

Конечная точка проверки работоспособности

Возвращает 200 OK, если процесс работает. Простой обработчик, который всегда успешно проходит проверку, — достаточно, чтобы процесс был запущен:

mux.HandleFunc("/healthz/live", func(w http.ResponseWriter, r *http.Request) {
    w.WriteHeader(http.StatusOK)
})

Конечная точка проверки готовности

Возвращает 200 только тогда, когда сервис готов (подключена база данных, прогрет кэш, выполнены миграции). Во время запуска или при ухудшении состояния возвращает 503:

mux.HandleFunc("/healthz/ready", func(w http.ResponseWriter, r *http.Request) {
    if err := db.PingContext(r.Context()); err != nil {
        w.WriteHeader(http.StatusServiceUnavailable); return
    }
    w.WriteHeader(http.StatusOK)
})

Проверки Kubernetes

Настройте проверки работоспособности и готовности в спецификации Deployment Kubernetes:

livenessProbe:
  httpGet: { path: /healthz/live, port: 8080 }
  initialDelaySeconds: 5
  periodSeconds: 10
readinessProbe:
  httpGet: { path: /healthz/ready, port: 8080 }
  initialDelaySeconds: 3
  periodSeconds: 5

Настройка GOMAXPROCS

В контейнерах GOMAXPROCS по умолчанию равен количеству процессоров CPU хоста, а не ограничению CPU контейнера. Используйте go.uber.org/automaxprocs, чтобы правильно задать его на основе ограничений cgroup.

import _ "go.uber.org/automaxprocs"

Ограничения памяти

Задайте GOMEMLIMIT равным ограничению памяти контейнера, чтобы сборщик мусора мог активнее использовать память до срабатывания средства завершения процессов из-за OOM:

import "runtime/debug"
debug.SetMemoryLimit(512 * 1024 * 1024) // 512 MiB

Настройка сборщика мусора

Задайте GOGC, чтобы управлять частотой работы сборщика мусора. Значение по умолчанию — 100 (сборка мусора выполняется, когда размер кучи удваивается). Меньшие значения уменьшают потребление памяти ценой более частой сборки мусора; большие значения позволяют использовать больше памяти, но сокращают частоту сборки мусора.

os.Setenv("GOGC", "200") // allow heap to grow 2× before GC

Настройка pool соединений

Задайте ограничения pool соединений с базой данных с учётом ограничений ресурсов контейнера и значения max_connections базы данных:

db.SetMaxOpenConns(25)
db.SetMaxIdleConns(10)
db.SetConnMaxLifetime(5 * time.Minute)

Предоставление метрик

Предоставляйте метрики Prometheus на отдельном порту, а не на основном порту API, чтобы не раскрывать внутренние данные внешним клиентам:

go func() {
    http.Handle("/metrics", promhttp.Handler())
    http.ListenAndServe(":9090", nil)
}()

Корректное завершение работы в Kubernetes

Задайте terminationGracePeriodSeconds в спецификации пода, чтобы оставить достаточно времени для тайм-аута завершения работы. Сразу возвращайте 503 из проверки готовности после получения SIGTERM.

Профилирование в рабочей среде

Включайте pprof на непубличном порту с аутентификацией. Никогда не предоставляйте его публично — он раскрывает внутреннее состояние и может использоваться для отказа в обслуживании сервиса.

Быстрая проверка

Почему GOMAXPROCS следует задавать на основе ограничений CPU контейнера, а не количества CPU хоста?

Итоги: проверки состояния и настройка рабочей среды

Основные положения:

  • Проверка работоспособности: процесс запущен; проверка готовности: сервис может принимать трафик
  • automaxprocs задаёт GOMAXPROCS на основе ограничений CPU контейнера
  • GOMEMLIMIT предотвращает завершение процессов из-за OOM; GOGC настраивает частоту сборки мусора
  • Предоставляйте метрики на отдельном порту, доступном только из внутренней сети

Часто задаваемые вопросы

Урок «Проверки работоспособности и настройка для эксплуатации» бесплатный?

Да — полный текст урока «Проверки работоспособности и настройка для эксплуатации» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.

Чему я научусь в уроке «Проверки работоспособности и настройка для эксплуатации»?

HEALTHCHECK, tini и обработка сигналов в контейнерах Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Go Academy?

Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Проверки работоспособности и настройка для эксплуатации»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Go Academy?

Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Многоэтапная сборка Docker для Go
  2. Конфигурация окружения и секреты
  3. Docker Compose для локальной разработки
  4. Проверки работоспособности и настройка для эксплуатации
← Назад к Go Academy