Вернуться к главной странице, списку всех тем
6. Запуск приложений на серверах в интернете. Использование готовых решений, когда мы просто заказываем, какое приложение нам нужно, а запускают его автоматически за нас
Представь себе, что у тебя есть кафе. Чтобы его открыть, тебе нужно: купить здание, провести электричество, оборудовать кухню, нанять поваров, закупить продукты. Это долго, дорого, и если завтра передумаешь — потратишь кучу денег впустую.
А теперь представь, что есть огромная сеть кафе, у которой можно арендовать всё что угодно:
- Можно арендовать только пустое здание — ты сам всё обустраиваешь (это IaaS, инфраструктура как сервис);
- Можно арендовать здание с готовой кухней и электричеством — приходишь и готовишь (это PaaS, платформа как сервис);
- А можно прийти в готовое кафе и просто покушать — всё уже сделано до тебя (это SaaS, программа как сервис).
Именно так устроены облака. Раньше компании покупали серверы, ставили их в дата-центры, нанимали администраторов. Сегодня всё можно «арендовать» в облаке у провайдера — Yandex Cloud, Cloud.ru (бывший SberCloud), VK Cloud, AWS, Google Cloud, Azure — и платить только за то, что реально использовал.
Что такое облако и зачем оно нужно
Облако (Cloud) — это удалённые серверы крупных провайдеров, к которым можно подключаться через интернет и использовать их вычислительные ресурсы по требованию: сегодня тебе нужен один маленький сервер, завтра — двадцать больших, послезавтра ни одного. Платишь только за то, что использовал, обычно поминутно или почасово.
Главные преимущества облака:
- Эластичность — мгновенно увеличиваешь или уменьшаешь ресурсы. Чёрная пятница на интернет-магазине? За пару минут добавил 50 серверов. Нагрузка спала? Удалил их и больше не платишь.
- Нет капитальных затрат — не нужно покупать железо на миллионы рублей вперёд. Платишь по факту (модель pay-as-you-go).
- Глобальное присутствие — у крупных провайдеров десятки дата-центров по всему миру. Можно разместить приложение ближе к пользователям, чтобы оно работало быстрее.
- Надёжность — облако само заботится о физическом железе, охлаждении, питании, замене сгоревших дисков. Тебе об этом думать не нужно.
- Готовые сервисы — облако предлагает не только «голые» серверы, но и сотни готовых решений: базы данных, очереди сообщений, объектные хранилища, балансировщики нагрузки, Kubernetes-кластеры. Это всё работает «из коробки», тебе не нужно ничего настраивать с нуля.
Три классические модели облачных услуг
IaaS — Infrastructure as a Service (Инфраструктура как сервис)
Ты получаешь «голые» виртуальные машины, виртуальные сети, диски, IP-адреса. Дальше всё настраиваешь сам: операционную систему ты выбираешь, программы ставишь сам, безопасность настраиваешь сам.
Примеры IaaS-сервисов:
- Yandex Compute Cloud — виртуальные машины в Yandex Cloud
- AWS EC2 — виртуальные машины в Amazon
- Cloud.ru Evolution Compute — виртуальные машины в Cloud.ru
- VK Cloud Virtual Servers — виртуальные машины в VK Cloud
Аналогия: ты арендовал пустое помещение под кафе. Стены, потолок, электричество есть, дальше всё сам.
PaaS — Platform as a Service (Платформа как сервис)
Ты получаешь готовую платформу под свои приложения. Не нужно думать про операционную систему, обновления, патчи безопасности — этим занимается провайдер. Ты просто заливаешь свой код или указываешь Docker-образ, а платформа сама его запускает и масштабирует.
Примеры PaaS-сервисов:
- Managed Kubernetes (Yandex Managed Service for Kubernetes, AWS EKS, Cloud.ru Managed K8s) — готовый Kubernetes-кластер. Тебе не нужно ставить и настраивать master-узлы, обновлять их — провайдер делает это сам.
- Managed PostgreSQL / MySQL / Redis — готовая база данных с автоматическими бэкапами, репликацией и обновлениями.
- Object Storage (Yandex Object Storage, AWS S3) — почти бесконечное хранилище файлов с оплатой за гигабайты.
- Serverless Functions (Yandex Cloud Functions, AWS Lambda) — запуск маленьких функций «по запросу», ты платишь только за миллисекунды реального исполнения.
Аналогия: ты арендовал помещение с полностью оборудованной кухней. Плита, посуда, холодильник, газ — всё уже есть. Ты только готовишь.
SaaS — Software as a Service (Программа как сервис)
Ты получаешь готовую программу, которой просто пользуешься. Ничего настраивать не нужно вообще.
Примеры SaaS-сервисов:
- GitHub / GitLab.com — хостинг кода и CI/CD как сервис
- Google Workspace, Яндекс 360 — почта, документы, диск
- Notion, Confluence — корпоративная база знаний
- Datadog, Grafana Cloud — мониторинг как сервис
- Slack, Mattermost Cloud — корпоративные мессенджеры
Аналогия: ты пришёл в готовое кафе и кушаешь. Всё сделали за тебя.
Сравнительная таблица: что обслуживает провайдер, а что ты
| Что нужно поддерживать | On-premise (своё железо) | IaaS | PaaS | SaaS |
|---|---|---|---|---|
| Физические серверы | Ты | Облако | Облако | Облако |
| Виртуализация | Ты | Облако | Облако | Облако |
| Операционная система | Ты | Ты | Облако | Облако |
| Среда выполнения | Ты | Ты | Облако | Облако |
| Приложение | Ты | Ты | Ты | Облако |
| Данные | Ты | Ты | Ты | Облако (часто) |
FaaS и Serverless — следующий шаг эволюции
FaaS (Function as a Service) или Serverless — это PaaS, доведённый до предела. Ты не управляешь даже контейнерами и серверами. Ты пишешь функцию (например, на Python или JavaScript), загружаешь её в облако, и облако само её запускает, когда приходит HTTP-запрос или происходит событие (например, новый файл в хранилище).
Преимущества:
- Платишь только за миллисекунды реального исполнения функции
- Не думаешь про инфраструктуру вообще
- Автоматическое масштабирование «с нуля до миллионов запросов»
Недостатки:
- Холодный старт (первый запуск занимает 100–1000 мс — функцию нужно инициализировать)
- Vendor lock-in — код часто привязан к конкретному облаку
- Сложно отлаживать локально
Примеры: Yandex Cloud Functions, AWS Lambda, Cloud.ru Function как сервис, Cloudflare Workers.
Публичные, частные и гибридные облака
- Публичное облако (Public Cloud) — провайдер предоставляет ресурсы всем желающим через интернет. Yandex Cloud, AWS, Azure — это публичные облака. Дёшево на старте, очень эластично.
- Частное облако (Private Cloud) — облако внутри компании, на своём железе. Используется крупными банками, государственными организациями, военными — там, где данные не должны покидать периметр. Технологии: OpenStack, VMware vCloud.
- Гибридное облако (Hybrid Cloud) — комбинация: чувствительные данные в частном облаке, нагрузки попроще — в публичном. Соединены через защищённые каналы (VPN, прямые соединения вроде Yandex Cloud Interconnect).
Базовые понятия облачной инфраструктуры
Что бы ты ни выбрал — Yandex Cloud, AWS или другой — основные понятия везде похожи:
- VPC (Virtual Private Cloud) — виртуальная сеть в облаке, изолированная от других клиентов. Это твой собственный «остров» с диапазоном IP-адресов (например,
10.0.0.0/16). - Subnet (Подсеть) — часть VPC, расположенная в одной зоне доступности. Например,
10.0.1.0/24в зонеru-central1-aи10.0.2.0/24в зонеru-central1-b. - Zone (Зона доступности) — отдельный дата-центр в регионе. Если упадёт целый дата-центр, твоё приложение должно работать в другой зоне. Стандартная практика — размещать приложение минимум в двух зонах.
- Security Group (Группа безопасности) — виртуальный файрвол на уровне сети. Здесь ты разрешаешь, какой трафик может приходить к серверу и уходить от него. Например: «разрешить входящий TCP на 443 порт со всего интернета, входящий 22 порт только с моего IP».
- Public IP (Публичный IP) / EIP (Elastic IP) — внешний IP-адрес, по которому к серверу можно подключиться из интернета. Без него сервер живёт только во внутренней сети.
- Load Balancer (Балансировщик нагрузки) — распределяет входящий трафик между несколькими серверами. Например, у тебя 5 одинаковых веб-серверов, балансировщик равномерно отправляет запросы на каждый.
- Object Storage (S3-совместимое хранилище) — хранилище файлов с почти бесконечным объёмом. Платишь за гигабайты и за количество запросов.
- Managed DB — управляемая база данных. Облако само делает бэкапы, обновления, репликацию.
- IAM (Identity and Access Management) — система прав. Кто может что делать в облаке. Принцип: «давай минимально необходимые права» (principle of least privilege).
Оптимизация затрат — почему облако может стать очень дорогим
Облако удобно, но если им неаккуратно пользоваться, счёт в конце месяца может приятно удивить (в плохом смысле). Базовые правила экономии:
- Гаси то, что не используешь. Запустил машину на тест и забыл — она будет работать 24/7 и каждый час капать деньги. Удаляй или останавливай.
- Используй автомасштабирование. Ночью никто не работает с сайтом? Опусти количество реплик до 1. Днём — до 10.
- Резервированные ресурсы (Reserved Instances, Savings Plans). Если знаешь, что машина нужна 24/7 целый год — заплати вперёд с большой скидкой (до 70%).
- Spot / Preemptible Instances. Машины из «излишков» провайдера, дешевле в 3–5 раз, но облако может их забрать обратно через 5 минут. Подходят для пакетных задач, отказоустойчивого Kubernetes-кластера, аналитики.
- Right-sizing. Не заказывай 16 ядер, если приложение использует 2. Регулярно пересматривай.
- Object Storage tiers. Холодные архивы храни в дешёвых классах (Cold Storage, Glacier), они в 5–10 раз дешевле горячих.
- Тегируй ресурсы (labels/tags). Каждый ресурс должен иметь тег
team=backend,env=prod,project=billing— иначе через полгода будет невозможно понять, кто за что платит. - FinOps-практики. Это отдельная дисциплина — управление затратами в облаке. В крупных компаниях есть целые FinOps-команды.
Облака в России
После 2022 года международные провайдеры (AWS, GCP, Azure) перестали обслуживать российских клиентов. В России активно развиваются отечественные провайдеры:
- Yandex Cloud — крупнейший российский облачный провайдер. Полный набор сервисов: виртуальные машины, Managed Kubernetes, Managed PostgreSQL/MySQL/ClickHouse, Object Storage, ML-сервисы, AI Studio.
- Cloud.ru (бывший SberCloud) — облако от Сбербанка. Сильная сторона — интеграция с экосистемой Сбера, GPU-сервисы для ML.
- VK Cloud — облако от VK. Хороший набор PaaS-сервисов, Managed Kubernetes.
- Selectel — один из старейших российских хостингов и облаков. Сильная сторона — выделенные серверы и приватные облака.
- MWS (МТС Web Services) — облако от МТС.
- Beeline Cloud — облако от Билайн.
- T1 Cloud — облако от группы Т1.
Для зарубежного рынка по-прежнему доминируют AWS (около 30% рынка), Microsoft Azure (около 25%), Google Cloud (около 12%). Также набирают популярность Alibaba Cloud (Китай), Oracle Cloud Infrastructure.
Теоретические вопросы
-
В чём принципиальная разница между IaaS, PaaS и SaaS? Приведи примеры каждого. Ответ: IaaS — арендуешь «голую» виртуальную машину и всё настраиваешь сам (Yandex Compute, AWS EC2). PaaS — арендуешь готовую платформу под приложение, ОС и систему обслуживает провайдер (Managed Kubernetes, Managed PostgreSQL). SaaS — пользуешься готовой программой как сервисом (GitHub, Notion, Яндекс 360).
-
Что такое VPC и зачем она нужна? Ответ: Виртуальная изолированная сеть в облаке со своим диапазоном IP-адресов. Нужна для того, чтобы твои ресурсы не были перепутаны с ресурсами других клиентов облака и могли безопасно общаться между собой по внутренней сети.
-
Что такое Security Group, чем она отличается от классического файрвола? Ответ: Security Group — это виртуальный файрвол, привязанный не к сети, а к ресурсу (виртуальной машине, базе). Правила задаются в декларативном виде. В отличие от классического iptables, ты не пишешь команды, а описываешь «что разрешено» — остальное автоматически запрещено.
-
Зачем размещать приложение в нескольких зонах доступности? Ответ: Чтобы пережить падение целого дата-центра. Если все реплики в одной зоне и она упадёт — приложение недоступно. Если они в двух или трёх зонах — пользователи даже не заметят отказа одной из них.
-
Что такое serverless / FaaS? В каких случаях он оправдан, в каких нет? Ответ: Модель, где ты пишешь функции, а облако их запускает по событию (HTTP-запрос, новый файл в хранилище и т. д.) и масштабирует с нуля до тысяч одновременных вызовов. Оправдан для редких или нестабильных нагрузок, событийных задач, webhooks. Неоправдан для постоянно нагруженных сервисов (получится дорого) и для приложений, требовательных к холодному старту (например, низколатентные API).
-
Что такое vendor lock-in? Как его минимизировать? Ответ: Зависимость от одного провайдера. Чем больше ты используешь уникальных сервисов AWS (например, Lambda, DynamoDB), тем сложнее уйти в Yandex Cloud. Минимизировать: использовать переносимые технологии (Kubernetes, PostgreSQL, S3-совместимое хранилище), описывать инфраструктуру через Terraform/OpenTofu (об этом в уроке 7), избегать сильно специфичных API.
-
Чем Object Storage отличается от обычного диска? Ответ: Обычный диск (Block Storage) подключается к одной машине и работает как файловая система. Object Storage — это HTTP API: каждый файл — это «объект», доступный по уникальному URL. Object Storage почти бесконечно масштабируется (петабайты), оплачивается за гигабайты и за количество запросов. Block Storage быстрее (низкая задержка), но не масштабируется до петабайт и привязан к одной машине.
-
Что такое Reserved Instances и Spot Instances? Ответ: Reserved — машина, которую ты резервируешь на 1 или 3 года, платишь сразу со скидкой 30–70%. Подходит для постоянных нагрузок. Spot (или Preemptible в GCP, Прерываемые в Yandex Cloud) — машины из свободных мощностей провайдера, дешевле в 3–5 раз, но провайдер может их забрать в любой момент с предупреждением за 30 секунд — 2 минуты. Подходят для отказоустойчивых нагрузок: Kubernetes с автоскейлингом, пакетная обработка, тестовые окружения.
-
Что такое IAM и почему «принцип минимальных привилегий» важен? Ответ: IAM (Identity and Access Management) — система управления правами доступа. Принцип минимальных привилегий: давай ровно те права, которые нужны для задачи, и не больше. Если у сервисного аккаунта приложения есть права администратора и приложение скомпрометируют — атакующий получит полный контроль над всем облаком. Если есть только право читать одну S3-корзину — ущерб минимален.
-
Что такое Managed Service и какие у него плюсы и минусы по сравнению с самостоятельной установкой? Ответ: Управляемый сервис — облако само устанавливает, обновляет, бэкапит, мониторит. Например, Managed PostgreSQL. Плюсы: экономия времени, автоматические бэкапы и failover, обновления безопасности «из коробки». Минусы: дороже, чем самостоятельно установленный PostgreSQL на той же машине; ограничения в конфигурации (не все расширения и параметры доступны); привязка к провайдеру.
-
Что такое Region и Availability Zone? Сколько обычно зон в одном регионе? Ответ: Регион — это географически разделённая локация (например,
ru-central1— это Россия). Зона доступности — отдельный изолированный дата-центр внутри региона. Обычно 2–4 зоны в регионе, расположенные физически в десятках километров друг от друга (отдельное здание, питание, охлаждение, сетевые каналы). У Yandex Cloud сейчас три зоны в Москве и Подмосковье. -
Что такое CDN и зачем он нужен? Ответ: Content Delivery Network — сеть из десятков серверов по всему миру, которые кэшируют статический контент сайта (картинки, видео, CSS, JS). Пользователь получает файлы с ближайшего узла CDN, а не с твоего основного сервера. Преимущества: скорость загрузки, разгрузка основного сервера, защита от DDoS-атак. Примеры: Cloudflare, Yandex Cloud CDN, CloudMTS CDN.
-
Что такое DNS в облаке (Managed DNS)? Ответ: Управляемый DNS-сервис, который держит зоны твоих доменов на отказоустойчивой инфраструктуре провайдера. Yandex Cloud DNS, AWS Route 53, Cloudflare DNS. Чаще всего такие сервисы умеют health-checks и geo-routing — отправлять пользователей на ближайший сервер.
-
Что лучше для базы данных в проде: запустить самому на ВМ или взять Managed? Ответ: Для большинства задач — Managed. Самостоятельный запуск экономит деньги, но требует постоянной экспертизы по администрированию БД: бэкапы, восстановление, тюнинг, обновления, мониторинг репликации, failover. Цена ошибки очень высокая (потеря данных). Managed имеет смысл всегда, кроме случаев, когда нужна экзотическая конфигурация или экономия на каждой копейке.
-
Что такое FinOps? Ответ: Дисциплина (и часто отдельная команда), отвечающая за управление облачными затратами в крупных компаниях. Включает в себя: тегирование ресурсов, расчёт unit economics («сколько облака стоит обработка одного заказа»), регулярные ревью затрат, переговоры о скидках, обучение команд экономии. В компании с расходами от $1 млн в месяц на облако FinOps окупается с лихвой.
Практическая часть
Все задания ниже можно выполнить в бесплатном пробном периоде одного из облаков: Yandex Cloud даёт 4000 рублей грантов и месяц на ознакомление, Cloud.ru — 4000 рублей, VK Cloud — 3000 рублей. Бери любое, шаги похожие.
Задание 1. Регистрация в облачном провайдере
Цель: Получить аккаунт и пройти базовую настройку.
Шаги:
- Зарегистрируйся в Yandex Cloud: https://cloud.yandex.ru → «Подключиться»
- Активируй пробный период (потребуется привязка карты — деньги не списываются, пока ты не превысишь грант или не выйдешь из пробного периода)
- Создай свой первый каталог (folder) — это «папка» для всех ресурсов проекта
- Установи официальный CLI:
curl -sSL https://storage.yandexcloud.net/yandexcloud-yc/install.sh | bash - Авторизуйся:
yc init— следуй инструкциям, выбери каталог и зону по умолчанию - Проверь, что всё работает:
yc config list yc compute instance listСписок машин должен быть пустым.
Задание 2. Запуск первой виртуальной машины (IaaS)
Цель: Понять, как работает IaaS на практике, и поднять веб-сервер.
Шаги:
- Создай SSH-ключ, если ещё нет:
ssh-keygen -t ed25519 -C "your.email@example.com" # ключ появится в ~/.ssh/id_ed25519 (приватный) и ~/.ssh/id_ed25519.pub (публичный) - Создай ВМ через CLI:
yc compute instance create \ --name my-first-vm \ --zone ru-central1-a \ --network-interface subnet-name=default-ru-central1-a,nat-ip-version=ipv4 \ --create-boot-disk image-folder-id=standard-images,image-family=ubuntu-2404-lts,size=20 \ --memory 2 --cores 2 --core-fraction 20 \ --ssh-key ~/.ssh/id_ed25519.pubОбъяснение параметров:
--core-fraction 20— гарантированная доля CPU 20% (это самые дешёвые «прерываемые» по нагрузке машины)--memory 2 --cores 2— 2 ГБ RAM и 2 ядраnat-ip-version=ipv4— выдать публичный IPv4-адресimage-family=ubuntu-2404-lts— Ubuntu 24.04 LTS
-
Найди публичный IP в выводе предыдущей команды (поле
addressвone_to_one_nat). - Подключись по SSH:
ssh -i ~/.ssh/id_ed25519 yc-user@<публичный_IP> - Установи nginx внутри ВМ:
sudo apt update sudo apt install -y nginx sudo systemctl status nginx -
Открой 80-й порт через Security Group или (в Yandex Cloud по умолчанию) проверь, что 80 уже разрешён. Если нет — добавь правило.
-
Зайди на
http://<публичный_IP>через браузер — должна открыться приветственная страница nginx. - Не забудь удалить ВМ после практики, иначе деньги/грант будут расходоваться:
yc compute instance delete my-first-vm
Задание 3. Object Storage (S3-совместимое хранилище)
Цель: Загрузить файлы в S3, сделать корзину публичной для статики.
Шаги:
- Создай bucket (корзину):
yc storage bucket create \ --name my-test-bucket-<уникальный_суффикс> \ --public-readИмя bucket должно быть глобально уникальным в облаке.
- Установи
s3cmdилиaws-cliдля работы с S3-совместимым API:pip3 install awscli --break-system-packages - Настрой aws-cli на работу с Yandex Object Storage:
aws configure --profile yandex # Access Key ID: создаёшь в IAM Yandex Cloud # Secret Access Key: оттуда же # Region: ru-central1 # Output: json - Загрузи файл:
echo "<h1>Привет из облака!</h1>" > index.html aws --profile yandex --endpoint-url=https://storage.yandexcloud.net \ s3 cp index.html s3://my-test-bucket-<суффикс>/index.html - Открой файл в браузере:
https://my-test-bucket-<суффикс>.storage.yandexcloud.net/index.html - Удали bucket после практики:
aws --profile yandex --endpoint-url=https://storage.yandexcloud.net \ s3 rm s3://my-test-bucket-<суффикс>/index.html yc storage bucket delete --name my-test-bucket-<суффикс>
Задание 4. Managed PostgreSQL (PaaS)
Цель: Понять, насколько Managed-сервисы быстрее настраиваются.
Шаги:
- Создай Managed PostgreSQL-кластер минимальной конфигурации:
yc managed-postgresql cluster create \ --name my-pg \ --environment production \ --network-name default \ --resource-preset s3-c1-m4 \ --host zone-id=ru-central1-a,subnet-name=default-ru-central1-a,assign-public-ip=true \ --user name=admin,password=ChangeMe_StrongPass123! \ --database name=app,owner=admin \ --postgresql-version 16 - Подожди 5–10 минут, пока кластер развернётся:
yc managed-postgresql cluster get my-pg # Поле status: должно стать RUNNING - Получи строку подключения и подключись через
psql:yc managed-postgresql hosts list --cluster-name my-pg psql "host=<host_FQDN> port=6432 dbname=app user=admin sslmode=verify-full target_session_attrs=read-write" - Создай тестовую таблицу:
CREATE TABLE users (id SERIAL PRIMARY KEY, name TEXT, created_at TIMESTAMP DEFAULT NOW()); INSERT INTO users (name) VALUES ('Alice'), ('Bob'); SELECT * FROM users; -
Сравни: сколько времени у тебя ушло на разворачивание Managed PG vs. сколько ушло бы на ручную установку, тюнинг, настройку бэкапов, репликации на ВМ.
- Удали кластер:
yc managed-postgresql cluster delete my-pg
Задание 5. Сравнение: подними блог за полчаса
Цель: Прочувствовать разницу между моделями.
Подними простой блог (например, Ghost или WordPress) тремя способами:
-
IaaS: возьми ВМ → установи MySQL → установи WordPress → настрой nginx → настрой бэкапы → SSL через Let’s Encrypt. Замерь, сколько ушло времени.
-
PaaS: возьми Managed MySQL/PostgreSQL + Cloud Run / Yandex Serverless Containers / VK Cloud App Engine. Загрузи Docker-образ WordPress.
-
SaaS: просто зарегистрируйся на платформе, которая хостит блоги как сервис (например, Notion или Telegraph для совсем простых случаев). Сравни время до публикации первого поста.
Что ты должен понять: в каких случаях SaaS вообще не подходит (нужна кастомизация), в каких PaaS — оптимально, а в каких нужно идти в IaaS (нестандартные требования, экономия, vendor independence).
Финальное напоминание
🛑 Перед закрытием курса убедись, что все ресурсы удалены:
yc compute instance list # машин быть не должно
yc storage bucket list # корзин быть не должно
yc managed-postgresql cluster list # БД быть не должно
yc vpc address list # статичных IP быть не должно (они платные)
yc compute disk list # дисков быть не должно
Любой неудалённый ресурс продолжит списывать деньги. Это правило №1 любого облачного инженера: «удалил — проверь, что удалил».