С ростом количества компьютеров они не только увеличились в числе, но и распределились. Если раньше бизнесы стремились покупать всё более мощные мейнфреймы, то сегодня даже небольшие приложения часто работают сразу на нескольких машинах.
Распределённые системы - это наука о том, как принимать решения, связанные с компромиссами при такой архитектуре.
Я хотел бы сказать, что этот курс даст вам суперсилу строить любые распределённые системы… но вы быстро поймёте, что всё не так просто :)
Более реалистично - моя цель: дать вам спокойствие, чтобы принять ограничения, которые невозможно обойти, смелость - менять то, что поддаётся изменениям, и мудрость - отличить одно от другого.
Немного о базовых знаниях
Распределённые системы - это пересечение операционных систем, сетей и баз данных.
Для большинства студентов логично оставлять эту тему на потом. В курсе я буду исходить из того, что вы знакомы с базовыми понятиями этих направлений.
Но! Если вам уже не терпится погрузиться в тему - не ждите. Вы всегда можете начать здесь, а затем при необходимости возвращаться к другим курсам, чтобы закрыть пробелы.
Структура курса
Курс построен по структуре отличного учебника Designing Data-Intensive Applications (мы будем называть его DDIA).
Хотя это не академический труд в классическом смысле, он прекрасно сочетает в себе как принципы, так и практику построения распределённых систем. Клеппманн привносит в эту тему столь нужный прагматизм, при этом не жертвуя теоретической глубиной Это - моя любимая книга по теме в целом.
Комментарий от Озa:
Сейчас я активно веду работу над курсом и провожу живые семинары, в которых разбираю основные концепции.
Записи выкладываются по мере проведения, участвовать в них могут все активные подписчики CS Primer. Даже если вы не попадаете на живые сессии - рекомендую следить за графиком и проходить курс синхронно.
Распределённые системы - тема более концептуальная, поэтому мы будем опираться на семинары, проектную часть (например, реализация распределённого key-value хранилища), а также решение задач по системному дизайну.