Масштабирование с помощью комплексной системы безопасности, мониторинга и автоматизации

При разработке приложений необходимо определить, как адаптироваться к изменениям в рабочей нагрузке, восстановиться после непредвиденных сбоев, свести к минимуму риски безопасности и т. д. Хотя можно начать с подхода пробной и ошибок, который занимает время от других организационных целей и может негативно повлиять на нашу репутацию. Azure предоставляет рекомендации по архитектуре, необходимые для получения сведений с самого начала. Кроме того, у вас есть все необходимое для создания масштабируемого приложения— от обеспечения безопасности и автоматического масштабирования до поддержки служб для данных, обмена сообщениями, кэширования, мониторинга производительности и автоматизации. Многие из этих вспомогательных служб основаны на популярном программном обеспечении с открытым исходным кодом, например PostgreSQL, Redis, JMS и Kafka, поэтому вы не заблокировались в собственных решениях.

Схема с заголовком

Теперь давайте рассмотрим некоторые ключевые службы и функции Azure и как их можно использовать для создания масштабируемых приложений Java.

Расширение возможностей для приложений Java — баз данных и сообщений

Помимо предоставления нескольких вариантов выполнения кода Java, Azure предлагает широкий спектр полностью управляемых служб для поддержки потребностей базы данных, включая База данных Azure для PostgreSQL, База данных Azure для MySQL, MongoDB Atlas, Azure Cosmos DB, База данных SQL Azure и Управляемый экземпляр SQL Azure. То же самое относится к обмену сообщениями с параметрами, включающими Служебная шина Azure, Центры событий Azure и Apache Kafka для Confluent Cloud.

Служебная шина Azure категории "Премиум" поддерживает JMS, модель программирования службы обмена сообщениями Java. Независимо от того, работают ли ваши приложения на виртуальных машинах, в Kubernetes или в полностью управляемых службах PaaS, вы можете быстро подготавливать и использовать эти полностью управляемые данные и службы обмена сообщениями с помощью клиентов с открытым исходным кодом, пакетов SDK Для Java Azure, spring starters и интеграции серверов приложений. Все они предоставляют гарантии соответствия, доступности и надежности, которые вы ожидаете от Майкрософт и Azure. Многие разработчики Java и Spring хотят использовать идиоматические библиотеки для упрощения подключений к предпочитаемым облачным службам. Корпорация Майкрософт поддерживает полный список библиотек, драйверов и модулей , которые позволяют легко взаимодействовать со службами Azure между данными, сообщениями, кэшем, хранилищем, событиями, каталогом и управлением секретами. Дополнительные сведения см. в руководстве разработчика Spring Cloud для Azure.

Схема, которая содержит список функций Azure Spring Cloud и связанных служб Azure.

Схема, показывающая категории функций и связанные службы платформы Azure, поддерживаемые различными библиотеками Java, драйверами и модулями Spring.

Нулевое доверие — безопасная сеть

Вы можете защитить приложения Java, развернув их в azure виртуальная сеть — базовый стандартный блок для собственных частных сетей в Azure. Виртуальные сети позволяют многим типам ресурсов Azure безопасно взаимодействовать друг с другом, с Интернетом и с локальными сетями и системами. Вы можете использовать виртуальную сеть для изоляции приложений и поддержки внутренних служб из Интернета и их размещения в частных сетях. Вы можете предположить полный контроль над входящего трафика и исходящего трафика для приложений и внутренних систем.

Схема эталонной архитектуры Azure Spring Apps.

Zero-Trust — безопасный обмен данными

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

С помощью Azure можно защитить сквозную связь или завершить безопасность на уровне транспорта в любой точке связи. Вы также можете автоматизировать подготовку и настройку всех ресурсов Azure, необходимых для защиты связи. Сведения о том, как это работает для Azure Spring Apps, см. в статье "Безопасные коммуникации" для приложений Spring Boot в среде Zero Trust. Процесс аналогичен другим вычислительным службам Azure, которые можно использовать для запуска приложений Java.

На основе принципа "никогда не доверяйте, всегда проверяйте и без учетных данных", Zero Trust помогает защитить все сообщения, устраняя неизвестные и неуправляемые сертификаты, а также только доверия сертификатов, которыми предоставлен общий доступ, проверяя удостоверение перед предоставлением доступа к этим сертификатам. Вы можете использовать любой тип TLS/SSL-сертификата, включая сертификаты, выданные центром сертификации, расширенные сертификаты проверки, дикие карта сертификаты с поддержкой любого количества поддомов или самозаверяющего сертификата для сред разработки и тестирования.

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

Схема архитектуры для безопасного сквозного взаимодействия для приложений Spring Boot.

Нулевое доверие — управление секретами

Многие приложения Java подключаются к вспомогательным службам с помощью URL-адресов и учетных данных, которые, если они предоставляются, можно использовать для получения несанкционированного доступа к конфиденциальным данным. Внедрение таких сведений в само приложение представляет огромный риск безопасности по многим причинам, включая обнаружение через репозиторий кода. Многие разработчики внешние учетные данные используют переменные среды, чтобы несколько приложений могли загружать их, но это только перемещает риск из самого кода в среду выполнения.

Схема с заголовком

Azure Key Vault обеспечивает более безопасный и безопасный способ защиты секретов. Он обеспечивает полный контроль над хранилищем и распространением секретов приложений с помощью ролей контроль доступа (RBAC) и принципа наименьшей привилегии для ограничения доступа. Вы храните контроль над секретами приложений— просто предоставьте приложению разрешение на их использование по мере необходимости. При запуске приложения до предоставления доступа к секретам приложение проходит проверку подлинности с помощью идентификатора Microsoft Entra и Azure Key Vault авторизуется с помощью Azure RBAC. Azure Key Vault включает полные возможности аудита и имеет два уровня служб: Стандартный, который шифрует с помощью ключа программного обеспечения и уровня "Премиум", который включает аппаратный модуль безопасности (HSM) защищенных ключей.

Проверка подлинности и авторизация конечных пользователей

Большинство корпоративных приложений Java требуют проверки подлинности пользователей и авторизации, которые можно реализовать с помощью идентификатора Microsoft Entra — полного решения по управлению удостоверениями и доступом с интегрированной безопасностью. Учетные записи конечных пользователей могут быть удостоверениями организации или социальными удостоверениями из Facebook, Twitter или Gmail с помощью идентификатора Microsoft Entra и Azure Active Directory B2C. Вы можете реализовать решения на основе идентификатора Майкрософт с помощью библиотеки проверки подлинности Майкрософт для Java или Spring Boot Starter для Microsoft Entra. Вы также можете использовать любой поставщик удостоверений, например ForgeRock, Auth0, Ping или Okta.

Комплексный мониторинг

С помощью Azure вы можете отслеживать комплексные приложения Java с помощью любого средства и платформы. Кроме того, вы можете реализовать полностью управляемый, собственный мониторинг , включая мониторинг производительности приложений (APM) с помощью приложения Аналитика, функции Azure Monitor. Она обеспечивает надежную поддержку Java, Spring и платформ, таких как Micrometer и Spring Boot, что позволяет быстро выявлять и устранять проблемы. Функции включают потоковую передачу метрик, скорость запросов и отслеживание времени отклика, трассировку событий и внешние показатели зависимостей. Все, что необходимо для мониторинга доступности, производительности, надежности и использования приложений Java, работающих в Azure или локальной среде.

Вы можете отслеживать сквозные функции, агрегируя журналы и метрики в Log Analytics, инструмент в портал Azure, который можно использовать для редактирования и выполнения запросов к журналам и данным метрик в Azure Monitor. Вы можете написать запрос, возвращающий набор записей, а затем использовать Log Analytics для сортировки, фильтрации и анализа. Кроме того, можно написать более сложный запрос для выполнения статистического анализа и визуализации результатов на диаграмме, так как может потребоваться определить определенную тенденцию. Работаете ли вы с результатами запросов в интерактивном режиме или используете их с другими функциями Azure Monitor, такими как оповещения запросов журналов или книги, Log Analytics — это хороший инструмент для написания и тестирования запросов.

Тем не более чем мы понимаем, что клиенты, которые приносят свои приложения Java в Azure, могут продолжать использовать те же средства APM, которые они используют для мониторинга своих локальных приложений. Для поддержки этого использования мы сотрудничали с New Relic, AppDynamics, Dynatrace и Elastic для интеграции решений мониторинга с приложение Azure Service и Azure Spring Apps. Агенты мониторинга выполняются параллельно с кодом, и мы устанавливаем и сохраняем обновления агентов. При развертывании в приложениях контейнеров Azure, Служба Azure Kubernetes или Виртуальные машины вы можете запускать любой из этих агентов (включая New Relic, AppDynamics, Dynatrace, Elastic и Datadog), но вам нужно самостоятельно установить и управлять ими. Аналогичным образом можно отслеживать сквозные журналы и метрики в Elastic и Splunk.

Схема с заголовком

Мы также понимаем, что многие клиенты хотят продолжать использовать Grafana для запроса, визуализации, оповещения и понимания их метрик. По этой причине мы сотрудничаем с Grafana Labs для доставки Управляемой Grafana Azure, полностью управляемой службы, которая позволяет клиентам запускать Grafana в собственном коде в Azure. Служба позволяет легко развертывать безопасные и масштабируемые экземпляры Grafana и подключать их к источникам данных с открытым исходным кодом, облаком и сторонними источниками данных для визуализации и анализа. Служба оптимизирована для собственных источников данных Azure, таких как Azure Monitor и Azure Data Обозреватель, и включает интеграцию мониторинга производительности приложений с службами вычислений Azure, такими как приложение Azure Service, Azure Spring Apps, Служба Azure Kubernetes, Splunk, Datadog и Azure Виртуальные машины.

Ускорение приложений Java с помощью кэширования

По мере роста рабочих нагрузок для приложений Java можно повысить производительность с помощью Кэш Azure для Redis для реализации уровня кэширования в памяти для результатов запросов, состояний сеанса и статического содержимого. Это отличный способ повысить пропускную способность приложения и уменьшить задержку без необходимости повторной иерархии базовой базы данных. Кэш Azure для Redis уровнях Enterprise, разработанных в партнерстве с Redis и полностью управляемыми корпорацией Майкрософт, — это самый высокодоступный и масштабируемый вариант развертывания для запуска Redis в Azure, включая такие функции, как активные гео-реплика tion, управление внешними сеансами и высокоскоростный поиск и индексирование.

Схема с заголовком

Автоматическое масштабирование

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

Схема с заголовком

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

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

Автоматизация от идеи до рабочей среды

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

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

Azure позволяет автоматизировать разработку из идеи в рабочую среду с помощью широкого спектра инструментов и платформ. На высоком уровне такие конвейеры автоматизации можно разделить на три категории:

  • Конвейеры подготовки. Вы можете подготовить ресурсы Azure с помощью шаблонов Terraform, шаблонов Azure Resource Manager (ARM), шаблонов Bicep или Azure CLI, при необходимости для создания повторяемых скриптов для последовательной спиннинг-вверх и спиннинг-вниз сред.

  • Сборка конвейеров — на основе таких средств, как Maven или Gradle, как описано ранее в этой документации.

  • Конвейеры развертывания. С помощью GitHub Actions, Azure Pipelines, Jenkins Pipelines, GitLab Pipelines или Azure CLI можно автоматизировать развертывание кода, включая голубые и зеленые развертывания, которые сохраняют критически важные системы в рабочей среде при развертывании обновлений кода.

Продолжайте использовать существующие методики и системы

При миграции или сборке и масштабировании приложений Java в Azure можно использовать существующие инвестиции в сети, мониторинг, автоматизацию, поставщики удостоверений, локальные системы, средства разработки и сборки и библиотеки приложений. В следующей таблице приведены некоторые примеры:

Категория Продукты и службы экосистемы Java
Сеть F5, Palo Alto, Cloudflare, Контрольная точка, Infoblox
Наблюдение New Relic, Dynatrace, AppDynamics, Elastic, Splunk
Автоматизация GitHub Actions, Azure Pipelines, Jenkins, GitLab
Поставщики удостоверений Идентификатор Microsoft Entra, ForgeRock, Auth0, Ping, Okta
Локальная система Базы данных (например, Oracle DB или IBM DB2), обмен сообщениями (например, IBM MQ или TIBCO EMS), события (например, Kafka), каталоги (например, Microsoft Entra ID, OpenLDAP или IBM ID)
Средства разработки IntelliJ, Visual Studio Code, Eclipse, Spring Tool Suite, Maven, Gradle

Эталонные архитектуры

Центр архитектуры Azure предоставляет рекомендации по созданию решений в Azure с помощью установленных шаблонов и методик, включая использование этих возможностей. Эти эталонные архитектуры основаны на том, что мы узнали из взаимодействия с клиентами, принимая во внимание оптимизацию затрат, эффективность работы, производительность, надежность, масштабируемость, безопасность, мониторинг, тестирование дыма и многое другое. Они также рассматривают компоненты проектирования решений, такие как целевые зоны Azure— среды для размещения рабочих нагрузок, которые предварительно подготовлены через инфраструктуру как код, по мере необходимости, чтобы обеспечить миграцию приложений Java и разработку зеленых полей в масштабе предприятия.

Например, вот акселератор целевой зоны для Azure Spring Apps, показывающий, как реализовать центральной и периферийной конструкции, в которой Azure Spring Apps развертывается в одном периферийных устройствах, зависящих от общих служб, размещенных в концентраторе. Этот проект построен с компонентами для достижения наборов принципов в Microsoft Azure Well-Architected Framework. Сведения о реализации этой архитектуры см. в репозитории Azure Spring Apps Landing Zone Accelerator на GitHub. Вы можете применить тот же подход к любым приложениям Java, развернутых в любом целевом объекте Azure "вычисления", например службе приложение Azure, приложениям контейнеров Azure или Служба Azure Kubernetes. Кроме того, если вы рассматриваете миграцию существующих приложений Java в Azure, у нас есть полный набор руководств по миграции и рекомендуемых стратегий.

Схема с заголовком

Следующий шаг

Выберите нужные службы Azure для приложений Java