Типы развертывания приложений

Завершено

Есть несколько способов развертывания приложений 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 (ARchive веб-приложения), EAR (Enterprise Application ARchive) и других форматов файлов также возможны. Затем поставщик облака запускает исполняемый файл.

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

Бессерверные функции

Бессерверные функции или, в частности, Функции Azure, представляют собой сочетание различных решений, которые мы видели и предлагаем очень конкретную функцию: бессерверные функции предназначены для работы в течение короткого периода времени. Обычно функция вызывается событием, таким как HTTP-запрос, и выполняет задачу в течение нескольких минут, а затем приостанавливается.

Функции совместно используют функции с решением PaaS, описанным ранее. Более того, в Azure решение PaaS (Служба приложений Azure) и бессерверное решение (Функции Azure) технически очень похожи и даже используют некоторый общий код и службы.

Для целей разработки функции обычно работают с файлами JAR. Доступны другие варианты, такие как Docker, но они менее популярны и обычно не работают так же хорошо. Это обусловлено тем, что базовая платформа не может оптимизировать их так же, как и для JAR-файлов.

По своей природе бессерверные функции нуждаются в особом кодировании. Их функции зависят от поставщика облачных служб, на котором они работают, и их короткая жизнь затрудняет использование традиционных решений, таких как кэширование или реплика сеанса HTTP.

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