niklyadov / csu-distsys-2022

Distributed systems class at Chelyabinsk State University, 2022

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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

Лекции и материалы по курсу распределенных систем в ЧелГУ, группа ПрИ-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
  3. CQRS documents

Лекция 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. 12-факторное приложение
  2. Postgres по Docker Hub
  3. Сеть в Docker
  4. Volumes в Docker
  5. Docker Compose
  6. Документация по 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 (введение)

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

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

Дата сдачи Docker БД RabbitMQ nginx Redis
8 сентября - - - - -
15 сентября 20 - - - -
22 сентября 20 20 - - -
29 сентября 20 20 20 - -
6 октября 20 20 20 20 -
13 октября 20 20 20 20 20
20 октября 20 20 20 20 20
27 октября 15 20 20 20 20
3 ноября 15 15 20 20 20
10 ноября 10 15 15 20 20
17 ноября 10 10 15 15 20
24 ноября 5 10 15 15 15
1 декабря 5 10 15 15 15
8 декабря 5 10 10 15 15
15 декабря 5 5 10 15 15
22 декабря 5 5 5 10 15
29 декабря 5 5 5 10 15

Все практики сданы: +100

Перевод баллов в оценку

От До Оценка
140 160 3
165 180 4
185 200 5

Курсовые работы

Презентация

About

Distributed systems class at Chelyabinsk State University, 2022


Languages

Language:C# 93.8%Language:Dockerfile 6.2%