Skip to content

AntonyNET/csu-distributedsystems-2023

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 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
  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. Шардинг: паттерны и антипаттерны

Практика

Практика 0. Проектирование архитектуры системы

Задание
Спроектировать архитектуру большой высоконагруженной системы.

Ссылки

  1. Awesome Software Architecture
  2. The C4 model for visualising software architecture
  3. The System Design Primer

Практика 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
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

Таблица с баллами

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

Презентация

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors