рая работает на многих машинах и к которой получает доступ множество пользователей по всему миру. Несмотря на их повсе-местное распространение, проектирование и реализация таких систем — «черная магия», которой владеют лишь избранные. Но, как и все другие технологии, мир распределенных систем разви-вается, упорядочивается и абстрагируется. В этой книге я опи-сываю набор обобщенных повторяемых паттернов (шаблонов), 14 Предисловие
которые делают разработку надежных распределенных систем более доступной и эффективной. Внедрение паттернов проек-тирования и повторно используемых компонентов освобождает разработчиков от необходимости повторно реализовывать одни и те же системы. В сэкономленное время можно сосредоточить-ся на разработке ключевых частей приложения. Как ориентироваться в книге Книга разделена на четыре части следующим образом. > Глава 1. Введение. > Вводит понятие распределенной системы
и объясняет, каким образом паттерны проектирования и по-вторно используемые компоненты способствуют быстрой разработке надежных распределенных систем.
> Часть I. Одноузловые паттерны проектирования. > В гла-вах 2–4 обсуждаются повторно используемые паттерны и компоненты, имеющие место в рамках одного узла распре-деленной системы. В частности, рассматриваются паттерны Sidecar, Adapter и Ambassador.
> Часть II. Паттерны проектирования обслуживающих си-стем. В главах 8–9 рассматриваются многоузловые паттер-ны, применяемые в постоянно работающих обслуживающих системах, таких как веб-приложения. Обсуждаются паттерны репликации, масштабирования и выбора главного узла.
> Часть III. Паттерны проектирования систем пакетных вы-числений. В главах 10–12 рассматриваются паттерны распре-деленных систем для широкомасштабной обработки данных, в том числе очереди задач, событийно-ориентированная обработка и согласованные рабочие процессы.
Если вы опытный разработчик распределенных систем, мо-жете пропустить первые несколько глав. Тем не менее вам Предисловие 15
стоит хотя бы пролистать их, чтобы понять, как применять паттерны проектирования и почему считается, что сама идея паттернов проектирования распределенных систем настоль-ко важна.
Многие, вероятно, найдут полезными одноузловые паттерны, так как они являются наиболее универсальными и их проще всего использовать повторно.
В зависимости от ваших целей и от того, какие системы вы со-бираетесь разрабатывать, имеет смысл сосредоточиться либо на паттернах обработки больших объемов данных, либо на пат-тернах проектирования постоянно работающих серверов (либо и на тех и на других). Части II и III практически не зависят друг от друга, и их можно читать в любом порядке. Если вы имеете обширный опыт разработки распределенных систем, то, возможно, посчитаете некоторые паттерны из первых глав избыточными (например, описанные в части II именование, обнаружение, распределение нагрузки). Тогда можете их просто пролистать, чтобы получить общее представление, но по пути не забудьте рассмотреть все иллюстрации! Условные обозначения