Este artigo é sobre a versão de código aberto do Magento, uma plataforma de comércio eletrônico escrita em PHP. Este artigo não é sobre a Adobe Commerce. Este cenário de exemplo mostra o Magento implantado no AKS (Serviço de Kubernetes do Azure) e descreve as práticas recomendadas comuns para hospedar o Magento no Azure.
Arquitetura
Baixe um Arquivo Visio dessa arquitetura.
Workflow
- O AKS (Serviço de Kubernetes do Azure) implanta o cluster Kubernetes de Varnish, Magento, Redis e Elasticsearch em pods diferentes.
- O AKS cria uma rede virtual para ter onde implantar os nós de agente. Crie a rede virtual com antecedência para configurar a configuração de sub-rede, o vínculo privado e a restrição de saída.
- O Varnish é instalado na frente dos servidores HTTP para atuar como um cache de página inteira.
- O BD do Azure para MySQL armazena dados de transação como pedidos e catálogos. A versão 8,0 é recomendada.
- Os Arquivos do Azure Premium, Azure NetApp Files ou um sistema de armazenamento anexado à rede (NAS) equivalente armazena arquivos de mídia como imagens de produto. O Magento precisa de um sistema de arquivos compatível com Kubernetes que possa montar um volume no modo ReadWriteMany, como o Arquivos do Azure Premium ou Azure NetApp Files. Opções de armazenamento para aplicativos no Serviço de Kubernetes do Azure (AKS). É altamente recomendável que você teste a taxa de transferência de operações de entrada/saída por segundo (IOPS) e escolha as opções que funcionam para você.
- Uma CDN (rede de distribuição de conteúdo) serve conteúdo estático como CSS, JavaScript e imagens. O fornecimento de conteúdo por meio de uma CDN minimiza a latência de rede entre os usuários e o datacenter. Uma CDN pode remover a carga significativa do NAS, armazenando em cache e servindo conteúdo estático.
- O Redis armazena dados de sessão. A hospedagem de Redis em contêineres é recomendada por motivos de desempenho.
- O AKS utiliza uma identidade do Microsoft Entra ID para criar e gerenciar outros recursos do Azure, como balanceadores de carga do Azure, autenticação de usuário, controle de acesso baseado em função e identidade gerenciada.
- O Registro de Contêiner do Azure armazena as imagens privadas do Docker que são implantadas no cluster de AKS. É possível usar outros registros de contêiner, como o Docker Hub. A instalação padrão do Magento grava alguns segredos na imagem.
- O Azure Monitor coleta e armazena métricas e logs, incluindo a métrica de plataforma de serviço do Azure e telemetria de aplicativo. O Azure Monitor integra-se ao AKS para coletar métricas de controlador, nó e contêiner, e logs de nó mestre e contêiner.
Componentes
- Serviço de Kubernetes do Azure (AKS): escalar contêineres em um serviço Kubernetes gerenciado.
- Rede Virtual do Azure: redes virtuais na nuvem.
- Banco de Dados do Azure para MySQL: o MySQL na nuvem, que é econômica e fácil de configurar, operar e escalar.
- Arquivos do Azure: compartilhamentos de arquivos na nuvem. Essa solução usa a camada Premium.
- Azure NetApp Files: compartilhamentos de arquivos do Azure de nível empresarial oferecidos pela NetApp.
- Rede de Distribuição de Conteúdo do Azure: uma rede de distribuição de conteúdo rápida, confiável e global.
- Microsoft Entra ID: gerenciamento de acesso e identidade multinuvem.
- O Registro de Contêiner do Azure é um registro de imagens do Docker e da Open Container Initiative (OCI), com suporte para todos os artefatos da OCI.
- Azure Monitor: observabilidade ponta a ponta para aplicativos, infraestrutura e rede
Detalhes do cenário
Para obter mais informações sobre o Magento, confira a Visão geral da instalação local.
Possíveis casos de uso
Esta solução é otimizada para o setor de varejo.
Considerações
Estas considerações implementam os pilares do Azure Well-Architected Framework, que é um conjunto de princípios de orientação que podem ser usados para aprimorar a qualidade de uma carga de trabalho. Para obter mais informações, confira Microsoft Azure Well-Architected Framework.
Segurança
Aqui estão algumas considerações de segurança para este cenário:
Configure um link privado para o MySQL para que o tráfego entre os clientes e o MySQL não seja exposto à Internet pública. Para obter mais informações, confira O que é o Link Privado do Azure.
Você pode adicionar a entrada do Gateway de Aplicativo do Azure para dar suporte ao encerramento de SSL (Secure Socket Layer).
Você também pode habilitar o Firewall de Aplicativo Web do Azure junto com o Gateway de Aplicativo para ajudar a proteger o tráfego que entra no aplicativo web que está hospedado no cluster do AKS.
RBAC (Controle de Acesso Baseado em Função)
O Kubernetes e o Azure têm mecanismos de RBAC (controle de acesso baseado em função).
O RBAC do Azure controla o acesso aos recursos do Azure, incluindo a capacidade de criar recursos. O RBAC do Azure pode atribuir permissões a usuários, grupos ou entidades de serviço, que são identidades de segurança usadas por aplicativos.
O RBAC do Kubernetes controla permissões para a API do Kubernetes. Por exemplo, a criação de pods e listagem de pods são ações que o RBAC do Kubernetes pode autorizar para os usuários.
O AKS integra os mecanismos do RBAC do Azure e do Kubernetes. Para atribuir permissões do AKS aos usuários, crie funções e associações de função:
Uma função é um conjunto de permissões que se aplicam dentro de um namespace. As permissões são definidas como verbos como obter, atualizar, criar ou excluir, em recursos como pods ou implantações.
A associação de função atribui usuários ou grupos a um a funções.
Um objeto de ClusterRole define uma função que se aplica a todo o cluster do AKS, em todos os namespaces. Para atribuir usuários ou grupos a um ClusterRole, crie um ClusterRoleBinding.
Como alternativa, você pode usar o RBAC do Azure para Autorização do Kubernetes, que permite o gerenciamento unificado e o controle de acesso entre recursos do Azure, do AKS e do Kubernetes.
Quando você cria o cluster do AKS, é possível configurá-lo para usar o Microsoft Entra ID na autenticação de usuários.
Para obter detalhes sobre como configurar a integração do Microsoft Entra, confira a integração do Microsoft Entra gerenciada pelo AKS.
Para obter mais informações sobre como controlar o acesso a recursos de cluster usando o RBAC do Kubernetes e identidades do Microsoft Entra, confira como Usar o RBAC do Kubernetes com o Microsoft Entra ID.
Escalabilidade
Há várias maneiras de otimizar a escalabilidade para este cenário:
Mídia e arquivos estáticos
Provisione adequadamente os Arquivos do Azure, o Azure NetApp Files ou outro sistema de armazenamento anexado à rede (NAS). O Magento pode armazenar milhares de arquivos de mídia, como imagens de produtos. Não se esqueça de provisionar os produtos de NAS com operações suficientes de entrada/saída por segundo (IOPS) para lidar com a demanda.
Minimize o tamanho do conteúdo estático, como HTML, CSS e JavaScript. A Minificação pode reduzir os custos de largura de banda e oferece uma experiência mais ágil para os seus usuários.
Conexão de banco de dados
Ative a conexão persistente ao banco de dados MySQL, portanto, o Magento continuará reutilizando a conexão existente em vez de criar uma nova para cada solicitação. Para ativar a conexão persistente, adicione a seguinte linha à
db
seção do arquivo Magento env.php:'persistent' => '1'
Se o MySQL consumir muita CPU, reduza a utilização desativando a contagem de produtos da navegação em camadas na configuração do Magento:
magento config:set -vvv catalog/layered_navigation/display_product_count 0
Cache
Configure o OPcache para cache de código PHP e otimização.
Verifique se as seguintes diretivas estão definidas e desmarcadas no php.ini:
opcache.enable=1
opcache.save_comments=1
opcache.validate_timestamps=0
Equilibre o balanceamento de carga do cache de Varnish executando várias instâncias em pods para que ele possa ser dimensionado.
Registrando em log
Limite o registro em log de acesso para evitar problemas de desempenho e evitar a exposição de dados confidenciais, como endereços IP do cliente.
Use o seguinte comando Varnish para limitar o registro em log ao nível de erro:
varnishd -s malloc,1G -a :80 -f /etc/varnish/magento.vcl && varnishlog -q "RespStatus >= 400 or BerespStatus >= 400"
Se você usar o servidor Web Apache para entrada, limite o registro em log do Apache ao nível de erro adicionando a seguinte linha à entrada Magento
VirtualHost
na configuração do servidor Apache:CustomLog /dev/null common
Desative os logs de acesso do PHP-FPM comentando a
access.log
configuração em todas as configurações do PHP-FPM.
Disponibilidade
Considere estas maneiras de otimizar a disponibilidade para este cenário:
Investigações de integridade
O Kubernetes define dois tipos de investigação de integridade:
- A investigação de preparação informa ao Kubernetes se o pod está pronto para aceitar solicitações.
- A investigação de atividade informa ao Kubernetes se um pod precisa ser removido e uma nova instância precisa ser iniciada.
Personalize as investigações de integridade do Kubernetes e use-as para saber se um pod está em boas condições.
Zonas de Disponibilidades
As Zonas de Disponibilidade são locais físicos exclusivos em regiões do Azure que ajudam a proteger aplicativos e dados de falhas do datacenter. Cada zona é composta por um ou mais data centers. Os aplicativos em zonas podem permanecer disponíveis mesmo se houver uma falha física em um único datacenter.
Os clusters do AKS podem ser implantados em vários Zonas de Disponibilidade, para fornecer um nível mais alto de disponibilidade e proteger contra falhas de hardware ou eventos de manutenção planejada. Definir pools de nó de cluster para abranger várias zonas permite que os nós continuem operando mesmo se uma única zona ficar inativa. Para obter mais informações sobre como implantar o AKS em Zonas de Disponibilidade, consulte Criar um cluster de AKS que usa zonas de disponibilidade.
Restrições de recursos
A contenção de recursos pode afetar a disponibilidade do serviço. Defina as restrições de recurso de contêiner, de modo que nenhum contêiner individual possa sobrecarregar a memória do cluster e os recursos da CPU. Você pode usar o diagnóstico do AKS para identificar os problemas no cluster.
Use o limite de recursos para restringir o total de recursos permitidos para um contêiner, de modo que um contêiner específico não possa privar os outros.
DevOps
Aqui estão algumas considerações operacionais para este cenário:
Nesse cenário, o MySQL não expõe um ponto de extremidade público. Se o servidor de compilação armazena as definições de configuração para o banco de dados MySQL de back-end, certifique-se de implantar esse servidor na mesma sub-rede de rede virtual que o MySQL conecta via ponto de extremidade de serviço.
Use o Registro de Contêiner do Azure ou outro registro de contêiner como o Docker Hub para armazenar as imagens privadas do Docker implantadas no cluster. O AKS pode se autenticar no Registro de Contêiner do Azure por meio da identidade do Microsoft Entra.
Monitoramento
O Azure Monitor fornece métricas-chave para todos os serviços do Azure, incluindo métricas de contêiner de AKS. Crie um painel para mostrar todas as métricas em um único lugar.
Além de usar o Azure Monitor para contêineres, agora você pode usar o serviço gerenciado para Prometheus a fim de coletar e analisar métricas em escala por meio de uma solução de monitoramento compatível com o Prometheus.
Você também pode usar o Azure Managed Grafana (ou o Grafana auto-gerenciado) para visualizar métricas do Prometheus. Quando você usar o Espaço Gerenciado do Azure para Grafana, conectar seu workspace do Azure Monitor ao workspace do Espaço Gerenciado do Azure para Grafana permite que o Grafana use os dados do workspace do Azure Monitor em um painel do Grafana. Então, você terá acesso a vários painéis predefinidos que usam as métricas do Prometheus e a também pode criar painéis personalizados.
Testes de desempenho
Use o Conjunto de ferramentas de desempenho do Magento para testes de desempenho. O conjunto de ferramentas usa o Apache JMeter para simular comportamentos do cliente, como entrar, procurar produtos e fazer check-out.
Você também deve considerar usar o Teste de Carga do Azure, um serviço de teste de carga totalmente gerenciado que permite gerar cargas em alta escala. Com o Teste de Carga do Azure, você pode criar com rapidez um teste de carga para seu aplicativo Web usando uma URL. Como alternativa, para cenários mais avançados de teste de carga, você pode criar um teste de carga reutilizando um script de teste do JMeter disponível.
Otimização de custo
A otimização de custos é a análise de maneiras de reduzir as despesas desnecessárias e melhorar a eficiência operacional. Para obter mais informações, confira Visão geral do pilar de otimização de custo.
Faça o planejamento de capacidade com base no teste de desempenho.
Use a Calculadora de Preços do Azure para estimar os custos.
Confira outras considerações de custo em Princípios de otimização de custos no Microsoft Azure Well-Architected Framework.