Поделиться через


Краткое руководство. Развертывание первого приложения образов Java Native Image в Azure Spring Apps

Примечание.

Планы "Базовый", "Стандартный" и "Корпоративный" будут устарели начиная с середины марта 2025 г. с 3-летнего периода выхода на пенсию. Рекомендуется перейти в приложения контейнеров Azure. Дополнительные сведения см. в объявлении о выходе на пенсию в Azure Spring Apps.

Стандартный план потребления и выделенного плана будет устарел с 30 сентября 2024 г. с полным завершением работы после шести месяцев. Рекомендуется перейти в приложения контейнеров Azure. Дополнительные сведения см. в статье "Миграция потребления Azure Spring Apps Standard" и выделенного плана в приложения контейнеров Azure.

Эта статья относится к: ❎ Basic/Standard ✅ Enterprise

В этом кратком руководстве показано, как развернуть приложение Spring Boot в Azure Spring Apps в качестве собственного образа.

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

Пример проекта — это приложение Spring Petclinic. На следующем снимку экрана показано приложение:

Снимок экрана: приложение Spring Petclinic в Azure Spring Apps.

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

2. Подготовка проекта Spring Petclinic

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

  1. Используйте следующую команду, чтобы клонировать проект Spring Petclinic из GitHub:

    git clone https://github.com/Azure-Samples/spring-petclinic.git
    
  2. Чтобы создать проект Spring Petclinic, выполните следующую команду:

    cd spring-petclinic
    ./mvnw clean package -DskipTests -Pnative package
    
  3. Используйте следующую команду, чтобы запустить приложение Spring Petclinic с помощью Maven:

    java -jar target/spring-petclinic-3.1.0-SNAPSHOT.jar
    
  4. http://localhost:8080 Перейдите в браузер, чтобы получить доступ к приложению Spring Petclinic.

3. Подготовка облачной среды

Основной ресурс, необходимый для запуска приложения Spring Petclinic, является экземпляром Azure Spring Apps. В этом разделе приведены действия по созданию ресурса.

3.1. Укажите имена для каждого ресурса

Создайте переменные для хранения имен ресурсов с помощью следующих команд. Обязательно замените заполнители своими значениями.

export RESOURCE_GROUP=<resource-group-name>
export LOCATION=<location>
export AZURE_SPRING_APPS_NAME=<Azure-Spring-Apps-service-instance-name>
export NATIVE_BUILDER=native-builder
export JAR_APP_NAME=jar-app
export NATIVE_APP_NAME=native-app
export JAR_PATH=target/spring-petclinic-3.1.0-SNAPSHOT.jar

3.2. Создание группы ресурсов

Чтобы создать новую группу ресурсов, выполните следующие действия.

  1. Используйте следующую команду, чтобы войти в Azure CLI:

    az login
    
  2. Чтобы задать расположение по умолчанию, используйте следующую команду:

    az configure --defaults location=${LOCATION}
    
  3. Используйте следующую команду, чтобы получить список всех доступных подписок, чтобы определить идентификатор подписки для использования:

    az account list --output table
    
  4. Чтобы задать подписку по умолчанию, используйте следующую команду:

    az account set --subscription <subscription-ID>
    
  5. Выполните следующую команду, чтобы создать группу ресурсов.

    az group create --resource-group ${RESOURCE_GROUP}
    
  6. Используйте следующую команду, чтобы задать только что созданную группу ресурсов в качестве группы ресурсов по умолчанию:

    az configure --defaults group=${RESOURCE_GROUP}
    

3.3. Создание экземпляра Azure Spring Apps

Azure Spring Apps используется для размещения приложения Spring Petclinic. Чтобы создать экземпляр Azure Spring Apps и два приложения внутри него, выполните следующие действия.

  1. Используйте следующую команду, чтобы создать экземпляр службы Azure Spring Apps. Для сборки собственного образа требуется 16 Гим памяти во время сборки образа, поэтому настройте размер пула сборок как S7.

    az spring create \
        --name ${AZURE_SPRING_APPS_NAME} \
        --sku enterprise \
        --build-pool-size S7
    
  2. Создайте файл builder-native.json в текущем каталоге и добавьте следующее содержимое:

    {
       "stack": {
         "id": "io.buildpacks.stacks.jammy",
         "version": "tiny"
       },
       "buildpackGroups": [
         {
           "name": "default",
           "buildpacks": [
             {
               "id": "tanzu-buildpacks/java-native-image"
             }
           ]
         }
       ]
     }  
    
  3. Используйте следующую команду, чтобы создать пользовательское построитель для создания приложения Native Image:

    az spring build-service builder create \
        --service ${AZURE_SPRING_APPS_NAME} \
        --name ${NATIVE_BUILDER} \
        --builder-file builder-native.json
    
  4. Используйте следующую команду, чтобы создать приложение в экземпляре Azure Spring Apps, в котором развертывается приложение Spring Petclinic в виде JAR-файла. Настройте ограничение памяти до 1 Ги.

    az spring app create \
        --service ${AZURE_SPRING_APPS_NAME} \
        --name ${JAR_APP_NAME} \
        --cpu 1 \
        --memory 1Gi \
        --assign-endpoint true
    
  5. Используйте следующую команду, чтобы создать приложение в экземпляре Azure Spring Apps, в котором развертывается приложение Spring Petclinic в качестве собственного образа:

    az spring app create \
        --service ${AZURE_SPRING_APPS_NAME} \
        --name ${NATIVE_APP_NAME} \
        --cpu 1 \
        --memory 1Gi \
        --assign-endpoint true
    

4. Развертывание приложения в Azure Spring Apps

Теперь, когда облачная среда подготовлена, приложения готовы к развертыванию.

Используйте следующую команду, чтобы развернуть приложение Spring Petclinic в виде JAR-файла:

az spring app deploy \
    --service ${AZURE_SPRING_APPS_NAME} \
    --name ${JAR_APP_NAME} \
    --artifact-path ${JAR_PATH} \
    --build-env BP_JVM_VERSION=17

Используйте следующую команду, чтобы развернуть приложение Spring Petclinic в качестве собственного образа:

az spring app deploy \
    --service ${AZURE_SPRING_APPS_NAME} \
    --name ${NATIVE_APP_NAME} \
    --builder ${NATIVE_BUILDER} \
    --build-cpu 8 \
    --build-memory 16Gi \
    --artifact-path ${JAR_PATH} \
    --build-env BP_JVM_VERSION=17 BP_NATIVE_IMAGE=true

5. Проверка собственного приложения образа

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

  1. После завершения развертывания можно выполнить следующую команду, чтобы получить URL-адрес приложения:

    az spring app show \
        --service ${AZURE_SPRING_APPS_NAME} \
        --name ${NATIVE_APP_NAME} \
        --output table
    

    Вы можете получить доступ к приложению с URL-адресом, отображаемым в выходных данных как Public Url. Страница должна отображаться, как она отображается в локальном узле.

  2. Используйте следующую команду, чтобы проверить журнал приложения, чтобы изучить любую проблему развертывания:

    az spring app logs \
        --service ${AZURE_SPRING_APPS_NAME} \
        --name ${NATIVE_APP_NAME}
    

6. Сравнение производительности для JAR-файла и собственного образа

В следующих разделах описывается сравнение производительности между развертыванием JAR и Native Image.

Время запуска сервера

Используйте следующую команду, чтобы проверить журнал Started PetClinicApplication in XXX seconds приложения, чтобы получить время запуска сервера для JAR-приложения:

az spring app logs \
    --service ${AZURE_SPRING_APPS_NAME} \
    --name ${JAR_APP_NAME}

Время запуска сервера составляет около 25 с для JAR-приложения.

Используйте следующую команду, чтобы проверить журнал приложения, чтобы получить время запуска сервера для приложения Native Image:

az spring app logs \
    --service ${AZURE_SPRING_APPS_NAME} \
    --name ${NATIVE_APP_NAME}

Время запуска сервера меньше 0,5 с для приложения Native Image.

Использование памяти

Используйте следующую команду, чтобы уменьшить размер памяти до 512 Mi для приложения машинного образа:

az spring app scale \
    --service ${AZURE_SPRING_APPS_NAME} \
    --name ${NATIVE_APP_NAME} \
    --memory 512Mi

Выходные данные команды должны показать, что приложение Native Image успешно запущено.

Используйте следующую команду, чтобы уменьшить размер памяти до 512 Mi для JAR-приложения:

az spring app scale \
    --service ${AZURE_SPRING_APPS_NAME} \
    --name ${JAR_APP_NAME} \
    --memory 512Mi

Выходные данные команды должны показать, что приложение JAR не удалось запустить из-за нехватки памяти. Выходное сообщение должно совпадать со следующим примером: Terminating due to java.lang.OutOfMemoryError: Java heap space

На следующем рисунке показано оптимизированное использование памяти для развертывания машинного образа для постоянной рабочей нагрузки в 400 запросов в секунду в приложении Petclinic. Использование памяти составляет около 1/5 из памяти, используемой эквивалентным развертыванием JAR.

Снимок экрана: оптимизированное использование памяти развертывания собственного образа в Azure Spring Apps.

Собственные образы обеспечивают более быстрое время запуска и сокращают нагрузку на память среды выполнения по сравнению с обычной виртуальной машиной Java (JVM).

7. Очистка ресурсов

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

az group delete --name ${RESOURCE_GROUP}

8. Дальнейшие действия

Дополнительные сведения см. в следующих статьях: