# 02 — Компоненты облачного приложения

← [Главная](../README.md)

## Цель раздела

Научиться **декомпозировать** облачное приложение на типовые **компоненты**: слои, API, базы данных, очереди и события — и понимать, за что каждый отвечает.

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

- Завершён [раздел 01 — Основы](../01-osnovy/README.md)

## Время

**12–18 часов** на весь раздел

---

## Страницы раздела

| № | Тема | Время | Ссылка |
|---|------|-------|--------|
| 1 | Слои приложения | 3–4 ч | [sloi-prilozheniya.md](sloi-prilozheniya.md) |
| 2 | API и шлюзы | 3–4 ч | [api-i-shlyuzy.md](api-i-shlyuzy.md) |
| 3 | Базы и хранилища | 3–4 ч | [bazy-i-hranilishcha.md](bazy-i-hranilishcha.md) |
| 4 | Очереди и события | 3–5 ч | [ocheredi-i-sobytiya.md](ocheredi-i-sobytiya.md) |

```mermaid
flowchart TB
  Client[Клиенты] --> GW[API Gateway]
  GW --> Svc[Сервисы / слои]
  Svc --> DB[(БД)]
  Svc --> Q[Очередь]
  Q --> Worker[Workers]
  Svc --> Store[Файловое хранилище]
```

---

## Контрольная точка КТ-1

После раздела нарисуйте **интернет-магазин** (или «Умный список») с подписями:

- минимум 4 типа компонентов из этого раздела;
- стрелки с протоколами: HTTPS, SQL, AMQP/или «очередь»;
- внешний SaaS (платёж или email).

Сверьтесь с [картой пути](../00-karta-puti/README.md#контрольные-точки-обязательные).

---

## Как читать раздел

1. **Слои** — ментальная модель «кто с кем говорит сверху вниз».  
2. **API** — контракт между мирами.  
3. **БД и хранилища** — где живут данные разного типа.  
4. **Очереди** — когда не хотим ждать в HTTP-запросе.

Не заучивайте названия продуктов (AWS, GCP) — заучивайте **роли**.

---

## Типичные ошибки

| Ошибка | Правильнее |
|--------|------------|
| «Одна PostgreSQL на всё» | Разделить по bounded context при росте |
| Бизнес-логика в клиенте | Валидация на клиенте + **авторитет** на сервере |
| Синхронный email в HTTP | Очередь + worker |
| Картинки в БД BLOB | Object storage + ссылка в БД |

---

## Самопроверка раздела

1. Назовите три слоя типичного backend.  
2. Зачем API Gateway, если есть один backend?  
3. Чем очередь отличается от вызова REST «в лоб»?

---

## Дальше

→ [Слои приложения](sloi-prilozheniya.md)
