Интро
System design uses the concepts of computer networking, parallel computing, and distributed systems to craft systems that scale well and are performant. Distributed systems scale well by nature. However, distributed systems are inherently complex. The discipline of system design helps us tame this complexity and get the work done.
Проектирование систем использует концепции компьютерных сетей, параллельных вычислений и распределенных систем для создания систем, которые хорошо масштабируются и являются производительными. Распределенные системы хорошо масштабируются по своей природе. Однако распределенные системы по своей сути сложны. Дисциплина проектирования систем помогает нам укротить эту сложность и выполнить работу.

Reliable systems handle faults, failures, and errors.
Effective systems meet all user needs and business requirements.
Maintainable systems are flexible and easy to scale up or down. The ability to add new features also comes under the umbrella of maintainability.
Надежные системы обрабатывают неисправности, сбои и ошибки.
Эффективные системы отвечают всем потребностям пользователей и бизнес-требованиям.
Поддерживаемые системы гибки и легко масштабируются вверх или вниз. Возможность добавлять новые функции также относится к обслуживаемости.
System design using blocks
Есть 16 основных блоков из которых мы можем постро ить нашу систему.
Мы выделили часто используемые элементы дизайна, такие как балансировщики нагрузки, в качестве основных строительных блоков для высокоуровневого проектирования системы. Это служит двум целям.
Во-первых, это позволяет нам подробно обсудить все строительные блоки и обсудить их интересные мини-проблемы проектирования.
Во-вторых, когда мы беремся за проблему дизайна, мы можем сосредоточиться на аспектах, специфичных для проблемы, упомянуть строительный блок, который мы будем использовать, и как мы будем его использовать. Это помогает нам удалить дублирующие обсуждения часто встречающихся элементов дизайна.

Нужно уметь делать системный дизайн, а не просто так выучить как с каким то сервисами это сделали другие. Частые вопросы могут звучать так
- почему выбрал именно эту базу данных
- как это решение можно скейлить?
Итеративный процесс
Системы, в действительности, улучшаются с каждым повторением.
Мы часто начинаем с чего-то простого, но когда в одной или нескольких частях системы возникают узкие места, возникает необходимость в новом дизайне. В некоторых проблемах проектирования мы создаем один дизайн, определяем узкие места и улучшаем его. Работа в условиях ограничений по времени может не позволить итераций дизайна.
Тем не менее, мы все равно рекомендуем две итерации — первую, когда мы делаем все возможное, чтобы придумать дизайн (на что уходит около 80 процентов нашего времени), и вторую итерацию для улучшений. Другой вариант — менять вещи по мере того, как мы выясняем новые идеи. Неизбежно мы обнаруживаем новые детали, когда проводим больше времени, работая над проблемой.
Как выглядит структура курса?

Преимущества курса
