Типы развертывания приложений
Существует несколько способов развертывания приложений Java в облаке. В этом уроке рассматриваются различные варианты, чтобы в следующем уроке можно лучше понять службы, предоставляемые Azure.
Виртуальные машины, контейнеры или платформа как услуга?
Основной вопрос заключается в том, хотите или нужно развернуть ваше приложение на виртуальной машине, внутри контейнера или как платформу как услугу (PaaS).
При виртуальных машинахвы находитесь в мире, аналогичном локальной или классической среде центра обработки данных. Azure предоставляет набор предварительно настроенных виртуальных машин, работающих с основными операционными системами (Windows и Linux), и вам потребуется настроить и поддерживать эти компьютеры.
Мы рекомендуем сначала внедрить это решение, так как это ближайшее к тому, что большинство предприятий уже используют, прежде чем они переходят в облако. Обычно они устанавливают собственное программное обеспечение для управления конфигурацией, устанавливает свою любимую версию Java и затем может запускать свою рабочую нагрузку Java таким образом, как они сделали это в прошлом.
Решение виртуальной машины хорошо работает, если у вас есть опытная группа операций, которая будет настраивать и поддерживать их, а также если у вас есть конкретные варианты использования. Например, вы можете использовать некоторые собственные библиотеки или некоторые собственные программы, например Oracle WebLogic Server или IBM WebSphere Application Server.
С помощью контейнеров вы сохраняете большую часть возможностей управления, как в виртуальных машинах, но с меньшей нагрузкой по операционным задачам. Вы можете установить собственную виртуальную машину Java (JVM) или определенное программное обеспечение, а контейнеры будут работать локально или на любом поставщике облачных служб.
Так как контейнеры предлагают большую свободу, они страдают от некоторых из одних и тем же проблем, что и виртуальные машины. Если вы предоставляете собственный JVM, необходимо обновить и исправить его по мере необходимости. В результате образы Docker требуют хорошей непрерывной интеграции и цепочки инструментов непрерывной доставки (CI/CD) для правильного обслуживания контейнеров. Так как образы Docker могут выполняться локально и являются более легкими, чем виртуальные машины, они также обеспечивают отличный интерфейс разработчика.
С помощью решения платформы как услуги поставщик облачных служб берет на себя большую часть нагрузки по обслуживанию и эксплуатации. Предоставляются обновления операционной системы , исправления Java, безопасность и соответствие требованиям. В результате этот вариант обычно является более безопасным и менее дорогостоящим. Он также поставляется с некоторыми функциями масштабируемости, которые должны позволить приложению лучше адаптироваться к потребностям клиентов. Это также приводит к повышению производительности при загрузке и снижении затрат, если трафик меньше.
Вы можете добиться большего, используя решение PaaS. Вы можете настроить автоматическую настройку, управлять секретами и загружать их (например, с помощью Azure Key Vault), отслеживать приложение, запускать сеанс динамического профилирования и включать развертывание без простоев.
Варианты развертывания
Независимо от того, используете ли вы виртуальные машины, контейнеры или решение PaaS, обычно можно развертывать приложения Java в облаке двумя способами:
- Развёртывание исходного кода: вы коммитите свой исходный код в репозиторий Git, а облачный провайдер выполняет процесс компиляции, сборки и упаковки приложения.
- JAR, WAR или EAR - файл для развертывания: вы упаковываете ваше приложение, как правило, в виде исполняемого JAR-файла (Java ARchive), но возможны и варианты в формате WAR (Web Application ARchive), EAR (Enterprise Application ARchive) и других типов файлов. Затем поставщик облака запускает исполняемый файл.
Эти два варианта развертывания являются классическими способами запуска приложений Java. Для обоих вариантов процесс сборки обычно аналогичен, и основное различие заключается в том, где выполняется этот процесс. Позволяя поставщику облачных служб выполнять сборку проще, и при таком подходе поставщик облачных служб применяет собственные проверки безопасности и исправления. Создавая приложение локально или используя платформу CI/CD, например GitHub Actions, вы получаете большую гибкость и контроль.
Бессерверные функции
Бессерверные функции или более конкретно Функции Azure — это сочетание различных решений, которые мы видели и предлагаем очень конкретную функцию: бессерверные функции предназначены для работы в течение короткого периода времени. Обычно функция просыпается событием, например HTTP-запросом, и оно остается "горячим" в течение нескольких минут, пока не вернется в спящий режим.
Функции имеют общие черты с решением PaaS, описанным ранее. В Azure наше решение PaaS (Служба приложений Azure) и наше бессерверное решение (Функции Azure) технически похожи и совместно используют некоторые общие коды и службы.
Для параметров развертывания функции обычно работают с JAR-файлами. Другие варианты, такие как Docker, доступны, но они менее популярны и обычно работают не так хорошо. Это связано с тем, что базовая платформа не может оптимизировать их так же, как и для JAR-файлов.
По своей природе бессерверные функции должны быть специально закодированы. Их функции зависят от поставщика облачных служб, на котором они работают, и их короткая жизнь затрудняет использование традиционных решений, таких как кэширование или репликация сеансов HTTP.
Бессерверные функции могут масштабироваться хорошо, и они предлагают лучшую цену для сред с низким уровнем использования. В то же время они могут реагировать на самые требовательные нагрузки трафика.