Содержание курса
Elixir и BEAM: зачем это backend-разработчику
8 уроков
1.
Что мы строим: Klaxon
↗
2.
BEAM: процессы, планировщик, изоляция отказов
↗
3.
Установка инструментов и рабочее окружение
↗
4.
IEx как основной инструмент исследования
↗
5.
Mix: проект, задачи, зависимости
↗
6.
Первый HTTP-ответ без Phoenix: Plug и Bandit
↗
7.
Отказы и супервизия: обзор модели
↗
8.
Как устроен курс и сквозной проект
↗
Данные и сопоставление с образцом
10 уроков
1.
Иммутабельность и связывание значений
↗
2.
Базовые типы: числа, атомы, булевы значения, nil
↗
3.
Строки, бинарные данные и кодировки
↗
4.
Кортежи и списки
↗
5.
Maps и keyword lists
↗
6.
Сопоставление с образцом
↗
7.
Охранные выражения
↗
8.
case, cond, if и ранний выход
↗
9.
Функции: анонимные, захват, замыкания
↗
10.
Практика: парсер входящего сигнала
↗
Модули, функции и организация кода
9 уроков
1.
Модули, публичные и приватные функции
↗
2.
Множественные клаузы и рекурсия
↗
3.
Конвейер |> и стиль потоков данных
↗
4.
Enum: работа с коллекциями
↗
5.
Stream: ленивые вычисления
↗
6.
Comprehensions
↗
7.
Структуры и доменные типы
↗
8.
Атрибуты модуля, документация и doctests
↗
9.
Практика: нормализация и агрегация сигналов
↗
Полиморфизм, контракты и ошибки
9 уроков
1.
Протоколы
↗
2.
Поведения
↗
3.
Кортежи-результаты и договорённости об ошибках
↗
4.
with: композиция шагов
↗
5.
Исключения
↗
6.
exit, throw и сигналы процессов
↗
7.
Typespecs и Dialyzer
↗
8.
Постепенная типизация Elixir
↗
9.
Практика: доменные ошибки Klaxon
↗
Процессы: конкурентность на BEAM
9 уроков
1.
spawn, send, receive
↗
2.
Ссылки, мониторы и завершение
↗
3.
Task: параллельные вычисления
↗
4.
Agent и простое состояние
↗
5.
GenServer: серверный цикл
↗
6.
call, cast, info и таймауты
↗
7.
Состояние, завершение и утечки
↗
8.
Наблюдение за процессами
↗
9.
Практика: дедупликация сигналов в GenServer
↗
OTP: супервизоры и архитектура приложения
9 уроков
1.
Дерево супервизии
↗
2.
Перезапуски, интенсивность, child_spec
↗
3.
Application: точка входа системы
↗
4.
DynamicSupervisor
↗
5.
Registry и адресация процессов
↗
6.
Процесс на сущность
↗
7.
ETS: разделяемые таблицы
↗
8.
persistent_term, счётчики и атомарные операции
↗
9.
Практика: дерево процессов эскалации
↗
Проект, конфигурация и зависимости
8 уроков
1.
mix.exs: зависимости и версии
↗
2.
config.exs, runtime.exs и окружения
↗
3.
Секреты и переменные окружения
↗
4.
Границы приложений: контексты против umbrella
↗
5.
Формат, Credo и статический анализ
↗
6.
Выбор пакетов из Hex
↗
7.
Собственные mix-задачи
↗
8.
Практика: конфигурация Klaxon
↗
Plug: HTTP-слой BEAM
8 уроков
1.
Plug.Conn: анатомия запроса
↗
2.
Function plug и module plug
↗
3.
Plug.Router
↗
4.
Bandit и жизненный цикл соединения
↗
5.
Тело, заголовки, коды ответов
↗
6.
Ошибки в Plug
↗
7.
Собственные плаги: request_id и логирование
↗
8.
Практика: ingest-эндпоинт на чистом Plug
↗
Phoenix: каркас веб-приложения
10 уроков
1.
Структура Phoenix-приложения
↗
2.
Endpoint и конвейеры
↗
3.
Роутер: scope, pipeline, ресурсы
↗
4.
Контроллеры
↗
5.
JSON-ответы
↗
6.
Ошибки и FallbackController
↗
7.
Параметры запроса и их проверка
↗
8.
Заголовки безопасности, CORS и статика
↗
9.
Первые тесты веб-слоя
↗
10.
Практика: API-контур Klaxon
↗
Ecto: схемы, changesets, миграции
10 уроков
1.
Repo и пул соединений
↗
2.
Миграции
↗
3.
Schema
↗
4.
Changeset: cast и валидация
↗
5.
Ограничения БД и changeset-констрейнты
↗
6.
Встроенные схемы и параметры
↗
7.
Ассоциации
↗
8.
Пользовательские типы
↗
9.
Сиды и тестовые данные
↗
10.
Практика: схема данных Klaxon
↗
Ecto: запросы и транзакции
10 уроков
1.
Query DSL
↗
2.
Композиция запросов
↗
3.
Join, preload и N+1
↗
4.
Агрегации и группировки
↗
5.
fragment и специфика PostgreSQL
↗
6.
Транзакции и Ecto.Multi
↗
7.
Блокировки и конкурентные обновления
↗
8.
upsert и on_conflict
↗
9.
Пагинация
↗
10.
Практика: запросы дашборда
↗
Контексты: доменный слой
8 уроков
1.
Контекст как граница
↗
2.
Зависимости между контекстами
↗
3.
Команды и запросы
↗
4.
Доменные события
↗
5.
Валидация в домене и в БД
↗
6.
Ошибки контекста в HTTP
↗
7.
Тестирование контекста
↗
8.
Практика: контекст Incidents
↗
Аутентификация и авторизация
9 уроков
1.
phx.gen.auth: что генерируется
↗
2.
Сессии, cookie и живые сессии
↗
3.
Scopes в Phoenix 1.8
↗
4.
API-токены
↗
5.
Плаг аутентификации API
↗
6.
Авторизация: политики
↗
7.
Ограничение частоты запросов
↗
8.
Аудит действий
↗
9.
Практика: доступ к API Klaxon
↗
Дизайн HTTP API
8 уроков
1.
Контракт и версионирование
↗
2.
Идемпотентность
↗
3.
Формат ошибок
↗
4.
Списки: фильтры, сортировка, пагинация
↗
5.
OpenAPI-спецификация
↗
6.
Исходящие вызовы: Req
↗
7.
Подписи и повторные доставки вебхуков
↗
8.
Практика: публичный API v1
↗
Фоновые задачи и надёжность доставки
9 уроков
1.
Почему не Task.start
↗
2.
Oban: установка и модель
↗
3.
Worker, аргументы, результат
↗
4.
Ретраи и backoff
↗
5.
Уникальность и дедупликация задач
↗
6.
Очереди, приоритеты и ограничения
↗
7.
Периодические задачи
↗
8.
Transactional outbox
↗
9.
Практика: доставка оповещений
↗
Кэш, производительность и устойчивость
8 уроков
1.
Кэш на ETS
↗
2.
Ограничение частоты на счётчиках
↗
3.
Пулы и таймауты
↗
4.
Back-pressure и ограничение конкурентности
↗
5.
Circuit breaker
↗
6.
Профилирование и бенчмарки
↗
7.
Память, очереди сообщений и утечки
↗
8.
Практика: нагрузочная проверка ingest
↗
Real-time: PubSub, Channels, LiveView
9 уроков
1.
Phoenix.PubSub
↗
2.
Channels
↗
3.
Аутентификация сокета
↗
4.
Presence
↗
5.
LiveView: жизненный цикл
↗
6.
LiveView: события и streams
↗
7.
Компоненты и обновления из домена
↗
8.
Тестирование real-time
↗
9.
Практика: живой дашборд инцидентов
↗
Тестирование
9 уроков
1.
ExUnit
↗
2.
Ecto Sandbox и асинхронные тесты
↗
3.
Фикстуры и фабрики
↗
4.
Тесты HTTP API
↗
5.
Mox и границы подмены
↗
6.
Тестирование процессов и OTP
↗
7.
Property-based тесты
↗
8.
Покрытие, CI и качество
↗
9.
Практика: тестовый набор Klaxon
↗
Наблюдаемость, релизы и эксплуатация
12 уроков
1.
Logger и структурные логи
↗
2.
Telemetry: события и обработчики
↗
3.
Telemetry.Metrics и репортеры
↗
4.
Метрики в Prometheus
↗
5.
Трейсинг через OpenTelemetry
↗
6.
LiveDashboard и диагностика на живом узле
↗
7.
mix release
↗
8.
Docker-образ и миграции при деплое
↗
9.
Graceful shutdown и health checks
↗
10.
Кластеризация
↗
11.
Выкатка без простоя
↗
12.
Практика: запуск Klaxon в docker compose
↗