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