Введение в Serverless
Перед началом: базовый Go (горутины, интерфейсы,
context), общее понимание облака. Инструменты: Yandex Cloud CLI, веб-консоль YC. Время: ~4 ч.
🔥 Инцидент: 10 000 пользователей — и сервер лёг
Стартап запускает чат. Первые 100 пользователей — всё работает: одно VPS справляется, WebSocket-ы держатся, база отвечает за миллисекунды. Команда празднует релиз и идёт за пиццей.
Затем — рост. 10 000 одновременных пользователей. WebSocket-соединения съедают всю память, CPU упирается в потолок, сервер падает под нагрузкой. Покупать больше серверов — дорого: каждый новый инстанс стоит денег 24/7, даже когда чатом ночью никто не пользуется.
Serverless обещает «масштаб от нуля до бесконечности» и оплату только за фактические вызовы. Но как именно это работает? Где граница между «дёшево» и «бесконечно масштабируется»? Этот курс — про то, как построить рабочий чат за ₽0/мес и не наступить на грабли cold start, stateless-функций и распределённого состояния.
📖 Теория
Что мы построим
В этом курсе мы создадим production-ready мессенджер на serverless-архитектуре Yandex Cloud: P2P и групповые чаты, real-time доставка сообщений, авторизация (JWT), офлайн-режим (PWA) — и всё это укладывается в free-tier (₽0/мес) при малом трафике.
Чему вы научитесь
- Проектировать serverless-архитектуру (API Gateway, Cloud Functions, YDB, YMQ, YDS, Serverless Container).
- Писать бэкенд на Go с Clean Architecture (UseCase, Service, Repository, DI).
- Реализовывать авторизацию (регистрация, JWT access + refresh, bcrypt, middleware).
- Работать с YDB (SQL, транзакции, индексы, идемпотентность).
- Настраивать real-time через WebSocket (Serverless Container, hub, graceful shutdown).
- Управлять асинхронной обработкой через YMQ (очереди, DLQ, retry, at-least-once).
- Развёртывать инфраструктуру через Terraform (CI/CD, rollback).
- Добавлять наблюдаемость (OpenTelemetry, метрики, логи, трейсы, SLO).
Что такое Serverless (коротко)
Serverless — модель, где облачный провайдер управляет серверами, а вы платите только за фактическое использование. Приложение автоматически масштабируется от 0 (в простое — ₽0) до миллионов запросов.
Плюсы: автоскейлинг, оплата за использование, нет управления инфраструктурой. Минусы: cold start (функция «просыпается» ~500 мс), функции stateless (состояние во внешних сервисах), лимиты времени выполнения (до 15 мин для Cloud Functions).
Сервисы Yandex Cloud
| Сервис | Назначение | Free-tier |
|---|---|---|
| Cloud Functions | Запуск Go-кода (stateless REST API) | 1 000 000 вызовов/мес |
| Serverless Containers | Docker-контейнеры (stateful WebSocket) | 1 000 000 запросов/мес |
| YDB (serverless) | SQL база данных | 1 000 000 RU/мес |
| YMQ | Очередь сообщений (SQS-совместимая) | 100 000 запросов/мес |
| YDS | Стрим данных (real-time fan-out) | 2 000 000 единиц/мес |
| API Gateway | HTTP/WebSocket маршрутизация, JWT validation | 100 000 запросов/мес |
| Object Storage | Хостинг статики PWA (S3) | 1 ГБ |
Все лимиты бесплатны. При 20 пользователях и 1000 сообщений/день всё уложится в ₽0.
Для кого этот курс
- Backend-разработчики на Go.
- Знакомые с REST, SQL, базовым Docker.
- Желающие освоить serverless в Yandex Cloud.
Prerequisites:
- Базовый Go (горутины, интерфейсы,
context). curlилиhttpieдля тестирования API.- Аккаунт Yandex Cloud (бесплатный стартовый грант).
Дорожная карта курса
| № | Модуль | Что делаем |
|---|---|---|
| 1 | Введение (вы здесь) | Serverless, сервисы YC, roadmap |
| 2 | Архитектуры чата | Сравнение bare metal / VDS / K8s / serverless → выбор |
| 3 | Serverless-дизайн | 10 компонентов, поток данных, free-tier |
| 4 | Backend на Go | Clean Architecture, UseCase, Composition Root |
| 5 | Auth, API, тесты | JWT, bcrypt, API Gateway, curl-тест двумя пользователями |
| 6 | YDB | SQL DDL, транзакции, индексы, идемпотентность |
| 7 | WebSocket | Hub, read/write pumps, graceful shutdown |
| 8 | Очереди (YMQ) | Visibility timeout, DLQ, retry, at-least-once |
| 9 | Terraform + CI/CD | IaC, remote state, pipeline, rollback |
| 10 | Масштабирование | Когда уходить с serverless, GC, K8s |
| 11 | Observability | Метрики, логи, трейсы, SLO, алерты |
Что у вас будет в конце курса
- ✅ Работающий чат: регистрация, вход, комнаты, real-time сообщения.
- ✅ Бэкенд на Go с Clean Architecture, готовый к масштабированию.
- ✅ Развёрнутый в Yandex Cloud (или локально через docker-compose).
- ✅ Стоимость ₽0/мес при малом трафике.
- ✅ Инфраструктура как код (Terraform) с CI/CD.
Вперед → В модуле 2 сравним архитектуры развёртывания (bare metal, VDS, K8s, serverless) и обоснуем выбор serverless под free-tier.
Компромиссы (Trade-offs)
| Свойство | Serverless | VM / VPS |
|---|---|---|
| Оплата | за вызовы (₽0 в простое) | 24/7 за инстанс |
| Масштаб | авто 0 → N | ручное / HPA |
| Cold start | ~500 мс | нет |
| Состояние | во внешних сервисах (YDB/YMQ) | в памяти процесса |
| Ops-нагрузка | низкая | средняя–высокая |
| Прогноз стоимости | переменный | предсказуемый |
Вывод: serverless — для MVP и непредсказуемой нагрузки; VM/K8s — для стабильной высокой нагрузки и stateful-сценариев. Подробнее — в Модуле 2.
🧩 Проверь себя
🔗 Мостик к Модулю 2
Serverless — это не магия. «Масштаб от нуля» работает только при правильной архитектуре, а free-tier покрывает лишь ограниченную нагрузку. В Модуле 2 выберем правильную архитектуру: честно сравним bare metal, VPS, Kubernetes и serverless по матрице NFR (бюджет, нагрузка, команда, time-to-market) и обоснуем, почему под наш чат подходит именно serverless.