# Архитектура облачных приложений

Добро пожаловать в учебный курс по **проектированию и описанию облачных приложений**. Курс объясняет, из чего состоит современное приложение в облаке, как компоненты взаимодействуют, какие решения принимают на этапе проектирования и с чего начать безопасность и масштабирование.

> **Как читать:** идите по разделам по порядку (`00` → `13`). Каждый раздел — папка с `README.md` (оглавление) и отдельными страницами. Время указано на чтение и базовую практику. Предполагается **нулевой** опыт в облачной архитектуре и DevOps.

---

## Карта обучения (14 этапов)

Общая оценка: **100–180 часов** (4–7 месяцев при 5–8 ч/нед). Темп зависит от вашего бэкграунда и глубины практики на учебных или рабочих проектах.

| Этап | Раздел | Фокус | Часы (ориентир) |
|------|--------|-------|-----------------|
| 0 | [00 — Карта пути](00-karta-puti/README.md) | План, навыки, контрольные точки | 3–6 |
| 1 | [01 — Основы](01-osnovy/README.md) | Что такое облако, модели, жизненный цикл | 8–12 |
| 2 | [02 — Компоненты](02-komponenty/README.md) | Слои, API, БД, очереди | 12–18 |
| 3 | [03 — Проектирование](03-proektirovanie/README.md) | Требования, NFR, C4, ADR | 15–22 |
| 4 | [04 — Взаимодействие](04-vzaimodeistvie/README.md) | Синхрон, асинхрон, события, контракты | 12–18 |
| 5 | [05 — Безопасность](05-bezopasnost/README.md) | Угрозы, IAM, секреты, сеть | 12–18 |
| 6 | [06 — Масштабирование](06-masshtabirovanie/README.md) | Вертикаль/горизонталь, stateless, кэш | 10–15 |
| 7 | [07 — Надёжность](07-nadezhnost/README.md) | Отказоустойчивость, DR, retry, circuit breaker | 6–10 |
| 8 | [08 — Observability](08-observability/README.md) | Логи, метрики, трейсы, алерты | 8–12 |
| 9 | [09 — Тестирование](09-testing/README.md) | Компоненты, архитектура, нагрузка | 8–12 |
| 10 | [10 — Деплой](10-deploy/README.md) | Docker, K8s, CI/CD, Terraform | 8–12 |
| 11 | [11 — Паттерны](11-patterns/README.md) | Монолит vs микросервисы, serverless | 5–7 |
| 12 | [12 — Практикум](12-praktikum/README.md) | Лабораторные: C4, NFR, Docker, review | 15–25 |
| 13 | [13 — Pro-уровень](13-pro-uroven/README.md) | Review, миграции, кейсы из практики | 8–12 |

```mermaid
flowchart LR
  A[00 План] --> B[01-02 Основы и компоненты]
  B --> C[03 Проектирование]
  C --> D[04 Взаимодействие]
  D --> E[05-06 Безопасность и масштаб]
  E --> F[07-10 Надёжность и деплой]
  F --> G[11-13 Паттерны и практика]
```

---

## Глоссарий (основные термины)

| Термин | Кратко |
|--------|--------|
| **Облако (cloud)** | Предоставление вычислительных ресурсов (серверы, сеть, хранилище) по сети по запросу |
| **IaaS** | Infrastructure as a Service — виртуальные машины, сеть, диски «как сервис» |
| **PaaS** | Platform as a Service — платформа для запуска приложений без управления ОС |
| **SaaS** | Software as a Service — готовое приложение для пользователя (почта, CRM) |
| **API** | Application Programming Interface — контракт взаимодействия между программами |
| **REST** | Стиль HTTP API: ресурсы, методы GET/POST/PUT/DELETE, коды ответа |
| **Микросервис** | Небольшой автономный сервис со своей зоной ответственности и данными |
| **Монолит** | Одно приложение со всей бизнес-логикой в одном процессе/репозитории |
| **Шлюз (API Gateway)** | Единая точка входа для клиентов: маршрутизация, auth, rate limit |
| **БД (database)** | Система хранения структурированных данных (PostgreSQL, MySQL и др.) |
| **Очередь (message queue)** | Буфер сообщений между сервисами для асинхронной обработки |
| **Event-driven** | Архитектура, где сервисы реагируют на события, а не только на прямые вызовы |
| **SLA** | Service Level Agreement — договорённость об уровне доступности/латентности |
| **NFR** | Non-Functional Requirements — требования к производительности, безопасности, масштабу |
| **IAM** | Identity and Access Management — кто есть кто и что ему разрешено |
| **K8s (Kubernetes)** | Оркестратор контейнеров: расписание, сеть, масштабирование подов |
| **Контейнер** | Изолированный процесс с образом приложения и зависимостями |
| **Load Balancer** | Распределение трафика между несколькими экземплярами сервиса |
| **Кэш (cache)** | Быстрое хранилище часто запрашиваемых данных (Redis, in-memory) |
| **Stateless** | Сервис не хранит сессию между запросами — любой экземпляр обработает запрос |
| **Stateful** | Сервис или хранилище помнит состояние (БД, сессии на диске) |
| **C4** | Модель описания архитектуры: Context, Container, Component, Code |
| **ADR** | Architecture Decision Record — запись принятого архитектурного решения и причин |
| **TLS/HTTPS** | Шифрование трафика между клиентом и сервером |
| **Секрет (secret)** | Пароль, ключ API, сертификат — не хранить в коде и в git |
| **Observability** | Способность понять внутреннее состояние системы по логам, метрикам, трейсам |
| **CI/CD** | Continuous Integration / Delivery — автоматическая сборка, тесты и выкладка |

---

## Для кого этот курс

| Аудитория | Что получите |
|-----------|--------------|
| Начинающий разработчик | Понимание «картины целиком» до углубления в код |
| Аналитик / PM | Язык для обсуждения с инженерами, чтение диаграмм |
| DevOps-новичок | Связь между приложением и инфраструктурой |
| Студент | База перед курсами по K8s, облакам (AWS/GCP/Azure) |

---

## Быстрый старт

1. Прочитайте [00 — Карта пути](00-karta-puti/README.md) и отметьте свои цели.
2. Пройдите [01 — Основы](01-osnovy/README.md) без пропусков.
3. Рисуйте схемы на бумаге или в draw.io параллельно с [03 — Проектирование](03-proektirovanie/README.md).
4. К разделам 07+ переходите, когда уверенно объясняете разницу sync/async и роль API Gateway (см. [07 — Надёжность](07-nadezhnost/README.md)).

---

## Публикация и инструменты

Локальная публикация в S3 и просмотр через s3-md-browser описаны в [SETUP.md](SETUP.md).

---

## Самопроверка (входной уровень)

Ответьте вслух или письменно:

1. Чем SaaS отличается от IaaS простыми словами?
2. Зачем клиенту мобильного приложения нужен API, а не прямой доступ к БД?
3. Что произойдёт, если единственный сервер упадёт ночью без резервирования?

Если на (3) ответ «пользователи не смогут пользоваться сервисом» — вы готовы к [разделу 00](00-karta-puti/README.md).

---

## Дальше

→ [00 — Карта пути](00-karta-puti/README.md)
