Оптимизируйте разработку микросервисов с помощью Dapr и Amazon EKS

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

Дапр, или Распределенный исполняемый модуль приложения, является рантаймом с открытым исходным кодом для построения микросервисов в облачных и периферийных средах. Он предоставляет платформенно-независимые строительные блоки, такие как обнаружение сервиса, управление состоянием, сообщения pub/sub и наблюдаемость из коробки. Дапр перешел на уровень зрелости CNCF (Фонд компьютерных технологий облачных вычислений) и в настоящее время используется многими предприятиями.

В сочетании с Amazon Elastic Kubernetes Service (Amazon EKS), управляемым сервисом Kubernetes от AWS, Дапр может ускорить принятие микросервисов и контейнеров, позволяя разработчикам сосредоточиться на написании бизнес-логики, не беспокоясь о инфраструктурных подключениях. Amazon EKS упрощает управление кластерами Kubernetes, обеспечивая легкую масштабируемость при изменении рабочей нагрузки.

В этом блог-посте мы рассмотрим, как Дапр упрощает разработку микросервисов на Amazon EKS. Мы начнем с рассмотрения двух ключевых строительных блоков:вызов сервисаиуправление состоянием.

Вызов службы

Бесперебойное и надежное взаимодействие между микросервисами крайне важно. Однако разработчики часто сталкиваются с сложными задачами, такими как обнаружение служб, стандартизация API, обеспечение безопасности каналов связи, обработка отказов вежливым образом и внедрение возможностей наблюдаемости.

С Dapr вызов службы эти проблемы остаются в прошлом. Ваши службы могут легко обмениваться информацией друг с другом, используя стандартные протоколы отрасли, такие как gRPC и HTTP/HTTPS. Вызов службы берет на себя весь тяжелый труд, от регистрации и обнаружения служб до повторных запросов, шифрования, контроля доступа и распределенного трассирования.

Управление состоянием

Строительный блок управления состоянием Daprупрощает способ, которым разработчики работают со состоянием в своих приложениях. Он предоставляет последовательный API для хранения и извлечения данных состояния, независимо от базового хранилища состояния (например, Redis, AWS DynamoDB, Azure Cosmos DB).

Эта абстракция позволяет разработчикам создавать приложения с состоянием, не беспокоясь о сложностях управления и масштабирования хранилищ состояния.

Предпосылки

Чтобы следовать этому посту, вам понадобится:

Архитектура приложения

На диаграмме ниже изображены два микросервиса: приложение на Python и приложение на Node.js. Приложение на Python генерирует данные заказа и вызывает конечную точку /neworder, предоставленную приложением на Node.js. Приложение на Node.js записывает поступающие данные заказа в хранилище состояний (в данном случае, в Amazon ElastiCache) и возвращает идентификатор заказа приложению на Python в качестве ответа.

Используя строительный блок вызова службы Dapr, приложение на Python может без проблем общаться с приложением на Node.js, не беспокоясь о обнаружении службы, стандартизации API, безопасности канала связи, обработке сбоев или наблюдаемости. Он реализует mTLS для обеспечения безопасной связи между службами.

Dapr обрабатывает эти поперечные заботы, позволяя разработчикам сосредоточиться на написании основной бизнес-логики.

Кроме того, строительный блок управления состоянием Dapr упрощает взаимодействие приложения Node.js с хранилищем состояния (Amazon ElastiCache). Dapr предоставляет согласованный API для сохранения и извлечения данных состояния, абстрагируя сложности управления и масштабирования базового хранилища состояния. Эта абстракция позволяет разработчикам создавать приложения с состоянием, не беспокоясь о тонкостях управления хранилищем состояния.

Кластер Amazon EKS содержит пространство имен под названием dapr-system, которое содержит компоненты плоскости управления Dapr. dapr-sidecar-injector автоматически внедряет среду выполнения Dapr в поды микросервисов, поддерживающих Dapr.

Шаги вызова службы

  1. Служба генерации заказов (приложение Python) вызывает метод приложения Node с именем /neworder. Этот запрос отправляется в локальный побочный процесс Dapr, который работает в том же поде, что и приложение Python. 
  2. Dapr определяет целевое приложение, используя поставщика DNS кластера Amazon EKS, и отправляет запрос в побочный процесс приложения Node. 
  3. Побочный процесс приложения Node затем отправляет запрос в микросервис приложения Node. 
  4. Приложение Node записывает полученный идентификатор заказа от приложения Python в Amazon ElasticCache. 
  5. Приложение Node отправляет ответ в свой локальный побочный процесс Dapr. 
  6. Побочный процесс приложения Node направляет ответ в побочный процесс приложения Python. 
  7. Побочный процесс приложения Python возвращает ответ приложению Python, которое инициировало запрос к методу приложения Node с именем /neworder

Шаги развертывания

Создание и подтверждение кластера EKS

Для настройки кластера Amazon EKS (Elastic Kubernetes Service) вам нужно выполнить несколько шагов. Вот краткий обзор процесса:

Предварительные требования

  • Установите и настройте AWS CLI
  • Установите eksctl, kubectl и AWS IAM Authenticator

1. Создайте кластер EKS. Используйте eksctl для создания базового кластера с помощью команды:

Shell

 

2. Настройте kubectl. Обновите свой kubeconfig, чтобы подключиться к новому кластеру:

Shell

 

3. Проверьте кластер. Проверьте, готовы ли ваши узлы:

Shell

 

Установка DAPR на ваш кластер EKS

1. Установите DAPR CLI:

Shell

 

2. Проверьте установку:

Shell

 

3. Установите DAPR и проверьте:

Shell

 

Компоненты Dapr statestore и pubsub создаются в пространстве имен по умолчанию. Вы можете проверить это, используя следующую команду:

Shell

 

Настройка Amazon ElastiCache как вашего хранилища состояния Dapr

Создайте Amazon ElastiCache для хранения состояния микросервиса. В этом примере мы используем ElastiCache без серверов, который быстро создает кэш, автоматически масштабируется для удовлетворения потребностей приложения в трафике без необходимости управления серверами.

Настройте группу безопасности ElastiCache для разрешения подключений из вашего кластера EKS. Для удобства оставьте его в той же VPC, что и ваш кластер EKS. Запомните кэш-точку, которая нам понадобится для последующих шагов.

Запуск примера приложения

1. Клонируйте репозиторий примера приложения Git:

Shell

 

2. Создайте файл redis-state.yaml и укажите конечную точку Amazon ElasticCache для redisHost:

YAML

 

Примените конфигурацию yaml для компонента хранилища состояния с использованием kubectl.

Shell

 

3. Разверните микросервисы с побочным контейнером. 

Для узла микросервиса перейдите в файл /quickstarts/tutorials/hello-kubernetes/deploy/node.yaml и обратите внимание на аннотации ниже. Это указывает контрольной плоскости Dapr внедрить побочный контейнер и также присвоить имя приложению Dapr.

YAML

 

Добавьте аннотацию service.beta.kubernetes.io/aws-load-balancer-scheme: “internet-facing” в node.yaml для создания AWS ELB.

YAML

 

Разверните узел приложения с помощью kubectl. Перейдите в каталог /quickstarts/tutorials/hello-kubernetes/deploy и выполните следующую команду.

Shell

 

Получите AWS NLB, который появляется под External IP, в выводе следующей команды. 

Shell

 

Перейдите в каталог /quickstarts/tutorials/hello-kubernetes, в котором находится файл sample.json, чтобы выполнить следующий шаг.

Shell

 

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

Plain Text

 

Вы увидите вывод в виде {“OrderId”:“42”}

Затем разверните второе микросервисное приложение Python, которое имеет бизнес-логику для генерации нового идентификатора заказа каждую секунду и вызова метода приложения Node /neworder.

Перейдите в каталог /quickstarts/tutorials/hello-kubernetes/deploy и выполните следующую команду.

Shell

 

4. Проверка и тестирование развертывания вашего приложения.

Теперь, когда у нас есть развернуты оба микросервиса. Приложение Python генерирует заказы и вызывает /neworder, как видно из журналов ниже.

Shell

 

SystemVerilog

 

Мы видим, что приложение Node получает запросы и пишет в хранилище состояний Amazon ElasticCache в нашем примере. 

Shell

 

SystemVerilog

 

Для подтверждения того, что данные сохранены в Amazon ElasticCache, мы получаем доступ к конечной точке /order ниже. Он возвращает последний идентификатор заказа, сгенерированный приложением Python.

Plain Text

 

Вы увидите вывод с последним заказом в виде {“OrderId”:“370”}

Очистка

Выполните следующую команду для удаления развертываний приложений Node и Python вместе с компонентом хранилища состояний. 

Перейдите в каталог /quickstarts/tutorials/hello-kubernetes/deploy, чтобы выполнить следующую команду.

YAML

 

Вы можете удалить свой кластер EKS, используя команду eksctl и удалить Amazon ElastiCache.

Перейдите в каталог, в котором находится файл cluster.yaml, использованный для создания кластера на первом шаге.

Shell

 

Заключение

Dapr и Amazon EKS образуют мощный союз для разработки микросервисов. Dapr упрощает поперечные задачи, в то время как EKS управляет инфраструктурой Kubernetes, позволяя разработчикам сосредоточиться на основной бизнес-логике и повысить производительность.

Это сочетание ускоряет создание масштабируемых, надежных и наблюдаемых приложений, значительно снижая операционные издержки. Это идеальное основание для вашего путешествия по микросервисам. Следите за предстоящими публикациями, где будут рассмотрены возможности Dapr и EKS в области распределенного трассирования и наблюдаемости, предлагающие более глубокие инсайты и bewt практики.

Source:
https://dzone.com/articles/streamline-microservices-development-with-dapr-amazon-eks