Облачная платформаEvolution

Использование Managed Kafka как брокер сообщений для микросервисной архитектуры


С помощью этого руководства вы сконфигурируете Managed Kafka как брокер сообщений для микросервисной архитектуры, связав сервисы создания заказа и оповещений с API, работающими на виртуальной машине Ubuntu 22.04. Вы будете работать с демо-проектом микросервисной архитектуры с открытым исходным кодом, написанный на Nest.JS.

Вы будете использовать следующие сервисы:

  • «Виртуальные машины» — сервис, в рамках которого предоставляется виртуальная машина.

  • Managed Kafka — сервис для развертывания и управления кластерами Apache Kafka®.

  • «Публичные IP» — сервис для организации доступа — для доступа к сервису через интернет.

  • VPC — изолированная виртуальная сеть для создания безопасной инфраструктуры.

  • Docker — система контейнеризации.

  • Docker Compose — инструмент для запуска и управления Docker-контейнерами.

Шаги:

Перед началом работы

  1. Если вы уже зарегистрированы, войдите под своей учетной записью.

1. Разверните необходимые ресурсы в облаке

  1. Создайте виртуальную сеть с названием microservices-VPC.

  2. Создайте подсеть со следующими параметрами:

    • Названиеmicroservices-subnet.

    • Адрес10.10.1.0/24.

    • VPCmicroservices-VPC.

    • DNS-серверы8.8.8.8.

  3. Создайте виртуальную машину со следующими параметрами:

    • Названиеmicroservices.

    • Образ — на вкладке Публичные выберите образ Ubuntu 22.04.

    • Метод аутентификацииSSH-ключ и пароль.

    • SSH-ключ — ваш SSH-ключ.

    • Пароль — ваш пароль.

    • Имя хостаmicroservices.

    • Подключить публичный IP — оставьте опцию включенной.

    • Тип IP-адресаПрямой.

    • Группы безопасностиSSH-access_ru.AZ-1.

    • Подсетьmicroservices-subnet.

    • Гарантированная доля vCPU10%.

    • vCPU2.

    • RAM4.

  4. Создайте кластер Managed Kafka со следующими параметрами:

    • Названиеmicroservices.

    • Версия Apache Kafka®3.9.0.

    • Брокеры1.

    • vCPU2.

    • RAM4.

    • Подсетьmicroservices-subnet.

  5. Убедитесь, что ресурсы созданы и отображаются в личном кабинете:

    1. На странице сервиса VPC:

      • отображается сеть microservices-VPC;

      • количество подсетей — 1;

      • подсеть microservices-subnet доступна.

    2. На странице сервиса «Виртуальные машины» отображается виртуальная машина microservices со статусом «Запущена».

    3. На странице сервиса Managed Kafka отображается кластер microservices со статусом «Доступен».

2. Настройте окружение на виртуальной машине

  1. Подключитесь к виртуальной машине microservices через серийную консоль.

  2. Обновите систему:

    sudo apt update && sudo apt upgrade -y
  3. Установите Docker и Docker Compose:

    # Add Docker's GPG key
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    # Add Docker repository
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    # Install Docker
    sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-compose
    # Add user to docker group
    sudo usermod -aG docker $USER
    newgrp docker
  4. Проверьте, что Docker установлен корректно:

    docker --version
    docker compose version

3. Разверните микросервисы в Docker Compose

  1. Создайте директорию service и перейдите в нее:

    mkdir service
    cd service
  2. Склонируйте репозиторий с микросервисной архитектурой:

    git clone https://github.com/cloud-ru/evo-managed-kafka-microservices.git
  3. Создайте файл .env с помощью команды:

    nano .env
  4. Скопируйте код в файл:

    API_PORT=3000
    NODE_ENV=production
    KAFKA_BROKERS=<kafka_broker_ip>
    KAFKA_CLIENT_ID_API=api-service
    KAFKA_CLIENT_ID_ORDERS=orders-service
    KAFKA_CLIENT_ID_NOTIFICATIONS=notifications-service
    KAFKA_TOPIC_ORDERS=orders-topic
    KAFKA_USERNAME=<kafka_writer_username>
    KAFKA_PASSWORD=<kafka_writer_password>
    KAFKA_SASL_MECHANISM=scram-sha-512
    KAFKA_SSL=false

    Где:

    • <kafka_broker_ip> — IP-адрес кластера Managed Kafka.

    • <kafka_writer_username> — логин пользователя с ролью Writer.

    • <kafka_writer_password> — пароль пользователя с ролью Writer.

    IP-адрес, логин и пароль можно найти на странице информации о кластере в блоке Данные для подключения.

  5. Запустите микросервисную архитектуру:

    docker-compose up -d

4. Протестируйте работу микросервисной архитектуры с Managed Kafka

  1. Запустите просмотр логов микросервисов:

    docker-compose logs -f
  2. Откройте новое окно терминала, не закрывая текущий терминал.

  3. Создайте заказ c помощью curl-запроса:

    curl -X POST http://localhost:3000/orders \
    -H "Content-Type: application/json" \
    -d '{
    "email": "customer@example.com",
    "goodId": "12345",
    "count": 5
    }'
  4. Переключитесь обратно на терминал 1 и проверьте, что сообщение успешно обработано сервисами notifications-service и orders-service — в логах выведено сообщение о получении данных:

    kafka-orders-service | Order received: {
    kafka-orders-service | "email": "customer@example.com",
    kafka-orders-service | "goodId": "prod-123",
    kafka-orders-service | "count": 5
    kafka-orders-service | }
    kafka-notifications-service | Message received: {
    kafka-notifications-service | "email": "customer@example.com",
    kafka-notifications-service | "goodId": "prod-123",
    kafka-notifications-service | "count": 5
    kafka-notifications-service | }

5. Удалите доступ по SSH для виртуальной машины

Для повышения безопасности удалите доступ по SSH для вашей виртуальной машины, так как он больше не требуется.

  1. В личном кабинете перейдите в сервис «Виртуальные машины» и выберите машину microservices, созданную на первом шаге.

  2. Перейдите в раздел Сетевые параметры.

  3. Нажмите Изменить группы безопасности для публичного IP-адреса.

  4. Удалите группу «SSH-access_ru».

  5. Нажмите Сохранить.

  6. Убедитесь, что доступа нет — попробуйте подключиться к виртуальной машине по SSH.

Результат

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