Все проекты
Serverless / Эксперимент

FuncWarm

Управляющий сервис прогрева serverless-приложений.

Рабочий прототипGo / GCP Cloud Run / HTTP / Observability
Задача

Редкие запросы тоже требуют быстрого ответа.

Между всплесками нагрузки Cloud Run может масштабировать сервис до нуля. Следующий запрос ждёт запуска контейнера и инициализации — в момент, когда пользователю уже нужен ответ.

Что я сделал

Отдельный Go-контроллер для запросов прогрева.

Я разработал FuncWarm: он отправляет HTTP-запросы к настроенным целям по расписанию и фиксирует результат. Политика прогрева отделена от бизнес-сервисов — интервал и путь запроса можно настраивать и наблюдать независимо.

Интерактивная архитектура

funcwarm / разбор архитектурыДемонстрация архитектуры

Цикл запроса прогрева.

активен / записанповторсбой / отмена
Шаг 1 / 6Готов

Наступает время запроса

Планировщик выбирает endpoint. В реальной системе нужно избегать синхронных всплесков и неограниченных пересечений.

Запрос
не отправлен
Управление инстансом
платформа Cloud Run
Измерение
ожидает ответа
Узел / Планировщик

Выбирает цель по расписанию. Нужны ограничение параллелизма, jitter и явная политика пересечения запусков.

Прочитать все шаги

Выбрать цель по расписанию, отправить запрос, получить ответ и записать результат.

  1. Планировщик выбирает endpoint. В реальной системе нужно избегать синхронных всплесков и неограниченных пересечений.

  2. Go-контроллер задаёт deadline и контекст отмены до HTTP-запроса.

  3. HTTP-запрос приходит к цели. Запуск или переиспользование инстанса решает платформа, не контроллер.

  4. Контроллер получает ответ, проверяет статус и измеряет прошедшее время.

  5. Сохранить статус и длительность для цели и попытки. Ошибки видны наряду с успешными ответами.

  6. Контроллер сообщает статус и длительность каждой попытки. Учитываю эти наблюдения, нагрузку и стоимость инфраструктуры при выборе политики прогрева.

FuncWarm / эксперимент

20 запросов. 20 успешных ответов.

Я настроил периодические запросы к Cloud Run и фиксировал результат и время ответа каждой попытки.

Запросы
20Одна серия измерений
Успешность
100%20 из 20
Средняя задержка
103 мсПо 20 запросам
Максимальная задержка
283 мсМаксимум в эксперименте
Успешные запросы
20Всего 20 попыток
Холодные запуски
0В этой выборке
20/20Запросов выполнено100%

Каждая отметка — успешный запрос. Результат относится к этому эксперименту; сохранением инстансов по-прежнему управляет Cloud Run.

Cloud Run / модель стоимости

Три стратегии. Прозрачный расчёт стоимости.

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

Параметры сценария

Ресурсы и нагрузка

В примере контроллер работает на существующей инфраструктуре: дополнительные мощности стоят $0. Укажите ежемесячные расходы для своего размещения.

Расчётные USD за месяц30 дней / 1 vCPU / 0,5 GiB
A / min=0

Масштабирование до нуля

0,00 $

Только рабочий трафик, без прогрева

Минимум расходов в модели
B / min=0

FuncWarm

0,13 $

43 200 запросов прогрева

C / min=1

Минимальные инстансы

9,72 $

Постоянная минимальная мощность

FuncWarm против minimum instances9,59 $ меньше / месяц
Из чего складывается цена
Ресурсы и расходы для каждого варианта
СоставляющаяМасштабирование до нуляFuncWarmМинимальные инстансы
vCPU-секунды04 3202 592 000
GiB-секунды02 1601 296 000
Запросы043 2000
CPU0,00 $0,10 $6,48 $
Память0,00 $0,0054 $3,24 $
Плата за запросы0,00 $0,02 $0,00 $
Скидка free tier0,00 $0,00 $0,00 $
Контроллер + прочие расходы0,00 $0,00 $0,00 $
Тарифы, допущения и границы расчёта

Прайс-лист USD для поддерживаемых регионов Tier 1, проверен 2 ноября 2026. Оплата за запросы: время округляется вверх до 100 мс, запрос использует выбранные CPU и память без совместного выполнения. Активная работа вычитается из простоя minimum instances. Оплата за инстанс использует введённое время жизни — не меньше активной работы и одной минуты. Переключатель free tier означает, что месячный лимит billing account не использован другими сервисами; скидка применяется к стоимости ресурсов.

Это модель части инфраструктурных расходов, а не полный счёт за хостинг. Исходящий трафик, логи, сборка/хранение, налоги и committed-use discounts не включены, если не добавлены в прочие расходы. Запрос прогрева не резервирует инстанс. Измеренные 103/283 мс не меняются вместе с вводными цены.

Мой вклад

Спроектировал и реализовал планирование периодических запросов и мониторинг прототипа.

Решения и компромиссы

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

Периодические запросы заменяют постоянную простаивающую мощность работой по расписанию и расходами контроллера. Сравниваю их стоимость с minimum instances; жизненным циклом цели управляет Cloud Run.

Отделить политику прогрева от сервиса.

Я вынес расписание в отдельный управляющий сервис. Конфигурация цели задаёт HTTP-адрес и интервал; бизнес-сервису не нужен собственный таймер и зависимость от планировщика.

Расписание → запрос → наблюдение.

Планировщик выбирает цель, для которой наступил срок. Go-контроллер отправляет HTTP-запрос, мониторинг фиксирует исход и длительность. Context и deadline ограничивают операцию, отмена не даёт накапливать ненужные запросы.

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

Ограничивать ошибки так же, как успешные запросы.

Ошибки DNS, соединения, HTTP и истечение deadline требуют разных исходов. Лимит повторов не даёт недоступной цели занять всю ёмкость контроллера. При завершении работы нужно отменить активные запросы и освободить ресурсы.

Оплачивать запросы или держать мощность.

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

Minimum instances — настройка платформы для сохранения простаивающей мощности. FuncWarm проверяет настоящий HTTP-путь, но не резервирует инстанс: сохранением, перезапусками и масштабированием управляет Cloud Run. При жёстком требовании к первому ответу это различие важно.

Проверять deadlines, отмену и пересечения.

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

Наблюдать контроллер и его цели.

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

Результаты и следующие шаги

В моём эксперименте все 20 запросов завершились успешно. Средняя задержка — 103 мс, максимальная — 283 мс. Холодных попыток не наблюдалось.

Главный вывод

Отдельный Go-контроллер централизует политику прогрева и делает исходы запросов видимыми. Оцениваю его эксплуатационные расходы вместе с требованиями сервиса к первому ответу.

Продолжить чтениеEventForge