Общие сведения о Java в приложениях контейнеров Azure
Приложения контейнеров Azure могут запускать любое контейнерное приложение Java в облаке, предоставляя гибкие варианты развертывания приложений.
При использовании контейнеров приложений для контейнерных приложений Java вы получите:
Экономичное масштабирование. При использовании плана потребления приложения Java могут масштабироваться до нуля. Масштабирование при наличии небольшого спроса на приложение автоматически приводит к уменьшению затрат на проекты.
Варианты развертывания: приложения контейнеров Azure интегрируются с Buildpacks, что позволяет развертывать непосредственно из сборки Maven, через файлы артефактов или с собственным Файлом Dockerfile.
Развертывание JAR (предварительная версия): вы можете развернуть приложение-контейнер непосредственно из JAR-файла.
Развертывание WAR (предварительная версия): вы можете развернуть приложение контейнера непосредственно из WAR-файла.
Поддержка интегрированной среды разработки. Вы можете развернуть приложение контейнера непосредственно из IntelliJ.
Автоматическая настройка памяти (предварительная версия): контейнерные приложения оптимизируют управление памятью виртуальной машины Java (JVM), что делает максимально возможной памятью для приложений Java.
Создание переменных среды (предварительная версия): можно настроить пользовательские пары "ключ-значение", чтобы управлять сборкой образа Java из исходного кода.
В этой статье описаны сведения о том, как создавать приложения Java в приложениях контейнеров Azure.
Типы развертывания
Выполнение контейнерных приложений обычно означает, что вам нужно создать Dockerfile для приложения, но запуск приложений Java в приложениях контейнеров предоставляет несколько вариантов.
Тип | Описание | Использует пакеты сборки | Использует Dockerfile |
---|---|---|---|
Сборка исходного кода | Вы можете развернуть непосредственно в приложениях-контейнерах из исходного кода. | Да | Нет |
Сборка артефакта | Сборку Maven можно создать для развертывания в контейнерных приложениях | Да | Нет |
Dockerfile | Вы можете создать Dockerfile вручную и получить полный контроль над развертыванием. | No | Да |
Примечание.
Развертывания Buildpacks поддерживают JDK версии 8, 11, 17 и 21.
Типы приложений
Различные типы приложений реализуются как отдельное приложение контейнера или в качестве задания "Приложения контейнеров". Используйте следующую таблицу, чтобы решить, какой тип приложения лучше всего подходит для вашего сценария.
Примеры, перечисленные в этой таблице, не являются исчерпывающими, но для лучшего понимания намерения различных типов приложений.
Тип | Примеры | Реализуйте как... |
---|---|---|
Веб-приложения и конечные точки API | Spring Boot, Quarkus, Apache Tomcat и Jetty | Отдельное приложение контейнера |
Консольные приложения, запланированные задачи, средства выполнения задач, пакетные задания | Задания SparkJobs, задачи ETL, Задание Spring Batch, задание конвейера Jenkins | Задание "Приложения контейнеров" |
Отладка
При отладке приложения Java в контейнерных приложениях обязательно проверьте агент в процессе Java для потоков журналов и сообщений отладки консоли.
Устранение неполадок
При разработке приложений Java следует учитывать следующие элементы:
Ресурсы по умолчанию: по умолчанию приложение имеет половину ЦП и 1 ГБ.
Процессы без отслеживания состояния: при масштабировании и отключении приложения-контейнера создаются и завершаются новые процессы. Не забудьте заранее спланировать запись данных в общее хранилище, например базы данных и общие папки файловой системы. Не ожидайте, что файлы, записанные непосредственно в файловую систему контейнера, будут доступны любому другому контейнеру.
Масштабирование до нуля — это значение по умолчанию. Если необходимо обеспечить непрерывное выполнение одного или нескольких экземпляров приложения, убедитесь, что вы определите правило масштабирования для оптимального соответствия вашим потребностям.
Непредвиденное поведение: если приложению-контейнеру не удается создать, запустить или запустить, убедитесь, что путь артефакта задан правильно в контейнере.
Проблемы с поддержкой Buildpack: если buildpack не поддерживает зависимости или требуемую версию Java, создайте собственный Файл Dockerfile для развертывания приложения. Пример Dockerfile можно просмотреть для справки.
Сигналы SIGTERM и SIGINT: по умолчанию JVM обрабатывает
SIGTERM
и сигналы иSIGINT
не передает их приложению, если вы не перехватываете эти сигналы и обрабатываете их в приложении соответствующим образом. Контейнерные приложения используют как для управления процессами, такSIGTERM
иSIGINT
для управления процессами. Если вы не записываете эти сигналы, и приложение неожиданно завершает работу, эти сигналы могут потеряться, если вы не сохраните их в хранилище.Доступ к образам контейнеров: если вы используете артефакт или развертывание исходного кода в сочетании с реестром по умолчанию, у вас нет прямого доступа к образам контейнеров.
Наблюдение
Все стандартные средства наблюдения работают с приложением Java. При создании приложений Java для запуска в контейнерных приложениях следует учитывать следующие элементы:
Метрики: метрики виртуальной машины Java (JVM) критически важны для мониторинга работоспособности и производительности приложений Java. Собранные данные включают аналитические сведения об использовании памяти, сборке мусора, количестве потоков JVM. Вы можете проверить метрики , чтобы обеспечить работоспособность и стабильность приложений.
Ведение журнала. Отправка сообщений о приложениях и сообщениях об
stdout
ошибках вstderror
потоке журналов. Избегайте ведения журнала непосредственно в файловой системе контейнера, как правило, при использовании популярных служб ведения журнала.Конфигурация мониторинга производительности. Развертывание служб мониторинга производительности в качестве отдельного контейнера в среде приложений контейнеров, чтобы он смог напрямую получить доступ к приложению.
Диагностика
Приложения контейнеров Azure предлагают встроенные средства диагностика исключительно для разработчиков Java. Эта поддержка упрощает отладку и устранение неполадок приложений Java, работающих в приложениях контейнеров Azure, для повышения эффективности и простоты.
- Динамический уровень ведения журнала: позволяет получать доступ к различным уровням сведений журнала без изменения кода или принудительно перезапускать приложение. Для справки можно просмотреть уровень динамического ведения журнала.
Масштабирование
Если вам нужно убедиться, что запросы от интерфейсных приложений достигают одного сервера или интерфейсное приложение разделено между несколькими контейнерами, обязательно включите липкие сеансы.
Безопасность
Среда выполнения контейнерных приложений завершает tls/SSL для вас в среде приложений контейнеров.
Управление памятью
Чтобы оптимизировать управление памятью в приложении Java, вы можете убедиться, что в приложении включена настройка памяти JVM.
Память измеряется в гибибайтах (Ги) и парах ядер ЦП. В следующей таблице показан диапазон ресурсов, доступных вашему приложению контейнера.
За пороговое значение | Ядра ЦП | Память в Гибибайтах (Ги) |
---|---|---|
Минимум | 0.25 | 0,5 |
Максимум | 4 | 8 |
Ядра доступны в 0,25 ядра с объемом памяти, доступной в соотношении 2:1. Например, если требуется 1.25 ядер, для приложения контейнера доступно 2,5 Гим памяти.
Примечание.
Для приложений, использующих JDK версии 9 и более низких, обязательно определите пользовательские параметры памяти JVM для сопоставления выделения памяти в приложениях контейнеров Azure.
Поддержка компонентов Spring
Приложения контейнеров Azure поддерживают следующие компоненты Spring в качестве управляемых служб:
Eureka Server for Spring: регистрация и обнаружение служб являются ключевыми требованиями для поддержания списка экземпляров динамических приложений. Приложение использует этот список для маршрутизации и балансировки нагрузки входящих запросов. Настройка каждого клиента вручную занимает время и связана с возможностью человеческой ошибки. Eureka Server упрощает управление обнаружением служб путем функционирования в качестве реестра служб, где микрослужбы могут регистрировать себя и обнаруживать другие службы в системе.
Сервер конфигурации для Spring: Config Server предоставляет централизованное управление внешней конфигурацией для распределенных систем. Этот компонент предназначен для решения проблем управления параметрами конфигурации в нескольких микрослужбах в облачной среде.
Администратор Spring: управляемый компонент admin for Spring предоставляет административный интерфейс, предназначенный для веб-приложений Spring Boot с конечными точками актатора. Управляемый компонент обеспечивает интеграцию и управление приложением контейнера, позволяя привязать приложение контейнера к компоненту Admin for Spring.