Лекции и материалы по курсу распределенных систем в ЧелГУ, группа ПрИ-401.
Ссылки
- Мартин Клеппман. Высоконагруженные приложения. Программирование, масштабирование, поддержка
- Distributed systems for fun and profit
- Страх и ненависть в распределённых системах
Ссылки
Ссылки
- NoSQL – коротко о главном
- Мартин Клеппман. Высоконагруженные приложения. Программирование, масштабирование, поддержка. Глава 2
Ссылки
- Хоп Грегор, Вульф Бобби. Шаблоны интеграции корпоративных приложений
- Сэм Ньюмен. Создание микросервисов, глава 4
Ссылки
- Принципы и приёмы обработки очередей
- 101 способ приготовления RabbitMQ и немного о pipeline архитектуре
- Очереди и блокировки. Теория и практика
Ссылки
- Общая логика масштабирования
- Масштабирование бэкенда
- Горизонтальное масштабирование. Что, зачем, когда и как
- Как мы сделали ровную балансировку нагрузки на фронтенд-кластере
Ссылки
- Web, кэширование и memcached
- Кэширование данных в web приложениях. Использование memcached
- Использование memcached и Redis в высоконагруженных проектах
Ссылки
- Мартин Клеппман. Высоконагруженные приложения. Программирование, масштабирование, поддержка. Главы 5, 6
- Шардинг: паттерны и антипаттерны
Задание
- Написать веб-сервер, который принимает HTTP-запрос и отдает ответ «Hello world»
- Установить Docker
- Написать Dockerfile и запустить веб-сервер в докер-контейнере так, чтобы к нему можно было обратиться с хост-машины
Ссылки
Задание
- Дописать приложение, чтобы оно содержало два эндпоинта
- POST /links — сохраняет ссылку в БД и возвращает ее id
- GET /links/ — отдает ссылку из БД по id
- Добавить контейнер с PostgreSQL и настроить его взаимодействие с приложением
- Настроить запуск обоих контейнеров через Docker Compose
Ссылки
- Postgres по Docker Hub
- Сеть в Docker
- Volumes в Docker
- Docker Compose
- Документация по docker-compose.yml
Задание
- Добавить контейнер с RabbitMQ
- В приложении добавить в модель ссылки поле «статус», добавить эндпоинт PUT /links/ для обновления статуса ссылки. При добавлении ссылки отправлять ее в очередь сообщений
- Добавить консьюмер, который слушает очередь сообщений и получает все новые ссылки, делает запрос к ним и сохраняет HTTP-статус ответа через новый эндпоинт приложения.
Ссылки
Задание
- Поднять два отдельных контейнера с API. Каждый из них должен добавлять в ответ собственную метку, чтобы было понятно, какой из контейнеров ответил (например, через HTTP-хедер)
- Поднять контейнер с nginx, который проксирует запросы на API-контейнеры и балансирует нагрузку между ними
Ссылки
Задание
- Добавить контейнер с Redis
- Добавить в коде консьюмера использование Redis в качестве кэша для ответов от внешних сервисов
Ссылки
- Распределенные системы: какие проблемы они решают и какие новые проблемы возникают в них
- Асинхронное программирование
- Модели данных: реляционная модель
- Модели данных: документная модель
- Модели данных: графовая модель
- Модели данных: колоночные БД
- Взаимодействие компонентов распределенной системы с помощью общей БД
- Взаимодействие компонентов распределенной системы с помощью удаленного вызова
- Взаимодействие компонентов распределенной системы с помощью обмена сообщениями
- Очереди сообщений: протокол AMQP
- Горизонтальное и вертикальное масштабирование
- Принципы разработки горизонтально масштабируемых бэкендов
- Балансировщики нагрузки
- Кэширование данных
- Индексы в БД
- Денормализация данных в БД
- Репликация данных в БД: для чего она нужна и как реализуется
- Репликация данных в БД: проблемы репликации и как они решаются
- Шардинг данных в БД
Ссылки
- Сэм Ньюмен. Создание микросервисов
- Александр Бындю. От микросервисного монолита к оркестратору
- Паттерны с microservices.io: монолитная архитектура, микросервисная архитектура, API gateway, Client-side service discovery, Server-side service discovery
Литература
- Эрик Эванс. Предметно-ориентированное проектирование (DDD). Структуризация сложных программных систем
- Domain Driven Design Quickly — краткое содержание книги Эрика Эванса
- Harry Percival, Bob Gregory. Architecture Patterns with Python
- Лекция по DDD на ulearn.me
Литература
- Джимми Богард про агрегаты
- Мартин Фаулер про CQS
- Грег Янг. CQRS Documents
- Уди Дахан. Clarified CQRS
- Александр Бындю. CQRS на практике
Литература
- Сэм Ньюмен. Создание микросервисов
- JSON Web Tokens
Литература
- Майкл Нейгард. Release it! Проектирование и дизайн ПО для тех, кому не всё равно
- SRE Book
- Graceful degradation. Доклад Яндекс.Такси
Литература
- Сэм Ньюмен. Создание микросервисов
- SRE Book
Разработка интернет-магазина на микросервисах.
- Микросервисы и монолиты: для чего нужна микросервисная архитектура
- Микросервисы: как разбивать систему на микросервисы и как организовать их взаимодействие
- Моделирование преметной области по DDD
- Слоистая архитектура в DDD
- CQS и CQRS
- Event sourcing
- Аутентификация с помощью JWT-токенов
- Антипаттерны стабильности
- Паттерны стабильности
- Логирование
- Мониторинг
- Алертинг
Итоговая оценка складывается из двух частей: 50 баллов за практику (10 за каждое задание) и 50 баллов за экзамен. Баллы переводятся в оценку по следующей схеме:
- 0–54 баллов: 2
- 55–69 баллов: 3
- 70–84 баллов: 4
- 85+ баллов: 5