Б Бёрнс - Распределенные системы. Паттерны проектирования
- Название:Распределенные системы. Паттерны проектирования
- Автор:
- Жанр:
- Издательство:Питер
- Год:2019
- ISBN:978-5-4461-0950-0
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Б Бёрнс - Распределенные системы. Паттерны проектирования краткое содержание
Распределенные системы. Паттерны проектирования - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Чтобы понять, насколько важно уделять внимание API кон-тейнера, рассмотрим упомянутый ранее контейнер-прицеп для управления конфигурацией. Для него мог бы оказаться полез-ным параметр UPDATE_FREQUENCY , задающий частоту, с которой необходимо синхронизировать конфигурацию с файловой си-стемой. Очевидно, что если название параметра потом поменя-ется на, скажем, UPDATE_PERIOD , то это уже будет нарушением интерфейса контейнера и воспрепятствует его корректному применению другими пользователями.
Такой пример, конечно же, очевиден, но нарушить интерфейс контейнера можно гораздо менее явным образом. Допустим, параметр UPDATE_FREQUENCY изначально принимал число секунд.
Со временем, с учетом обратной связи от пользователей, раз-работчик решил, что длительные интервалы (минуты, часы) не-удобно указывать в секундах. Он модифицировал параметр так, Глава 2. Паттерн Sidecar 47
чтобы тот принимал строки (10 минут, 5 секунд и т. п.). Посколь-ку старые значения параметров не смогут быть обработаны но-вым контейнером, такое изменение API окажется критическим. Представьте, что разработчик предусмотрел этот вариант, но сделал так, чтобы значения без единиц измерения интерпрети-ровались как число миллисекунд. Такое изменение, хотя и не приводит к ошибкам, является недопустимым, поскольку при-водит к более частым проверкам конфигурации и, как следствие, большей нагрузке на сервер.
Надеюсь, вы осознали, что для обеспечения настоящей модуль-ности необходимо внимательно относиться к предоставляемому вашим контейнером программному интерфейсу. Критические изменения могут быть вызваны менее очевидными, нежели смена имени параметра, причинами.
Документирование контейнеров На данный момент вы уже умеете параметризовать свои контей-неры, чтобы они были модульными и их можно было повторно использовать. Вы уже знаете, насколько важно поддерживать стабильный программный интерфейс вашего контейнера, чтобы обеспечить его бесперебойную работу у конечных пользовате-лей. Но есть еще один шаг к построению модульных, повторно используемых контейнеров — предоставить пользователям ин-формацию, как их применять в принципе.
Как и в случае с программными библиотеками, ключ к созданию полезной вещи — объяснение, как ею пользоваться. Мало поль-зы в создании гибкого, надежного, модульного контейнера, если никто не может понять, как с ним работать. К сожалению, на сегодняшний день доступно не так много формальных инстру-ментов, позволяющих документировать образы контейнеров, но есть несколько полезных приемов, упрощающих работу. 48Часть I. Одноузловые паттерны проектирования
У каждого контейнера есть конфигурационный файл Dockerfile , на основе которого строится образ контейнера. Именно в нем в первую очередь стоит искать документацию к контейнеру. Некоторые части Dockerfile документируют работу контей-нера сами по себе. Одним из примеров может служить дирек-тива EXPOSE , в которой перечислены сетевые порты, открытые в контейнере. Указывать ее не обязательно, но это считается хорошим тоном. Неплохо также снабдить ее комментарием, поясняющим, какой конкретно сервис прослушивает данный порт. Например:
...
# Главный сервер принимает запросы на порт 8080 EXPOSE 8080
...
Если вы используете переменные среды для параметризации контейнера, то, чтобы установить их значения по умолчанию, можно указать директиву ENV с комментарием: ...
# Параметр PROXY_PORT обозначает порт, на который необходимо # перенаправлять запросы
ENV PROXY_PORT 8000
...
C помощью директивы LABEL к образу можно добавить метадан-ные — e-mail разработчика, адрес веб-страницы, версию образа и т. д.
...
LABEL "org.label-schema.vendor"="name@company.com" LABEL "org.label.url"="http://images.company.com/my-cool-image" LABEL "org.label-schema.version"="1.0.3"
Глава 2. Паттерн Sidecar 49
Имена меток метаданных позаимствованы из проекта Label Schema ( http://label-schema.org/rc1 ). Цель проекта — сформировать набор общеизвестных меток.
В случае общей таксономии меток образов разные инструмен-ты могут полагаться на одну и ту же метаинформацию с целью визуализации, мониторинга и корректного использования приложения. При использовании согласованных, общеупотре-
бительных терминов появляется возможность задействовать инструменты, разработанные сообществом, не меняя образа контейнера. Безусловно, можно добавлять и любые другие метки, уместные в контексте вашего образа. Резюме
В данной главе мы познакомились с паттерном Sidecar, который комбинирует несколько контейнеров на одном вычислительном узле. В рамках паттерна Sidecar контейнер-прицеп дополняет и расширяет контейнер приложения, тем самым добавляя ему функциональности. Sidecar можно использовать для модерни-зации унаследованных приложений, если внесение изменений в них обойдется слишком дорого. Кроме того, этот паттерн можно применять для создания модульных контейнеров-ути-лит, задающих стандартную реализацию часто используемых функциональных возможностей. Контейнеры-утилиты можно задействовать во множестве приложений, повышая согласо-ванность среды и снижая расходы на разработку последующих приложений.
Следующие главы познакомят вас с другими паттернами, де-монстрирующими иные области применения модульных, по-вторно используемых контейнеров.
3 Паттерн AmbassadorВ предыдущей главе мы рассмотрели паттерн Sidecar, в рамках которого контейнер-прицеп функционально дополняет суще-ствующий контейнер приложения. В этой главе мы познакомимся с паттерном Ambassador («посол»). Контейнер-посол выступает посредником во взаимодействии контейнера приложения с внеш-ним миром. Как и в случае с остальными одноузловыми паттерна-ми проектирования, два контейнера составляют симбиотический союз и исполняются совместно на одном компьютере. Схема данного паттерна изображена на рис. 3.1.

Рис. 3.1. Обобщенный паттерн Ambassador
Глава 3. Паттерн Ambassador 51
От паттерна Ambassador двойная польза. Во-первых, как и осталь-ные одноузловые паттерны, он позволяет создавать модульные, повторно используемые контейнеры. Разделение ответственно-сти между контейнерами упрощает их разработку и поддержку. Во-вторых, контейнер-посол можно использовать с различными контейнерами приложений. Такого рода повторное применение ускоряет разработку приложений, поскольку контейнеризо-ванный код можно задействовать в нескольких разных местах. Вдобавок повышаются качество и согласованность реализации, поскольку код собирается разово и затем используется во многих различных контекстах.
В оставшейся части данной главы мы рассмотрим несколько практических примеров реализации паттерна Ambassador. Использование паттерна Ambassador для шардирования сервиса В какой-то момент данных на уровне хранилища (storage layer) становится так много, что они перестают помещаться на одной машине. В таких ситуациях необходимо шардировать уровень хранилища.
Читать дальшеИнтервал:
Закладка: