Лекции и материалы по курсу распределенных систем в ЧелГУ, группа ПрИ-401.
Зачем нужны распределенные системы, какие проблемы они решают и какие проблемы в них появляются.
Ссылки
- Мартин Клеппман. Высоконагруженные приложения. Программирование, масштабирование, поддержка
- Лекции Мартина Клеппмана по распределенным системам в Кембридже
- Distributed systems for fun and profit
- Страх и ненависть в распределённых системах
Ссылки
- Highload++ для начинающих
- Анатомия веб-сервиса
- Метафоры асинхронности в документации FastAPI
- Асинхронщина в JS
Реляционные, документоориентированные, графовые, key-value и колоночные БД.
Ссылки
- NoSQL – коротко о главном
- Мартин Клеппман. Высоконагруженные приложения. Программирование, масштабирование, поддержка. Глава 2
- CQRS documents
Ссылки
- Хоп Грегор, Вульф Бобби. Шаблоны интеграции корпоративных приложений
- Сэм Ньюмен. Создание микросервисов, глава 4
Ссылки
- Принципы и приёмы обработки очередей
- 101 способ приготовления RabbitMQ и немного о pipeline архитектуре
- Очереди и блокировки. Теория и практика
Ссылки
- Общая логика масштабирования
- Масштабирование бэкенда
- Горизонтальное масштабирование. Что, зачем, когда и как
- Как мы сделали ровную балансировку нагрузки на фронтенд-кластере
Ссылки
- Web, кэширование и memcached
- Кэширование данных в web приложениях. Использование memcached
- Использование memcached и Redis в высоконагруженных проектах
Ссылки
- Мартин Клеппман. Высоконагруженные приложения. Программирование, масштабирование, поддержка. Главы 5, 6
- Шардинг: паттерны и антипаттерны
Задание
Спроектировать архитектуру большой высоконагруженной системы.
Ссылки
- Awesome Software Architecture
- The C4 model for visualising software architecture
- The System Design Primer
Задание
- Написать веб-сервер, который принимает HTTP-запрос и отдает ответ «Hello world»
- Установить Docker
- Написать Dockerfile и запустить веб-сервер в докер-контейнере так, чтобы к нему можно было обратиться с хост-машины
Ссылки
- Установка Docker
- Документация по Docker
- Документация по Dockerfile
- Порядок команд в Dockerfile
- Multi-stage builds для компилируемых языков
Задание
- Дописать приложение, чтобы оно содержало два эндпоинта
- POST /links — сохраняет ссылку в БД и возвращает ее id
- GET /links/ — отдает ссылку из БД по id
- Добавить контейнер с PostgreSQL и настроить его взаимодействие с приложением
- Настроить запуск обоих контейнеров через Docker Compose
Ссылки
- 12-факторное приложение
- Postgres по Docker Hub
- Сеть в Docker
- Volumes в Docker
- Docker Compose
- Документация по docker-compose.yml
Задание
- Добавить контейнер с RabbitMQ
- В приложении добавить в модель ссылки поле «статус», добавить эндпоинт PUT /links/ для обновления статуса ссылки. При добавлении ссылки отправлять ее в очередь сообщений
- Добавить консьюмер, который слушает очередь сообщений и получает все новые ссылки, делает запрос к ним и сохраняет HTTP-статус ответа через новый эндпоинт приложения.
Ссылки
Задание
- Поднять два отдельных контейнера с API. Каждый из них должен добавлять в ответ собственную метку, чтобы было понятно, какой из контейнеров ответил (например, через HTTP-хедер)
- Поднять контейнер с nginx, который проксирует запросы на API-контейнеры и балансирует нагрузку между ними
Ссылки
Презентация
Задание
- Добавить контейнер с Redis
- Добавить в коде консьюмера использование Redis в качестве кэша для ответов от внешних сервисов
Ссылки
| Дата сдачи | Архитектура | Docker | БД | RabbitMQ | nginx | Redis |
|---|---|---|---|---|---|---|
| 5 октября | 20 | - | - | - | - | - |
| 11 октября | 20 | 20 | - | - | - | - |
| 18 октября | 20 | 20 | 20 | - | - | - |
| 25 октября | 20 | 20 | 20 | 20 | - | - |
| 1 ноября | 15 | 20 | 20 | 20 | 20 | - |
| 8 ноября | 15 | 20 | 20 | 20 | 20 | 20 |
| 14, 16 ноября | 15 | 20 | 20 | 20 | 20 | 20 |
| 22 ноября | 15 | 15 | 20 | 20 | 20 | 20 |
| 28, 30 ноября | 15 | 15 | 15 | 20 | 20 | 20 |
| 6 декабря | 10 | 10 | 15 | 15 | 20 | 20 |
| 12, 14 декабря | 10 | 10 | 10 | 15 | 15 | 20 |
| 20 декабря | 5 | 5 | 5 | 5 | 10 | 15 |
| 26, 28 декабря | 5 | 5 | 5 | 5 | 10 | 15 |
5 из 6 практик сданы: +100
| От | До | Оценка |
|---|---|---|
| 140 | 160 | 3 |
| 160 | 180 | 4 |
| 180 | 220 | 5 |




