Развертывание приложения Spring AI в приложениях контейнеров Azure

Завершено

В этом уроке вы узнаете о развертывании Spring-приложения с дополнением результата извлечения (RAG) в приложениях Azure Container Apps. Приложения контейнеров Azure — это бессерверная платформа, которая позволяет поддерживать меньше инфраструктуры и экономить затраты при запуске контейнерных приложений. В этом уроке рассматриваются необходимые концепции контейнерных приложений, позволяющие контейнеризировать приложение, настроить приложения контейнеров Azure и обеспечить безопасное и масштабируемое развертывание.

Окружающая среда

Среда приложений-контейнеров — это безопасная граница вокруг одного или нескольких приложений контейнеров и заданий. Среда выполнения Container Apps управляет каждой средой, выполняя обновления ОС, операции масштабирования, процедуры аварийного переключения и балансировку ресурсов. Прежде чем развернуть приложение-контейнер, необходимо создать среду приложений контейнеров Azure.

Схема, на которой показана среда приложений контейнеров Azure.

Существует два типа сред приложения контейнера:

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

  • Только использование: запуск бессерверных приложений с поддержкой масштабирования до нуля и оплата только за ресурсы, используемые приложениями.

Копии

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

Изменения

Ревизии — это неизменяемые моментальные снимки конфигурации и кода контейнерного приложения в определенный момент времени. Каждое развертывание создает новую редакцию, что позволяет выполнить откат до предыдущих версий при необходимости. Редакции обеспечивают безопасные обновления и управление версиями для контейнерных приложений. Вы можете настроить разделение трафика между редакциями, чтобы постепенно развертывать новые функции или выполнять тестирование A/B.

Типы развертывания

Существует три основных типа развертывания для приложений контейнеров Azure:

  • Развертывание из существующего образа: можно развернуть приложение-контейнер, использующее существующий образ в общедоступном или частном реестре контейнеров.

  • Развертывание из исходного кода: вы можете развернуть приложение непосредственно из локального репозитория исходного кода. Команда az container up создает образ контейнера, отправляет его в реестр и развертывает приложение контейнера. Он также создает реестр в Azure Container Registry, если вы его не предоставите. Эта команда может создать образ с Dockerfile или без него. Если вы создаете без использования Dockerfile, поддерживаются следующие языки:

    • .СЕТЬ
    • Node.js
    • PHP
    • Питон
  • Развертывание из репозитория GitHub: при использовании az containerapp up команды для развертывания из репозитория GitHub создается рабочий процесс GitHub Actions, который создает образ контейнера, отправляет его в реестр и развертывает приложение контейнера. Для создания образа требуется Dockerfile .

Настройки входа

Приложения контейнеров Azure поддерживают следующие параметры входящего трафика для управления доступом к приложению:

  • Внешний входящий трафик: этот параметр предоставляет приложение-контейнер в Интернет, позволяя внешним клиентам получать к нему доступ. Пользовательские домены и SSL-сертификаты можно настроить для безопасного доступа.

  • Внутренний входящий трафик: этот параметр ограничивает доступ к виртуальной сети, что делает приложение-контейнер доступным только для других ресурсов в той же сети. Этот параметр полезен для внутренних служб, которые не нужно выносить в интернет.

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

Масштабирование

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

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

  • Автоматическое масштабирование. Приложения контейнеров Azure поддерживают автоматическое масштабирование на основе различных метрик. Вы можете настроить правила автомасштабирования для автоматического изменения количества реплик на основе использования процессора, использования памяти или пользовательских метрик, включая метрики виртуальной машины Java, с использованием автомасштабирования на основе событий Kubernetes (KEDA). Эта возможность гарантирует, что приложение может обрабатывать увеличенный трафик без вмешательства вручную.

  • Масштабирование до нуля: для бессерверных приложений вы можете настроить приложение-контейнер для масштабирования до нуля экземпляров, если нет трафика. Это помогает сокращать расходы, используя ресурсы только при необходимости.

Чтобы настроить масштабирование, можно использовать Azure CLI, портал Azure или шаблоны ARM. В следующем примере показано, как настроить автомасштабирование с помощью Azure CLI:

az containerapp update \
    --resource-group spring-ai-demo \
    --name spring-ai-app \
    --min-replicas 1 \
    --max-replicas 10 \
    --scale-rule-name http-rule \
    --scale-rule-type http \
    --scale-rule-http-concurrency 15

В этом примере приложение-контейнер настроено на масштабирование между 1 и 10 репликами на основе параллелизма HTTP. Параллелизм HTTP имеет значение 50, что означает, что каждая реплика обрабатывает до 50 одновременных HTTP-запросов перед созданием дополнительных экземпляров.

Сводка по единицам

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