Бакалавриат
2021/2022
Дизайн систем
Лучший по критерию «Полезность курса для Вашей будущей карьеры»
Лучший по критерию «Полезность курса для расширения кругозора и разностороннего развития»
Статус:
Курс по выбору (Прикладная математика и информатика)
Направление:
01.03.02. Прикладная математика и информатика
Где читается:
Факультет компьютерных наук
Когда читается:
4-й курс, 1, 2 модуль
Формат изучения:
без онлайн-курса
Охват аудитории:
для своего кампуса
Преподаватели:
Космачев Алексей Дмитриевич,
Хотов Лев Константинович
Язык:
русский
Кредиты:
5
Контактные часы:
60
Программа дисциплины
Аннотация
Для того, чтобы запустить успешный программный продукт в современном мире, уже недостаточно просто хорошей идеи, потому что ряд требований к программному обеспечению сильно вырос. Сервису необходимо уметь быстро обрабатывать миллионы запросов от пользователей со всего мира, быть устойчивым к различным отказам, хранить огромные массивы информации, быть гибким для внедрения новой функциональности и так далее. Для основных технических проблем, вроде хранения или передачи информации, скорее всего уже существуют готовые подходы. Однако знание конкретных инструментов для решения точечных задач - не гарантия того, что получится построить работающую систему, удовлетворяющую всем требованиям. При проектировании необходимо уметь грамотно комбинировать уже существующие подходы, а также уметь предложить свое решение, если задача окажется нестандартной. Курс предполагает, что студенты уже обрели базовые знания о разработке распределенных систем. Мы попытаемся применить большую часть этих знаний для проектирования прототипа реального сервиса. Поговорим про различные архитектурные подходы, про их плюсы, минусы и про компромисы, которые будут возникать в процессе. Затронем темы доступности, консистентности, пропускной способности, SLA. На практике попробуем разнообразные инструменты для реализации итогового решения, вроде Docker, Kafka, MongoDB, Postgres, etc и по итогу создадим конкретный сервис, который будет удовлетворять всем необходимым требованиям.
Цель освоения дисциплины
- Производить полный цикл развертывания и дальнейшей поддержки распределенных систем
- Придумывать схему сервиса для решения конкретной задачи за короткое время (например время проведения одного технического интервью)
Планируемые результаты обучения
- Уметь работать с современными технологиями для построения сложных систем
- Уметь работать с современными технологиями передачи сообщений
- Уметь работать с современными технологиями хранения данных
Содержание учебной дисциплины
- Введение. Проблематика сложных систем сегодня.
- Оркестрация контейнеров.
- Общая схема масштабирования веб-сервиса.
- Мониторинг системы.
- Масштабирование баз данных.
- Консистентность в распределенных системах. CAP.
- Обработка в оффлайне.
- Кеширование и балансировка нагрузки.
- Вопросы безопасности.
- Статический контент.
- Контроль за исполнением внутри сложной системы.
- Задачи на дизайн систем.
- Разбор вопросов.
Элементы контроля
- Домашнее задание 1MVP сервиса микроблогинга. Базовая реализация API.
- Домашнее задание 2Оптимизация сервиса под read нагрузку.
- Домашнее задание 3Оптимизация сервиса под write нагрузку.
- Домашнее задание 4Добавляем новую функциональность - пользовательскую ленту.
- Дополнительные задания
- Задачи на дизайн
Промежуточная аттестация
- 2021/2022 учебный год 2 модульИтог = Округление{Мин[ ((ДЗ_1 + ДЗ_2 + ДЗ_3 + ДЗ_4) * (7/4)+ДопЗадания+СемЗадачи)/10, 10 ]}
Список литературы
Рекомендуемая основная литература
- Atchison, L. (2016). Architecting for Scale : High Availability for Your Growing Applications: Vol. First edition. O’Reilly Media.
- Kleppmann, M. (2017). Designing Data-Intensive Applications : The Big Ideas Behind Reliable, Scalable, and Maintainable Systems. Sebastopol, CA: O’Reilly Media. Retrieved from http://search.ebscohost.com/login.aspx?direct=true&site=eds-live&db=edsebk&AN=1487643
- Titus Winters, Tom Manshreck, & Hyrum Wright. (2020). Software Engineering at Google : Lessons Learned From Programming Over Time. O’Reilly Media.
Рекомендуемая дополнительная литература
- Bradshaw, S., Brazil, E., & Chodorow, K. (2019). MongoDB: The Definitive Guide : Powerful and Scalable Data Storage: Vol. Third edition. O’Reilly Media.
- Brazil, B. (2018). Prometheus: Up & Running : Infrastructure and Application Performance Monitoring: Vol. First edition. O’Reilly Media.
- Jon Bodner. (2021). Learning Go. O’Reilly Media.
- Josiah Carlson. (2013). Redis in Action. Manning Publications.
- Marko Luksa. (2017). Kubernetes in Action. Manning Publications.
- Narkhede, N., Shapira, G., & Palino, T. (2016). Kafka: The Definitive Guide : Real-Time Data and Stream Processing at Scale: Vol. First edition. O’Reilly Media.