Skip to content

igor-shevchenko/csu-distsys-2021

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 

Repository files navigation

Проектирование и разработка распределенных программных систем

Лекции и материалы по курсу распределенных систем в ЧелГУ, группа ПрИ-401.

Первый семестр

Лекции

Лекция 1. Введение в распределенные системы

Презентация

Зачем нужны распределенные системы, какие проблемы они решают и какие проблемы в них появляются.

Ссылки

  1. Мартин Клеппман. Высоконагруженные приложения. Программирование, масштабирование, поддержка
  2. Лекции Мартина Клеппмана по распределенным системам в Кембридже
  3. Distributed systems for fun and profit
  4. Страх и ненависть в распределённых системах

Лекция 2. Асинхронное программирование

Презентация

Ссылки

  1. Highload++ для начинающих
  2. Анатомия веб-сервиса
  3. Метафоры асинхронности в документации FastAPI
  4. Асинхронщина в JS

Лекция 3. Модели данных

Презентация

Реляционные, документоориентированные, графовые, key-value и колоночные БД.

Ссылки

  1. NoSQL – коротко о главном
  2. Мартин Клеппман. Высоконагруженные приложения. Программирование, масштабирование, поддержка. Глава 2

Лекция 4. Коммуникация приложений

Презентация

Ссылки

  1. Хоп Грегор, Вульф Бобби. Шаблоны интеграции корпоративных приложений
  2. Сэм Ньюмен. Создание микросервисов, глава 4

Лекция 5. Очереди сообщений

Презентация

Ссылки

  1. Принципы и приёмы обработки очередей
  2. 101 способ приготовления RabbitMQ и немного о pipeline архитектуре
  3. Очереди и блокировки. Теория и практика

Лекция 6. Горизонтальное масштабирование

Презентация

Ссылки

  1. Общая логика масштабирования
  2. Масштабирование бэкенда
  3. Горизонтальное масштабирование. Что, зачем, когда и как
  4. Как мы сделали ровную балансировку нагрузки на фронтенд-кластере

Лекция 7. Кэширование

Презентация

Ссылки

  1. Web, кэширование и memcached
  2. Кэширование данных в web приложениях. Использование memcached
  3. Использование memcached и Redis в высоконагруженных проектах

Лекция 8. Масштабирование БД

Презентация

Ссылки

  1. Мартин Клеппман. Высоконагруженные приложения. Программирование, масштабирование, поддержка. Главы 5, 6
  2. Шардинг: паттерны и антипаттерны

Практика

Практика 1. Контейнеризация и Docker

Презентация

Задание

  1. Написать веб-сервер, который принимает HTTP-запрос и отдает ответ «Hello world»
  2. Установить Docker
  3. Написать Dockerfile и запустить веб-сервер в докер-контейнере так, чтобы к нему можно было обратиться с хост-машины

Ссылки

  1. Установка Docker
  2. Документация по Docker
  3. Документация по Dockerfile
  4. Порядок команд в Dockerfile
  5. Multi-stage builds для компилируемых языков

Практика 2. Взаимодействие контейнеров

Презентация

Задание

  1. Дописать приложение, чтобы оно содержало два эндпоинта
  • POST /links — сохраняет ссылку в БД и возвращает ее id
  • GET /links/ — отдает ссылку из БД по id
  1. Добавить контейнер с PostgreSQL и настроить его взаимодействие с приложением
  2. Настроить запуск обоих контейнеров через Docker Compose

Ссылки

  1. Postgres по Docker Hub
  2. Сеть в Docker
  3. Volumes в Docker
  4. Docker Compose
  5. Документация по docker-compose.yml

Практика 3. Работа с RabbitMQ

Презентация

Задание

  1. Добавить контейнер с RabbitMQ
  2. В приложении добавить в модель ссылки поле «статус», добавить эндпоинт PUT /links/ для обновления статуса ссылки. При добавлении ссылки отправлять ее в очередь сообщений
  3. Добавить консьюмер, который слушает очередь сообщений и получает все новые ссылки, делает запрос к ним и сохраняет HTTP-статус ответа через новый эндпоинт приложения.

Ссылки

  1. RabbitMQ на Docker Hub
  2. Тьюториал по RabbitMQ
  3. Healthchecks в docker-compose

Практика 4. Балансировка нагрузки через nginx

Презентация

Задание

  1. Поднять два отдельных контейнера с API. Каждый из них должен добавлять в ответ собственную метку, чтобы было понятно, какой из контейнеров ответил (например, через HTTP-хедер)
  2. Поднять контейнер с nginx, который проксирует запросы на API-контейнеры и балансирует нагрузку между ними

Ссылки

  1. nginx на Docker Hub
  2. Документация по nginx
  3. Балансировка нагрузки в nginx

Практика 5. Кэширование в Redis

Презентация

Задание

  1. Добавить контейнер с Redis
  2. Добавить в коде консьюмера использование Redis в качестве кэша для ответов от внешних сервисов

Ссылки

  1. Redis на Docker Hub
  2. Документация по Redis (введение)

Вопросы к экзамену

  1. Распределенные системы: какие проблемы они решают и какие новые проблемы возникают в них
  2. Асинхронное программирование
  3. Модели данных: реляционная модель
  4. Модели данных: документная модель
  5. Модели данных: графовая модель
  6. Модели данных: колоночные БД
  7. Взаимодействие компонентов распределенной системы с помощью общей БД
  8. Взаимодействие компонентов распределенной системы с помощью удаленного вызова
  9. Взаимодействие компонентов распределенной системы с помощью обмена сообщениями
  10. Очереди сообщений: протокол AMQP
  11. Горизонтальное и вертикальное масштабирование
  12. Принципы разработки горизонтально масштабируемых бэкендов
  13. Балансировщики нагрузки
  14. Кэширование данных
  15. Индексы в БД
  16. Денормализация данных в БД
  17. Репликация данных в БД: для чего она нужна и как реализуется
  18. Репликация данных в БД: проблемы репликации и как они решаются
  19. Шардинг данных в БД

Второй семестр

Лекции

Лекция 9. Микросервисы

Презентация

Ссылки

  1. Сэм Ньюмен. Создание микросервисов
  2. Александр Бындю. От микросервисного монолита к оркестратору
  3. Паттерны с microservices.io: монолитная архитектура, микросервисная архитектура, API gateway, Client-side service discovery, Server-side service discovery

Лекция 10. DDD

Презентация

Ссылки

  1. Эрик Эванс. Предметно-ориентированное проектирование (DDD). Структуризация сложных программных систем
  2. Domain Driven Design Quickly — краткое содержание книги Эрика Эванса
  3. Harry Percival, Bob Gregory. Architecture Patterns with Python
  4. Лекция по DDD на ulearn.me

Лекция 11. Паттерны работы с БД

Презентация

Ссылки

  1. Джимми Богард про агрегаты
  2. Мартин Фаулер про CQS
  3. Грег Янг. CQRS Documents
  4. Уди Дахан. Clarified CQRS
  5. Александр Бындю. CQRS на практике

Лекция 12. Аутентификация и авторизация

Презентация

Ссылки

  1. Сэм Ньюмен. Создание микросервисов
  2. JSON Web Tokens

Лекция 13. Паттерны стабильности

Презентация

Ссылки

  1. Майкл Нейгард. Release it! Проектирование и дизайн ПО для тех, кому не всё равно
  2. SRE Book
  3. Graceful degradation. Доклад Яндекс.Такси

Лекция 14. Мониторинг

Презентация

Ссылки

  1. Сэм Ньюмен. Создание микросервисов
  2. SRE Book

Практика

Разработка интернет-магазина на микросервисах.

Практика 6. Админка для микросервисного интернет-магазина

Презентация

Практика 7. Каталог

Презентация

Практика 8. Аутентификация и авторизация

Презентация

Практика 9. Корзина

Презентация

Практика 10. Заказы

Презентация

Итоговая оценка

Баллы за практические задачи

Дата сдачи Админка Каталог Авторизация Корзина Заказы
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

About

Distributed systems class at Chelyabinsk State University, 2021–2022

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors