• A
  • A
  • A
  • АБB
  • АБB
  • АБB
  • А
  • А
  • А
  • А
  • А
Обычная версия сайта
Бакалавриат 2021/2022

Дизайн систем

Лучший по критерию «Полезность курса для Вашей будущей карьеры»
Лучший по критерию «Полезность курса для расширения кругозора и разностороннего развития»
Направление: 01.03.02. Прикладная математика и информатика
Когда читается: 4-й курс, 1, 2 модуль
Формат изучения: без онлайн-курса
Охват аудитории: для своего кампуса
Преподаватели: Космачев Алексей Дмитриевич, Хотов Лев Константинович
Язык: русский
Кредиты: 5
Контактные часы: 60

Программа дисциплины

Аннотация

Для того, чтобы запустить успешный программный продукт в современном мире, уже недостаточно просто хорошей идеи, потому что ряд требований к программному обеспечению сильно вырос. Сервису необходимо уметь быстро обрабатывать миллионы запросов от пользователей со всего мира, быть устойчивым к различным отказам, хранить огромные массивы информации, быть гибким для внедрения новой функциональности и так далее. Для основных технических проблем, вроде хранения или передачи информации, скорее всего уже существуют готовые подходы. Однако знание конкретных инструментов для решения точечных задач - не гарантия того, что получится построить работающую систему, удовлетворяющую всем требованиям. При проектировании необходимо уметь грамотно комбинировать уже существующие подходы, а также уметь предложить свое решение, если задача окажется нестандартной. Курс предполагает, что студенты уже обрели базовые знания о разработке распределенных систем. Мы попытаемся применить большую часть этих знаний для проектирования прототипа реального сервиса. Поговорим про различные архитектурные подходы, про их плюсы, минусы и про компромисы, которые будут возникать в процессе. Затронем темы доступности, консистентности, пропускной способности, SLA. На практике попробуем разнообразные инструменты для реализации итогового решения, вроде Docker, Kafka, MongoDB, Postgres, etc и по итогу создадим конкретный сервис, который будет удовлетворять всем необходимым требованиям.
Цель освоения дисциплины

Цель освоения дисциплины

  • Производить полный цикл развертывания и дальнейшей поддержки распределенных систем
  • Придумывать схему сервиса для решения конкретной задачи за короткое время (например время проведения одного технического интервью)
Планируемые результаты обучения

Планируемые результаты обучения

  • Уметь работать с современными технологиями для построения сложных систем
  • Уметь работать с современными технологиями передачи сообщений
  • Уметь работать с современными технологиями хранения данных
Содержание учебной дисциплины

Содержание учебной дисциплины

  • Введение. Проблематика сложных систем сегодня.
  • Оркестрация контейнеров.
  • Общая схема масштабирования веб-сервиса.
  • Мониторинг системы.
  • Масштабирование баз данных.
  • Консистентность в распределенных системах. CAP.
  • Обработка в оффлайне.
  • Кеширование и балансировка нагрузки.
  • Вопросы безопасности.
  • Статический контент.
  • Контроль за исполнением внутри сложной системы.
  • Задачи на дизайн систем.
  • Разбор вопросов.
Элементы контроля

Элементы контроля

  • неблокирующий Домашнее задание 1
    MVP сервиса микроблогинга. Базовая реализация 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.