Распределенные системы. Паттерны проектирования - [5]

Шрифт
Интервал

В зависимости от ваших целей и от того, какие системы вы со-бираетесь  разрабатывать,  имеет  смысл  сосредоточиться  либо  на паттернах обработки больших объемов данных, либо на пат-тернах проектирования постоянно работающих серверов (либо  и на тех и на других). Части II и III практически не зависят друг  от друга, и их можно читать в любом порядке. Если  вы  имеете  обширный  опыт  разработки  распределенных  систем, то, возможно, посчитаете некоторые паттерны из первых  глав избыточными (например, описанные в части II именование,  обнаружение, распределение нагрузки). Тогда можете их просто  пролистать,  чтобы  получить  общее  представление,  но  по  пути  не забудьте рассмотреть все иллюстрации! Условные обозначения

В данной книге приняты следующие условные обозначения. Курсив

Курсивом  выделяются  новые  термины,  слова,  на  которых  сделан акцент.

Рубленый шрифт

Применяется  для  отображения  URL,  адресов  электронной  почты. 

16 Предисловие

Моноширинный шрифт

Используется  для  текстов  программ,  а  также  внутри  ос-новного  текста  для  обозначения  элементов  программы:  имен  функций,  баз  данных,  типов  данных,  переменных  среды,  выражений  и  ключевых  слов.  Им  же  выделяются  имена и расширения файлов.

Онлайн-ресурсы

Хотя в этой книге описаны популярные паттерны проектирова-ния распределенных систем, ожидается, что читатели знакомы  с  контейнерами  и  системами  их  оркестровки.  Если  же  у  вас  недостаточно знаний об этих программных продуктах, рекомен-

дую воспользоваться следующими ресурсами: ‰ ‰> https://docker.io> ;

‰ ‰> https://kubernetes.io> ;

‰ ‰> https://dcos.io> .

Использование примеров кода Дополнительные материалы (примеры кода, упражнения и т. п.)  доступны для загрузки по следующему адресу:  https://github.com/ brendandburns/designing-distributed-systems .

Это издание призвано помочь вам в вашей работе. В общем слу-чае  вы  можете  использовать  поставляемые  с  книгой  примеры  кода в своих программах и документации. Нет необходимости  обращаться  к  нам  за  разрешением  на  использование  кода,  за  Предисловие 17

исключением тех случаев, когда копируются его существенные  фрагменты.  К  примеру,  если  вы  напишете  программу,  исполь-зующую  несколько  фрагментов  кода  из  данной  книги,  то  вам  не нужно получать разрешение. Продажа или распространение  компакт-диска с исходными текстами, однако, требуют разре-шения. Использование цитат и фрагментов кода из книги при  ответе на вопросы не требует получения разрешения. Включе-ние значительной части кода в документацию по вашему про-дукту требует разрешения.

Мы ценим, хотя и не требуем ссылки на первоисточник. Ссылка  обычно включает название книги, имя автора, название издате-ля и номер ISBN. Например: «Распределенные системы. Паттер-ны проектирования. Брендан Бёрнс (O’Reilly). Авторские права 

защищены, Брендан Бёрнс, 2018, ISBN 978-5-4461-0950-0». Если  вам  кажется,  что  вы  выходите  за  рамки  правомерного  использования примеров кода, связывайтесь с нами по адресу  [email protected] .

Благодарности

Я хотел бы поблагодарить свою жену Робин и своих детей за все  то, что они делали, чтобы я оставался здоровым и счастливым.  Большое спасибо тем людям на моем жизненном пути, которые  помогли  мне  освоить  все  то,  о  чем  написано  в  этой  книге!  От-дельное спасибо моим родителям за первый Macintosh SE/30. 1> Введение

В современном мире постоянно работающих приложений и про-граммных интерфейсов (API) к ним предъявляются такие тре-бования, которые пару десятилетий назад предъявлялись только  к  небольшому  количеству  наиболее  важных  систем.  Анало-гичным образом наличие возможности быстрого, «вирусного»  роста  популярности сервиса  означает,  что  любое  приложение  должно создаваться с расчетом на почти мгновенное масштаби-рование в ответ на увеличивающийся пользовательский спрос.  Эти  ограничения  и  требования  означают,  что  почти  каждое  разрабатываемое  приложение,  будь  то  мобильная  клиентская  программа  или  сервис  обработки  платежей,  должно  быть  рас-пределенной системой.

Но строить распределенные системы непросто. Как правило,  это единичные заказные системы. В этом смысле разработка  распределенных  систем  поразительно  похожа  на  разработку  программного  обеспечения  (ПО)  в  тот  период,  когда  еще  не  существовало современных объектно-ориентированных язы-ков программирования. К счастью, как и в случае с созданием  Глава 1. Введение 19

объектно-ориентированных языков, имел место технический  прогресс, существенно снизивший трудоемкость построения  распределенных  систем.  В  данном  случае  он  связан  с  расту-щей  популярностью  контейнеров  и  инструментов  оркестри-рования. 

Подобно  объектам  в  объектно-ориентированном программи-ровании, контейнеризованные строительные блоки — основа  разработки повторно используемых компонентов и паттернов  проектирования.  Они  существенно  упрощают  создание  на-

дежных распределенных систем и делают его более доступным  для начинающих разработчиков. Далее будет кратко описана  история  разработок,  приведших  к  современному  состоянию  отрасли.