В этой статье описывается версия Magento с открытым исходным кодом, платформа электронной коммерции, написанная на PHP. Эта статья не относится к Adobe Commerce. В этом примере сценария показано развертывание Magento в Служба Azure Kubernetes (AKS) и описание распространенных рекомендаций по размещению Magento в Azure.
Архитектура
Скачайте файл Visio для этой архитектуры.
Рабочий процесс
- Служба Azure Kubernetes (AKS) развертывает кластер Kubernetes от Varnish, Magento, Redis и Elasticsearch в разных модулях pod.
- AKS создает виртуальную сеть для развертывания узлов агентов. Создайте виртуальную сеть заранее, чтобы настроить конфигурацию подсети, приватный канал и ограничение исходящего трафика.
- Varnish устанавливается перед HTTP-серверами и действует как полностраничный кэш.
- База данных Azure для MySQL хранит данные транзакций, такие как заказы и каталоги. Рекомендуется использовать версию 8.0.
- Файлы Azure Premium, Azure NetApp Files или эквивалентная система хранилища, подключенного к сети (NAS), хранит файлы мультимедиа, такие как образы продуктов. Magento требует файловой системы, совместимой с Kubernetes, которая может подключить том в режиме ReadWriteMany, например Файлы Azure Premium или Azure NetApp Files. Варианты хранения приложений в Служба Azure Kubernetes (AKS). Настоятельно рекомендуется протестировать пропускную способность входных и выходных операций в секунду (IOPS) и выбрать параметры, которые работают для вас.
- Сеть доставки содержимого (CDN) обслуживает статическое содержимое, например CSS, JavaScript и изображения. Обслуживание содержимого с помощью CDN сокращает задержку сети между пользователями и центром обработки данных. CDN может снять значительную нагрузку с NAS путем кэширования и обслуживания статического содержимого.
- Redis хранит данные сеанса. Размещение Redis в контейнерах рекомендуется по соображениям производительности.
- AKS использует удостоверение Microsoft Entra ID для создания других ресурсов Azure, таких как подсистемы балансировки нагрузки Azure, проверка подлинности пользователей, управление доступом на основе ролей и управляемое удостоверение.
- Реестр контейнеров Azure хранит частные образы Docker, развернутые в кластере AKS. Можно использовать другие реестры контейнеров, такие как Docker Hub. По умолчанию установка Magento записывает некоторые секреты в образ.
- Azure Monitor собирает и хранит метрики и журналы, включая метрики платформы служб Azure и телеметрию приложений. Azure Monitor интегрируется с AKS для сбора метрик контроллера, узла и контейнера, а также журналов контейнеров и главных узлов.
Компоненты
- Служба Azure Kubernetes (AKS): масштабирование контейнеров в управляемой службе Kubernetes.
- Azure виртуальная сеть: виртуальные сети в облаке.
- База данных Azure для MySQL: MySQL в облаке, который является экономически эффективным и простым для настройки, эксплуатации и масштабирования.
- Файлы Azure: общие папки в облаке. Это решение использует уровень "Премиум".
- Azure NetApp Files: общие папки Azure корпоративного уровня, на основе NetApp.
- Azure сеть доставки содержимого:A быстрая, надежная и глобальная сеть доставки содержимого.
- Идентификатор Microsoft Entra: многооблачное удостоверение и управление доступом.
- Реестр контейнеров Azure: реестр образов Docker и Open Container Initiative (OCI) с поддержкой всех артефактов OCI.
- Azure Monitor: сквозная наблюдаемость для приложений, инфраструктуры и сети
Подробности сценария
Дополнительные сведения о Magento см . в разделе "Общие сведения о локальной установке".
Потенциальные варианты использования
Это решение оптимизировано для розничной отрасли.
Рекомендации
Эти рекомендации реализуют основные принципы платформы Azure Well-Architected Framework, которая является набором руководящих принципов, которые можно использовать для улучшения качества рабочей нагрузки. Дополнительные сведения см. в статье Microsoft Azure Well-Architected Framework.
Безопасность
Ниже приведены некоторые рекомендации по безопасности для этого сценария:
Настройте приватный канал для MySQL, чтобы трафик между клиентами и MySQL не был открыт для общедоступного Интернета. Дополнительные сведения см. в статье Что такое Приватный канал Azure.
Вы можете добавить Шлюз приложений Azure входящего трафика для поддержки завершения безопасного слоя сокетов (SSL).
Вы также можете включить Azure Брандмауэр веб-приложений вместе с Шлюз приложений, чтобы защитить трафик, входящий в веб-приложение, размещенное в кластере AKS.
Управление доступом на основе ролей (RBAC)
Kubernetes и Azure имеют механизмы управления доступом на основе ролей (RBAC).
Azure RBAC контролирует доступ к ресурсам в Azure, включая возможность создания новых ресурсов. Azure RBAC может назначать разрешения пользователям, группам или субъектам-службам, которые являются идентификаторами безопасности, используемыми приложениями.
Kubernetes RBAC контролирует разрешения для API Kubernetes. Например, создание модулей pod и вывод списка модулей pod — это действия, которые Kubernetes RBAC может разрешить для пользователей.
AKS интегрирует механизмы Azure и Kubernetes RBAC. Чтобы назначить пользователям разрешения AKS, создайте роли и привязки ролей.
Роль — это набор разрешений, применяемых в пространстве имен. Разрешения определяются в виде действий, например, "получать", "обновлять", "создавать" или "удалять", которые можно совершать с ресурсами, такими как pod или развертывания.
Привязка роли назначает пользователей или группы ролям.
Объект ClusterRole определяет роль, которая применяется ко всему кластеру AKS во всех пространствах имен. Чтобы назначить ClusterRole пользователям или группам, создайте ClusterRoleBinding.
Кроме того, можно использовать Azure RBAC для авторизации Kubernetes, которая обеспечивает унифицированное управление и управление доступом в ресурсах Azure, AKS и Kubernetes.
При создании кластера AKS его можно настроить для проверки подлинности пользователей с помощью идентификатора Microsoft Entra.
Дополнительные сведения о настройке интеграции Microsoft Entra см. в статье интеграции Microsoft Entra, управляемой AKS.
Дополнительные сведения об управлении доступом к ресурсам кластера с помощью RBAC Kubernetes и удостоверений Microsoft Entra см. в статье Использование RBAC Kubernetes с идентификатором Microsoft Entra.
Масштабируемость
Существует несколько способов оптимизации масштабируемости для этого сценария:
Мультимедиа и статические файлы
Достаточно подготовить Файлы Azure, Azure NetApp Files или другую систему хранения, подключенного к сети (NAS). Magento может хранить тысячи файлов мультимедиа, таких как изображения продуктов. Не забудьте подготовить продукты NAS с достаточным количеством операций ввода-вывода в секунду (IOPS) для обработки спроса.
Сократите размер статического содержимого, такого как HTML, CSS и JavaScript. Минификация позволяет снизить потребление пропускной способности и обеспечивает более высокую скорость работы для пользователей.
Подключение к базе данных
Включите постоянное подключение к базе данных MySQL, чтобы Magento мог использовать существующее соединение вместо того, чтобы создавать его для каждого запроса. Чтобы включить постоянное подключение, добавьте следующую строку в раздел
db
файла Magento env.php:'persistent' => '1'
Если MySQL потребляет слишком много ресурсов ЦП, сократите использование, отключив счет продуктов из многоуровневой навигации в конфигурации Magento:
magento config:set -vvv catalog/layered_navigation/display_product_count 0
Кэширование
Настройте OPcache для кэширования и оптимизации кода PHP.
Убедитесь, что в php.ini заданы и раскомментированы следующие директивы:
opcache.enable=1
opcache.save_comments=1
opcache.validate_timestamps=0
Распределите нагрузки кэша Varnish путем запуска нескольких экземпляров в модулях pod, чтобы их можно было масштабировать.
Ведение журнала
Ограничьте ведение журнала доступа, чтобы избежать проблем с производительностью и предотвратить раскрытие конфиденциальных данных, таких как IP-адреса клиентов.
Используйте следующую команду Varnish, чтобы в журнал заносились только ошибки:
varnishd -s malloc,1G -a :80 -f /etc/varnish/magento.vcl && varnishlog -q "RespStatus >= 400 or BerespStatus >= 400"
Если для входящего трафика используется веб-сервер Apache, ограничьте ведение журнала Apache уровнем ошибок, добавив следующую строку в запись Magento
VirtualHost
в конфигурации сервера Apache:CustomLog /dev/null common
Отключите журналы доступа PHP-FPM, закомментировав параметр
access.log
во всех конфигурациях PHP-FPM.
Availability
Рассмотрите следующие способы оптимизации доступности для этого сценария:
Зонды работоспособности
Kubernetes определяет два типа пробы работоспособности:
- Проба готовности сообщает Kubernetes, готов ли модуль к приему запросов.
- Проба активности сообщает Kubernetes, следует ли удалить модуль и запустить новый экземпляр.
Настройте пробы работоспособности Kubernetes и используйте их для определения работоспособности pod.
зоны доступности;
Зоны доступности являются уникальными физическими расположениями в регионах Azure, которые помогают защитить приложения и данные от сбоев центров обработки данных. Каждая зона состоит из одного или нескольких центров обработки данных. Приложения в зонах могут оставаться доступными даже в случае физического сбоя в одном центре обработки данных.
Кластеры AKS можно развертывать в нескольких Зонах доступности, чтобы обеспечить более высокий уровень доступности и защититься от сбоев оборудования или запланированных событий обслуживания. Определение пулов узлов кластера, охватывающих несколько зон, позволяет узлам продолжать работу, даже если одна зона выходит из строя. Дополнительные сведения о развертывании AKS в Зонах доступности см. в разделе Создание кластера AKS, в котором используются зоны доступности.
Ограничения ресурсов
Состязание за ресурсы может повлиять на доступность службы. Определите ограничения ресурсов контейнеров, чтобы они не перегружали память кластера и ресурсы ЦП. Для обнаружения проблем в кластере можно использовать диагностику AKS.
Функция ограничения ресурсов используется для того, чтобы ограничить общее количество ресурсов, разрешенных для контейнера, чтобы этот конкретный контейнер не создавал дефицит ресурсов для других контейнеров.
DevOps
Ниже приведены некоторые рекомендации по работе с этим сценарием:
В этом сценарии MySQL не предоставляет общедоступную конечную точку. Если сервер сборки хранит параметры конфигурации для внутренней базы данных MySQL, необходимо развернуть этот сервер в той же подсети виртуальной сети, к которой подключается MySQL через конечную точку службы.
Для хранения частных образов Docker, развернутых в кластере, используйте Реестр контейнеров Azure или другой реестр контейнеров, например, Docker Hub. AKS может пройти проверку подлинности с помощью Реестр контейнеров Azure с помощью удостоверения Microsoft Entra.
Наблюдение
Azure Monitor предоставляет ключевые метрики для всех служб Azure, включая метрики контейнеров из AKS. Создайте панель мониторинга, чтобы отобразить все метрики в одном месте.
Помимо использования Azure Monitor для контейнеров, теперь можно использовать управляемую службу для Prometheus для сбора и анализа метрик в масштабе с помощью решения мониторинга, совместимого с Prometheus .
Вы также можете использовать Управляемый Grafana Azure (или самоуправляемую Grafana) для визуализации метрик Prometheus. При использовании Управляемой Grafana Azure подключение рабочей области Azure Monitor к рабочей области Azure Managed Grafana позволяет Grafana использовать данные рабочей области Azure Monitor на панели мониторинга Grafana. Затем у вас есть доступ к нескольким предварительно созданным панелям мониторинга, которые используют метрики Prometheus, и вы также можете создавать пользовательские панели мониторинга.
Тестирование производительности
Используйте набор средств производительности Magento для тестирования производительности. Этот набор средств использует Apache JMeter для имитации поведения клиентов, например, для входа, просмотра продуктов и оформления заказов.
Кроме того, следует рассмотреть возможность использования нагрузочного тестирования Azure, полностью управляемой службы нагрузочного тестирования, которая позволяет создавать высокомасштабируемую нагрузку. С помощью нагрузочного тестирования Azure можно быстро создать нагрузочный тест для веб-приложения с помощью URL-адреса. Кроме того, для более сложных сценариев нагрузочного тестирования можно создать нагрузочный тест, повторно выполнив существующий скрипт тестирования JMeter.
Оптимизация затрат
Оптимизация затрат заключается в поиске способов уменьшения ненужных расходов и повышения эффективности работы. Дополнительные сведения см. в разделе Обзор критерия "Оптимизация затрат".
Планирование емкости на основе тестирования производительности.
Для оценки затрат используйте калькулятор цен Azure.
Дополнительные сведения о стоимости см. в разделе Принципы оптимизации затрат в документации по Microsoft Azure Well-Architected Framework.