Распределенные системы. Паттерны проектирования - страница 14
Практикум. Развертывание контейнера topz Чтобы увидеть контейнер-прицеп в действии, сначала необ-ходимо создать еще один контейнер, который послужит кон-Глава 2. Паттерн Sidecar 41
тейнером приложения. Возьмите существующее приложение и разверните его с помощью Docker:
$ docker run -d <образ-приложения>
<хеш-сумма-контейнера>
После запуска данного образа вы получите идентификатор конкретного контейнера. Он будет выглядеть как-то так: cccf82b85000 . Если идентификатор контейнера вам неизве-стен, вы всегда можете его просмотреть с помощью команды docker ps , которая покажет все запущенные в данный момент контейнеры.
Допустим, вы поместили это значение в переменную среды APP_ID . Теперь можете запустить контейнер topz в том же пространстве идентификаторов процессов с помощью такой команды:
$ docker run --pid=container:${APP_ID} \
- p 8080:8080 \
brendanburns/topz:db0fa58
/server -addr 0.0.0.0:8080
Это запустит контейнер-прицеп topz в том же самом простран-стве идентификаторов процессов контейнера приложений. Заметьте, что вам, возможно, придется поменять порт, исполь-зуемый прицепом, если ваш контейнер с приложением так-же принимает входящие запросы на порт 8080. При запущен-ном контейнере-прицепе вы можете обратиться к адресу http:// localhost:8080/topz , чтобы получить полный срез информации о процессах, работающих внутри контейнера приложения и ис-пользуемых ими ресурсах.
Вы можете применять контейнеры-прицепы совместно с лю-быми другими контейнерами, чтобы без труда увидеть в веб-интерфейсе, как контейнер использует ресурсы хоста. 42 Часть I. Одноузловые паттерны проектирования
Создание простейшего PaaS-сервиса на основе паттерна Sidecar Паттерн Sidecar может использоваться не только для адапти-рования и мониторинга. Его также можно задействовать для реализации всей логики приложения с применением упро-щенного модульного подхода. Представьте себе, к примеру, простой PaaS-сервис, построенный вокруг рабочего процесса в Git-репозитории. Когда вы развернете этот сервис, вы смо-жете разворачивать код на рабочие серверы путем загрузки его в Git-репозиторий. Рассмотрим, как c помощью паттерна Sidecar можно простейшим образом реализовать такой PaaS. Как было сказано ранее, в паттерне Sidecar два контейнера — основной контейнер приложения и контейнер-прицеп. В про-стом PaaS-приложении основной контейнер представляет собой Node.js-сервер, реализующий веб-сервис. Node.js-сервер на-строен таким образом, что автоматически перезапускается при обновлении файлов. Это реализовано с помощью инструмента nodemon ( https://nodemon.io/ ).
Контейнер-прицеп использует общую с основным контейнером приложения файловую систему и выполняет простой цикл, синхронизирующий ее с Git-репозиторием: #!/bin/bash
while true; do
git pull
sleep 10
done
Безусловно, этот скрипт мог быть гораздо сложнее. Он намерен-но упрощен, чтобы его было проще читать. Node.js-приложение и прицеп с Git-синхронизатором, реализу-ющие наш простейший PaaS-сервис, развертываются и исполня-Глава 2. Паттерн Sidecar 43
ются совместно на одном узле (рис. 2.4). После развертывания прицеп будет автоматически обновлять файлы в контейнере приложения по мере их загрузки в Git-репозиторий.
Рис. 2.4. Простейший PaaS-сервис на базе паттерна Sidecar Разработка модульных и повторно используемых реализаций паттерна Sidecar
Во всех приведенных в данной главе примерах реализации паттерна Sidecar одной из важнейших целей было получение модульного, повторно используемого артефакта. Реализация паттерна Sidecar будет наиболее эффективной, если ее можно будет применять во множестве приложений и во множестве 44 Часть I. Одноузловые паттерны проектирования
сценариев развертывания. Обеспечивая модульность и воз-можность повторного использования, реализации этого пат-терна позволяют значительно ускорить разработку вашего приложения.