Типы развертывания приложений
Есть несколько способов развертывания приложений 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.
Бессерверные функции могут хорошо масштабироваться, и они предлагают лучшую цену для сред с низким уровнем использования. В то же время они могут реагировать на самые высокие уровни трафика.