Serverless

Google Cloud Run

Керований запуск контейнерів з автомасштабуванням до нуля й оплатою за використання.

Що це

Cloud Run запускає ваш Docker-контейнер у Google Cloud без керування серверами чи Kubernetes. Достатньо, щоб контейнер слухав HTTP-порт і був без стану.

Масштабується від нуля до тисяч екземплярів залежно від трафіку, а при відсутності запитів ви нічого не платите. Один екземпляр може обробляти багато запитів одночасно, що вигідніше за модель «одна функція, один запит».

Є також Cloud Run jobs для пакетних задач. Це хороший компроміс між FaaS і контейнерами: ви не прив'язані до формату функцій, а образ можна перенести на інший хостинг, бо Cloud Run сумісний з API Knative.

Коли брати

  • Бекенд чи API в контейнері, який треба швидко розгорнути без Kubernetes.
  • Нерівномірний трафік і бажання платити лише за використання.
  • Потрібна переносність: той самий Docker-образ можна запустити деінде.
  • Вебхуки, внутрішні сервіси та пакетні задачі (jobs).

Коли не варто

  • Застосунок зберігає стан у пам'яті чи на диску між запитами.
  • Потрібні постійні WebSocket-з'єднання на довгі години або GPU-навантаження загального типу.
  • Затримка холодного старту контейнера неприйнятна, а вимкнути масштабування до нуля не можна за бюджетом.

Ключові поняття

Service
Контейнер, що відповідає на HTTP-запити, має власний URL і ревізії.
Revision
Незмінна версія сервісу. Можна розподіляти трафік між ревізіями для канарейкового релізу.
Concurrency
Скільки запитів одночасно обробляє один екземпляр (до 1000), що знижує кількість екземплярів і вартість.
Min instances
Мінімум готових екземплярів, щоб уникнути холодного старту за невеликі гроші.
Jobs
Контейнер, який виконується до завершення, без HTTP: міграції, звіти, пакетна обробка.

Приклад

Опис сервісу Cloud Run у форматі Knative.

Питання на співбесіді

  1. 1. Чим Cloud Run відрізняється від Cloud Functions чи Lambda?

    Cloud Run запускає довільний контейнер і дозволяє одному екземпляру обробляти багато запитів одночасно. Функції приймають код у визначеному форматі й зазвичай обробляють один запит на екземпляр.

  2. 2. Чому застосунок на Cloud Run має бути stateless?

    Екземпляри створюються й зникають автоматично, а локальний диск і пам'ять не зберігаються між ними. Стан тримають у зовнішніх сховищах: базі, Redis чи Cloud Storage.

  3. 3. Як зменшити холодні старти?

    Налаштувати мінімальну кількість екземплярів, зменшити образ, пришвидшити запуск застосунку та збільшити concurrency, щоб рідше піднімати нові екземпляри.

Логотипи належать їхнім власникам і використані лише для ідентифікації. Іконки: Simple Icons (CC0), Devicon (MIT).

Розділи платформи