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: міграції, звіти, пакетна обробка.
Приклад
Питання на співбесіді
1. Чим Cloud Run відрізняється від Cloud Functions чи Lambda?
Cloud Run запускає довільний контейнер і дозволяє одному екземпляру обробляти багато запитів одночасно. Функції приймають код у визначеному форматі й зазвичай обробляють один запит на екземпляр.
2. Чому застосунок на Cloud Run має бути stateless?
Екземпляри створюються й зникають автоматично, а локальний диск і пам'ять не зберігаються між ними. Стан тримають у зовнішніх сховищах: базі, Redis чи Cloud Storage.
3. Як зменшити холодні старти?
Налаштувати мінімальну кількість екземплярів, зменшити образ, пришвидшити запуск застосунку та збільшити concurrency, щоб рідше піднімати нові екземпляри.
Схожі технології
- Google CloudХмара Google з сильними даними, аналітикою, Kubernetes (GKE) і ML-сервісами.
- DockerDocker пакує застосунок разом із залежностями в контейнер, який однаково запускається на ноутбуці, сервері та в хмарі.
- AWS LambdaСервіс AWS для запуску функцій у відповідь на події з оплатою лише за час виконання.
- KubernetesKubernetes це система оркестрації контейнерів: розгортає, масштабує та лікує застосунки на кластері серверів.
- Google Pub/SubGoogle Pub/Sub це глобальний керований сервіс обміну повідомленнями з моделлю publish/subscribe, який масштабується автоматично.
Логотипи належать їхнім власникам і використані лише для ідентифікації. Іконки: Simple Icons (CC0), Devicon (MIT).