# Модели облака: IaaS, PaaS, SaaS

← [Раздел](README.md) · [Главная](../README.md)

## Цель

Различать **три модели** предоставления облачных услуг — IaaS, PaaS, SaaS — и понимать, **кто за что отвечает**: вы, ваша команда или вендор.

## Предварительно

- [Что такое облачное приложение](chto-takoe-oblachnoe-prilozhenie.md)

## Время

**2–3 часа**

---

## Модель ответственности

Представьте **стек** от железа до пользовательского приложения. Чем выше уровень сервиса, тем **меньше** вы настраиваете снизу — и тем **меньше** гибкости в деталях инфраструктуры.

```mermaid
flowchart TB
  subgraph you [Вы управляете]
    App[Приложение и данные]
    Runtime[Рантайм / контейнеры]
    OS[Операционная система]
  end
  subgraph vendor [Провайдер управляет]
    Virtual[Виртуализация]
    HW[Серверы и сеть]
  end
  App --- Runtime --- OS --- Virtual --- HW
```

На практике границы размыты (managed Kubernetes — что-то между IaaS и PaaS), но три буквы — **общий язык** в индустрии.

---

## IaaS — Infrastructure as a Service

**Что получаете:** виртуальные машины, диски, сеть, иногда балансировщики и firewall как API.

**Вы делаете:** ставите ОС (или берёте образ), патчи, runtime, приложение, БД (или ставите свою на ВМ).

| Плюсы | Минусы |
|-------|--------|
| Максимальный контроль | Больше работы по безопасности и патчам |
| Можно перенести почти любой legacy | Нужны админы / DevOps |
| Предсказуемо для нестандартного ПО | Масштаб руками или своими скриптами |

**Примеры (категории, не реклама):** AWS EC2, Google Compute Engine, Azure Virtual Machines, аренда VPS у хостера.

**Для учебного кейса:** один VPS с Docker — условный IaaS + ваша упаковка.

---

## PaaS — Platform as a Service

**Что получаете:** платформу «задеплой код» — рантайм, часто встроенные БД, маршрутизацию, SSL.

**Вы делаете:** пишете приложение, задаёте переменные окружения, подключаете add-ons.

| Плюсы | Минусы |
|-------|--------|
| Быстрый старт | Ограничения платформы (версии, таймауты) |
| Меньше администрирования ОС | Vendor lock-in сильнее |
| Автомасштаб часто встроен | Дороже при больших объёмах на единицу |

**Примеры:** Heroku, Google App Engine, Azure App Service, Render, Fly.io (с оговорками).

**Для учебного кейса:** `git push` → платформа поднимает API без настройки nginx вручную.

---

## SaaS — Software as a Service

**Что получаете:** **готовое приложение** для бизнес-задачи.

**Вы делаете:** настраиваете учётные записи, интеграции, иногда API-ключи для связи с **вашим** приложением.

| Плюсы | Минусы |
|-------|--------|
| Нулевой деплой своего кода для этой функции | Данные у третьей стороны |
| Обновления и SLA на стороне вендора | Кастомизация ограничена |
| Быстро для CRM, почты, аналитики | Зависимость от тарифа и API |

**Примеры:** Gmail, Salesforce, Slack, Stripe (платежи как сервис), Auth0 (аутентификация).

**Для учебного кейса:** push-уведомления через Firebase Cloud Messaging — SaaS; ваш API только шлёт запрос в их API.

---

## Сводная таблица

| Уровень | Вы настраиваете | Провайдер | Типичный вопрос |
|---------|-----------------|-----------|-----------------|
| **IaaS** | ОС, middleware, app | Железо, гипервизор | «Какой размер ВМ?» |
| **PaaS** | Код, конфиг app | ОС, runtime, сеть | «Какой buildpack?» |
| **SaaS** | Пользователи, политики | Всё остальное | «Какой тариф?» |

---

## Managed-сервисы — четвёртая привычка

Часто говорят о **managed database** или **managed Kubernetes**: провайдер **хостит** компонент (PostgreSQL, K8s control plane), вы **не** патчите ОС под СУБД, но **настраиваете** схему, бэкапы, доступ.

| Сервис | Ближе к | Вы всё ещё |
|--------|---------|------------|
| RDS / Cloud SQL | PaaS для БД | Пишете SQL, миграции |
| S3 / Object Storage | PaaS для файлов | Управляете bucket policy |
| EKS / GKE | IaaS+PaaS гибрид | Деплоите манифесты |

---

## Как выбирать для нового продукта

```mermaid
flowchart TD
  Start[Новый продукт] --> Q1{Нужен полный контроль ОС?}
  Q1 -->|Да| IaaS[IaaS / свои ВМ]
  Q1 -->|Нет| Q2{Команда маленькая?}
  Q2 -->|Да| PaaS[PaaS или managed]
  Q2 -->|Нет| Q3{Стандартный стек в K8s?}
  Q3 -->|Да| K8s[Managed K8s]
  Q3 -->|Нет| PaaS
  Start --> SaaS[Внешняя функция] --> UseSaaS[Подключить SaaS API]
```

Правило для новичка: **свой код — PaaS или managed**; **не изобретать** почту и платежи — **SaaS**.

---

## Публичное, частное, гибридное облако

| Тип | Суть |
|-----|------|
| **Публичное** | AWS, GCP, Azure — ресурсы многих клиентов, изоляция логическая |
| **Частное** | Облако на своём железе (OpenStack, VMware) |
| **Гибридное** | Часть в DC, часть у публичного провайдера |

Архитектору важно: **одни и те же паттерны** (API, БД, LB), различается **кто крутит** железо.

---

## Практика

Классифицируйте (IaaS / PaaS / SaaS / managed):

1. Notion  
2. Виртуальная машина с Ubuntu в облаке  
3. Отправка email через SendGrid  
4. PostgreSQL «как сервис» без установки пакетов на ВМ  

---

## Самопроверка

1. Почему PaaS быстрее для MVP, чем голый IaaS?
2. Stripe — это IaaS, PaaS или SaaS? Аргументируйте.
3. Что вы **всё равно** отвечаете сами при SaaS (данные, compliance)?

---

## Дальше

→ [Жизненный цикл приложения](zhiznennyj-cikl.md)
