Дизайн систем 23/24 — различия между версиями

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск
(Лекции и семинары)
(Домашние задания)
Строка 68: Строка 68:
  
 
В форму нужно сдать ссылку на репозиторий, содержащий код, Dockerfile и docker-compose.yml для запуска сервиса и базы данных.
 
В форму нужно сдать ссылку на репозиторий, содержащий код, Dockerfile и docker-compose.yml для запуска сервиса и базы данных.
 +
 +
=== 3. Взаимодействие сервисов ===
 +
 +
'''Задание''': Разработать API для интернет-магазина. За основу взять нужно взять ДЗ-2, доработать сервис авторизации и сделать новые сервисы заказа и биллинга.
 +
 +
* Сервис авторизации должен проверять логин и пароль пользователя и выдавать ему токен для обращения к другим сервисам. Во всех дальнейших запросах токен должен передаваться в хедере 'Authorization: Bearer <token>'. Сервис должен удовлетворять базовым требованиям безопасности.
 +
 +
* В сервисе биллинга должна быть возможность положить деньги на аккаунт пользователя, проверить баланс и снять деньги.
 +
 +
* Сервис заказа должен позволять создать заказ, посмотреть предыдущие заказы. При заказе нужно снимать с пользователя деньги, при недостаточном балансе возвращать ошибку и сохранять неуспешный заказ.
 +
 +
Несмотря на то, что все это называется сервисами, вы можете сами выбирать, использовать микросервисную или монолитную архитектуру, одну БД или несколько и тд.
 +
 +
'''Оценивание'''
 +
 +
Оценивание состоит из двух частей
 +
* Теоретическая часть (5 баллов) – спроектировать взаимодействие сервисов, отобразить схему картинкой и текстовым описанием к ней.
 +
* Практическая часть (5 баллов) – реализовать спроектированный сервис.
 +
 +
Также нужно приложить bash/python скрипт, тестирующий ваш сервис по следующему сценарию:
 +
# Создать пользователя
 +
# Положить деньги на счет пользователя
 +
# Сделать заказ, на который хватает денег
 +
# Убедиться, что деньги сняли
 +
# Сделать заказ, на который не хватает денег
 +
# Проверить, что заказ сохранился как неуспешный
 +
# Проверить, что баланс не изменился
 +
 +
'''Примечания'''
 +
 +
Как и прошлое домашнее задание, это нужно сдать в виде github репозитория, картинки и описания нужно добавить туда же. Это может быть тот же репозиторий с отдельной веткой под ДЗ-3. Все приложение должно запускаться через docker-compose.
  
 
== Итоговая оценка за курс ==
 
== Итоговая оценка за курс ==

Версия 22:37, 20 ноября 2023

О курсе

Это страница курса "Дизайн систем" 2023-2024 года (1-2 модуль 4 курса ПМИ).

Занятия проходят по четвергам в 18:10 - 21:00 онлайн, объявления о любых изменениях будут в Telegram-канале.

Преподаватели: Стас Щетинников, Артем Кузнецов, Илья Жигалко, Егор Карпов

Полезные ссылки

Канал курса: https://t.me/+ZikB0F8elb1kOTE6

Чат курса: https://t.me/+0azNletbfBQ1NDRi

Все записи: https://disk.yandex.ru/d/jMjWZTmQP_-GoQ

Лекции и семинары

  • 07.09. Основы системного проектирования. [Презентация | Запись] Архитектура. Жизненный цикл архитектуры. Архитектурные драйверы и архитектурно значимые требования (ASR). Проектирование и оценка архитектуры. Waterfall.
  • 14.09. Docker [Презентация | Запись] Архитектурные паттерны. CI/CD. VM vs Containers. Конфигурирование приложения. Паттерны деплоя. Service discovery. Health check. Docker.
  • 21.09 Функциональная декомпозиция [Презентация | Запись] Модифицируемость и ее оценка. Louse coupling & high cohesion. Строительные блоки. DDD. Модель предметной области.
  • 29.09 Взаимодействие сервисов [Презентация | Лекция Семинар] Синхронное и асинхронное API. Паттерны. Оркестрация и хореография. Версионирование. IDL и API first дизайн. Rich vs Data Centric API. REST. gRPC.
  • 05.10 Событийная модель и кафка [Презентация | Запись] События. Паттерны проектирования событий. Event sourcing. Stream processing. RabbitMQ. Kafka.
  • 12.10 Хранилища, модели хранения данных [Презентация | Запись]
  • 19.10 Надежность и отказоустойчивость [Презентация | Запись] Терминология. Нагрузочное тестирование. Rate limiting и throttling. Retry, circuit breaker, load shedding. Надежность пишущей нагрузки. Надежность асинхронного взаимодействия.
  • 02.11 Безопасность [Презентация | Запись]
  • 09.11 Наблюдаемость и надежность [Запись] Kubernetes. Мониторинг. Алертинг. Service mesh.
  • 16.11 Аналитика ETL. MapReduce. Data Warehouse (DWH).

Домашние задания

1. Docker

Форма для сдачи: https://docs.google.com/forms/d/1c52c2IKsGEqNQb6NdBh07biV_rd3mHS2jcIHBdtbhgE

Дедлайн: 25 октября 23:59

Шаг 1. Создать веб сервис, который доступен в сети на порту 8000 и имеет один http-метод:

GET /health/

RESPONSE: {"status": "OK"}

Можно использовать любой язык программирования и любые фреймворки. Проще всего будет начать с Python и FastAPI, пример его использования был на семинаре по Docker.

Шаг 2. Cобрать локально образ приложения в докер контейнер под архитектуру AMD64.

Шаг 3. (8 баллов) Сохранить код сервиса и Dockerfile в приватный репозиторий на github и добавить в коллабораторы karpp.

Шаг 4. (2 балла) Запушить образ в dockerhub. (Документация)

Примечания

Обратите внимание, что при сборке на M1 при запуске вашего контейнера на стандартных платформах будет ошибка такого вида: standard_init_linux.go:228: exec user process caused: exec format error. Чтобы избежать этого для сборки нужно указать тип платформы linux/amd64: docker build --platform linux/amd64 -t tag. Более подробно можно прочитать в статье: https://programmerah.com/how-to-solve-docker-run-error-standard_init_linux-go219-exec-user-process-caused-exec-format-error-39221/.

2. CRUD

Форма для сдачи: https://docs.google.com/forms/d/1YGDpg-odldRJiqW6ZqBb5znJsAfHt2l-3TlQsINajaA

Дедлайн: 8 ноября 23:59

Задание: Сделать RESTful CRUD по созданию, удалению, просмотру и обновлению пользователей. Данные должны сохраняться в базе данных, которую вы можете выбрать на ваше усмотрение и запускать в docker-compose локально. Сервис должен предоставлять API аналогичное данному (такие же методы и такая же структура пользователя).

На данный момент не требуется делать какую-либо аутентификацию, это будет в следующем дз.

В форму нужно сдать ссылку на репозиторий, содержащий код, Dockerfile и docker-compose.yml для запуска сервиса и базы данных.

3. Взаимодействие сервисов

Задание: Разработать API для интернет-магазина. За основу взять нужно взять ДЗ-2, доработать сервис авторизации и сделать новые сервисы заказа и биллинга.

  • Сервис авторизации должен проверять логин и пароль пользователя и выдавать ему токен для обращения к другим сервисам. Во всех дальнейших запросах токен должен передаваться в хедере 'Authorization: Bearer <token>'. Сервис должен удовлетворять базовым требованиям безопасности.
  • В сервисе биллинга должна быть возможность положить деньги на аккаунт пользователя, проверить баланс и снять деньги.
  • Сервис заказа должен позволять создать заказ, посмотреть предыдущие заказы. При заказе нужно снимать с пользователя деньги, при недостаточном балансе возвращать ошибку и сохранять неуспешный заказ.

Несмотря на то, что все это называется сервисами, вы можете сами выбирать, использовать микросервисную или монолитную архитектуру, одну БД или несколько и тд.

Оценивание

Оценивание состоит из двух частей

  • Теоретическая часть (5 баллов) – спроектировать взаимодействие сервисов, отобразить схему картинкой и текстовым описанием к ней.
  • Практическая часть (5 баллов) – реализовать спроектированный сервис.

Также нужно приложить bash/python скрипт, тестирующий ваш сервис по следующему сценарию:

  1. Создать пользователя
  2. Положить деньги на счет пользователя
  3. Сделать заказ, на который хватает денег
  4. Убедиться, что деньги сняли
  5. Сделать заказ, на который не хватает денег
  6. Проверить, что заказ сохранился как неуспешный
  7. Проверить, что баланс не изменился

Примечания

Как и прошлое домашнее задание, это нужно сдать в виде github репозитория, картинки и описания нужно добавить туда же. Это может быть тот же репозиторий с отдельной веткой под ДЗ-3. Все приложение должно запускаться через docker-compose.

Итоговая оценка за курс

Итог = min(Округл(0.2 * ДЗ1 + 0.3 * ДЗ2 + 0.5 * ДЗ3 + 0.6 * ДЗ4 + 0.3 * ДЗ5 + 0.3 * Э), 10)

ДЗ –– оценки за домашние задания

Э –– устный экзамен

Округление арифметическое.