Лекции и материалы по курсу распределенных систем в ЧелГУ, группа ПрИ-401.
Зачем нужны распределенные системы, какие проблемы они решают и какие проблемы в них появляются.
Ссылки
- Мартин Клеппман. Высоконагруженные приложения. Программирование, масштабирование, поддержка
- Лекции Мартина Клеппмана по распределенным системам в Кембридже
- Distributed systems for fun and profit
- Страх и ненависть в распределённых системах
Ссылки
- Highload++ для начинающих
- Анатомия веб-сервиса
- Метафоры асинхронности в документации FastAPI
- Асинхронщина в JS
Реляционные, документоориентированные, графовые, key-value и колоночные БД.
Ссылки
- NoSQL – коротко о главном
- Мартин Клеппман. Высоконагруженные приложения. Программирование, масштабирование, поддержка. Глава 2
Ссылки
- Хоп Грегор, Вульф Бобби. Шаблоны интеграции корпоративных приложений
- Сэм Ньюмен. Создание микросервисов, глава 4
Ссылки
- Принципы и приёмы обработки очередей
- 101 способ приготовления RabbitMQ и немного о pipeline архитектуре
- Очереди и блокировки. Теория и практика
Ссылки
- Общая логика масштабирования
- Масштабирование бэкенда
- Горизонтальное масштабирование. Что, зачем, когда и как
- Как мы сделали ровную балансировку нагрузки на фронтенд-кластере
Ссылки
- Web, кэширование и memcached
- Кэширование данных в web приложениях. Использование memcached
- Использование memcached и Redis в высоконагруженных проектах
Ссылки
- Мартин Клеппман. Высоконагруженные приложения. Программирование, масштабирование, поддержка. Главы 5, 6
- Шардинг: паттерны и антипаттерны
Задание
- Написать веб-сервер, который принимает HTTP-запрос и отдает ответ «Hello world»
- Установить Docker
- Написать Dockerfile и запустить веб-сервер в докер-контейнере так, чтобы к нему можно было обратиться с хост-машины
Ссылки
- Установка Docker
- Документация по Docker
- Документация по Dockerfile
- Порядок команд в Dockerfile
- Multi-stage builds для компилируемых языков
Задание
- Дописать приложение, чтобы оно содержало два эндпоинта
- 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
Разработка интернет-магазина на микросервисах.
| Дата сдачи | Админка | Каталог | Авторизация | Корзина | Заказы |
|---|---|---|---|---|---|
| 24 февраля | 20 | 20 | 20 | 20 | 20 |
| 3 марта | 20 | 20 | 20 | 20 | 20 |
| 10 марта | 15 | 20 | 20 | 20 | 20 |
| 17 марта | 15 | 20 | 20 | 20 | 20 |
| 24 марта | 10 | 15 | 20 | 20 | 20 |
| 31 марта | 10 | 15 | 20 | 20 | 20 |
| 7 апреля | 5 | 10 | 15 | 20 | 20 |
| 14 апреля | 5 | 10 | 15 | 20 | 20 |
| 21 апреля | 5 | 5 | 10 | 15 | 20 |
| 28 апреля | 5 | 5 | 10 | 15 | 20 |
| От | До | Оценка |
|---|---|---|
| 40 | 60 | 3 |
| 65 | 80 | 4 |
| 85 | 100 | 5 |









