www.machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Развертывание микросервисов с помощью Docker Compose

Дата публикации Oct 3, 2019

Микросервисы и монолиты: кредиты: Джон Олафенва

Введение в микросервисы

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

Микросервисы - полная противоположность этому. В этой новой парадигме каждое приложение разбивается на несколько небольших сервисов, каждый из которых часто запускается в отдельном контейнере. Вместо того, чтобы иметь несколько модулей и несколько классов, наше приложение становится набором из нескольких контейнеров, работающих в унисон. Чтобы понять это ясно. Давайте рассмотрим, что мы создаем корпоративное приложение с функциями управления учетными записями, управления сотрудниками и отслеживания активов. В базовой настройке микросервиса у нас может быть служба для внешнего интерфейса приложения, служба для управления учетными записями, служба для управления сотрудниками и другая для отслеживания активов. Это одно приложение, разделенное на 4 отдельных сервиса. Каждый из них размещается в своем собственном контейнере, написанном на своем собственном языке программирования по выбору и полностью независимым от способа создания других сервисов. Следовательно, отдельные группы могут работать с отдельными службами и повторно развертывать эти службы, не влияя на работу других групп.

Все сервисы используют функции друг друга через четко определенные API через REST или gRPC.

Фактически, хотя в последние несколько лет принято говорить о веб-сайте, подобном поиску Google, написанном на Python и C ++, сегодня это утверждение начинает утрачивать силу. Приложения больше не рассматриваются как база кода, написанная на определенном языке, а представляют собой набор независимых служб, каждый из которых написан на любом языке, подходящем для его разработчиков.


Создание микросервисного приложения

В этом уроке мы собираемся создать обзорный веб-сайт для «Avengers Endgame». Это приложение будет разделено на следующие службы.

  • Фронтенд Сервис
  • Бэкэнд Сервис
  • Служба баз данных PostreSQL
  • Администратор базы данных Администратор службы

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

Структура заявки на участие в эндшпиле: Кредиты: Джон Олафенва

Фронтенд Сервис

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

Полный код этого проекта доступен наhttps://github.com/johnolafenwa/DevPlanet

клонируйте репозиторий DevPlanet, и вы найдете папку веб-интерфейса в

devplanet / образцы / microservice

Здесь мы объясним два важных файла: app.py и Dockerfile для внешнего интерфейса.

app.py

Здесь, на целевой странице, обслуживаемойпоказательфункция. Мы получили сведения о отправке формы и пытаемся создать новую запись отзыва, отправив запрос на отправкуотзывы / добавитьконечная точка набэкендоказание услуг. Эта часть показана снова ниже.

res = requests.post("http://backend:5000/reviews/add",data={"name":name,"review":review})

Если код ответа 200 указывает на успех, мы перенаправляем пользователя в список отзывов.

Внутренний сервис будет развернут на порту 5000 в нашем микросервисе.

Отзывы отображаютсяотзывыфункция. Эта функция вызывает/ Рецензии / списокконечная точка набэкендСервис для получения списка всех ранее представленных отзывов.

res = requests.post(“http://backend:5000/reviews/list").json()

Dockerfile

FROM python:3.6-slimWORKDIR /appCOPY . /appRUN pip3 install -r requirements.txtEXPOSE 5000CMD [“python3”,”app.py”]

requirements.txt

flaskrequests

Теперь убедитесь, что вы находитесь вdevplanet / образцы / microservice / endgamefrontendпапка

Бег

sudo docker build -t endgamefrontend:v1 .

Это создаст изображение докера с тегомendgamefrontend: v1


Бэкэнд-сервис

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

Файлы для бэкэнд-сервиса находятся в папке endgamebackend

Основные файлы здесь: app.py, dockerfile и needs.txt

app.py

Как видно из приведенного выше кода, наш бэкэнд-сервис имеет две основные конечные точки:/ Рецензии / добавитьа также/ Рецензии / списоккаждый из них выполняет операции с базой данных и возвращает json-ответ вызывающей стороне (сервис веб-интерфейса)

Ключевая часть этого файла, которая нуждается в объяснении

DB_USER = os.environ[“DB_USER”]DB_PASSWORD = os.environ[“DB_PASS”]DB = os.environ[“DB”]DB_HOST = os.environ[“DB_HOST”]

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

Dockerfile

FROM python:3.6-slimWORKDIR /appCOPY . /appRUN pip3 install -r requirements.txtEXPOSE 5000CMD [“python3”,”app.py”]

requirements.txt

flaskpsycopg2-binary

Убедитесь, что вы находитесь вdevplanet / образцы / microservice / endgamebackendпапка

Бег

sudo docker build -t endgamebackend:v1 .

Это создаст изображение докера с тегомendgamebackend: v1

Это завершает сборку образов докера для нашего приложения. Образ базы данных SQL Postgre и образ администратора доступны на док-хабе, поэтому мы просто собираемся извлечь их прямо из хаба.


Развертывание приложения Microservice с Docker Compose

В предыдущих главах мы запускали наше приложение, используязапуск доко, Однако в этом случае нам нужно запустить несколько образов докера как одно развертывание. Следовательно, мы будем использовать инструмент оркестровки. Здесь приходит царство Docker Compose и Kubernetes. Здесь мы будем использовать docker compose, поскольку он достаточно прост и достаточен для запуска нашего приложения, хотя он и является мощным инструментом, он не сравним с широтой функциональности Kubernetes и вселенной инструментов, созданных для kubernetes. Следующая серия посвящена kubernetes.

Установить Docker Compose

Docker compose поставляется с предустановленным докером на Windows и Macos, однако, если вы работаете в Linux, пожалуйста, установите compose, как показано ниже.

sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Сделайте это исполняемым

sudo chmod +x /usr/local/bin/docker-compose

Создайте свой файл развертывания

Вы найдете файлdeploy.yamlвdevplanet / образцы / microserviceпапка

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

Разбивка файла развертывания

Каждый составной файл состоит из сервисов, каждый сервис запускает определенный образ докера.

БД СЕРВИС

децибелслужба запускаетPostgre SQLобраз.переменные среды;здесь используются для инициализации сервера базы данных.

POSTGRES_USER: johnPOSTGRES_PASSWORD: examplePOSTGRES_DB: endgame

Эти же учетные данные будут переданы в бэкэнд-сервис.

Громкость

- dbvolume:/var/lib/postgresql/data

Картыdbvolumeв каталог, гдеPostgreSQLхранит свои данные. Абсолютно необходимо сопоставить том с нашим экземпляром базы данных, иначе мы потеряем все данные в случае перезапуска.

АДМИНЕР СЕРВИС

Администратор является административным инструментом для широкого спектра баз данных. Мы можем использовать его так же, как PHPMyAdmin. Здесь мы выставили его на порт 9090, чтобы мы могли получить к нему доступ из браузера и управлять нашей базой данных.

BACKEND SERVICE

Наш бэкэнд-сервис запускаетendgamebackend: v1образ. Ключевыми моментами, на которые следует обратить внимание, являются переменные среды.

DB_USER: johnDB_PASS: exampleDB: endgameDB_HOST: db

Мы используем их для предоставления учетных данных для доступа к базе данных.

Наконец, естьсвязираздел. Мы используем это, чтобы разрешить бэкэнд-сервису доступ к сервису db.

- db

ФРОНТЕНД СЕРВИС

Это запускает изображениеendgamefrontend: v1

Поскольку доступ к нему получают пользователи из внешнего интерфейса, он открывается на порт 80. Кроме того, поскольку нам потребуется вызывать бэкэнд-сервис из внешнего интерфейса, мы добавили ссылку на внутренний интерфейс.

ОБЪЕМЫ

Последняя часть в нашем файле compose - это раздел, в котором мы явно определили объемdbvolume, Любые тома, которые вы используете в compose, должны быть определены здесь.

Обратите внимание, что только две услуги;внешний интерфейса такжебэкендбыли выставлены публично с использованием сопоставлений портов.бэкенда такжеpostreуслуги доступны только внутри.


ЗАПУСК РАЗВЕРТЫВАНИЯ

Убедитесь, что вы находитесь в каталогеdevplanet / образцы / microserviceпапки.

Теперь беги

sudo docker-compose -f deploy.yaml up

Это раскручивает несколько контейнеров, запуская все ваши сервисы.

Подождите около 30 секунд для инициализации и посещения всех служб.локальный

Чтобы управлять базой данных, посетите администратор налокальный: 9090

Появится интерфейс ниже

Когда администратор подходит, MySQL выбран по умолчанию, не забудьте выбрать Postgre SQL из списка

Остановка вашего развертывания

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

sudo docker-compose -f deploy.yaml down

РЕЗЮМЕ

До сих пор мы создали микросервисное приложение и успешно развернули его вместе с Postgre SQL с помощью docker compose.

Docker compose предлагает гораздо больше возможностей для масштабирования и управления нашими развертываниями. Мы рассмотрим еще несколько из них в следующем уроке.

В то время как compose может использоваться для организации контейнеров на кластерах серверов. Мы ограничим использование compose одним узлом. Цель этой серии - предложить базовые знания по созданию контейнеров и микросервисов.

Дальнейшее масштабирование по серверам будет рассмотрено в следующих сериях о kubernetes. Оставайтесь с нами на DevPlanet.

По любым вопросам или советам, вы можете связаться со мной в твиттере@johnolafenwa

Эл. адрес:[email protected]

Оригинальная статья

Footer decor

© www.machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map