Compartilhar via


Perspectiva do Azure Well-Architected Framework no Serviço de Aplicativo do Azure (Aplicativos Web)

O Serviço de Aplicativo do Azure é uma PaaS (plataforma como serviço) que fornece um ambiente de hospedagem totalmente gerenciado para criar, implantar e dimensionar aplicativos Web. Como uma solução de PaaS, o Serviço de Aplicativo abstrai a infraestrutura subjacente, permitindo que você se concentre no desenvolvimento de aplicativos. O Serviço de Aplicativo (Aplicativo Web) executa seus aplicativos no contexto de um plano do Serviço de Aplicativo, que determina os recursos, o sistema operacional, a região e o modelo de preços (Sku) usados para hospedar seu aplicativo.

Este artigo pressupõe que, enquanto arquiteto, você revisou a árvore de decisão de computação e escolheu o Serviço de Aplicativo para sua carga de trabalho. As diretrizes neste artigo oferecem recomendações arquitetônicas que estão alinhadas aos princípios dos pilares do Azure Well-Architected Framework.

Importante

Como usar este guia

Cada seção contém uma lista de verificação de design realçando considerações e estratégias de arquitetura para o Serviço de Aplicativo do Azure. Recomendações oferecem diretrizes específicas para implementar aquelas estratégias.

As recomendações não representam uma lista completa de todas as configurações disponíveis para o recurso aplicativos Web do Serviço de Aplicativo do Azure e suas dependências. Em vez disso, eles listam as principais recomendações correspondentes às perspectivas de design. Use as recomendações para criar sua prova de conceito ou otimizar seus ambientes existentes.

Arquitetura fundamental que demonstra as principais recomendações: arquitetura básica do Serviço de Aplicativo .

Escopo de tecnologia

Esta revisão se concentra nas decisões interrelacionadas para os seguintes recursos do Azure:

  • Planos do Serviço de Aplicativo
  • Aplicativos Web

Outras ofertas do Azure estão associadas ao Serviço de Aplicativo, como o Azure Functions, os Aplicativos Lógicos do Azure e o Ambiente do Serviço de Aplicativo. Essas ofertas estão fora do escopo deste artigo. O Ambiente do Serviço de Aplicativo é referenciado ocasionalmente para ajudar a esclarecer recursos ou opções das principais ofertas do Serviço de Aplicativo.

Fiabilidade

A finalidade do pilar confiabilidade é fornecer funcionalidade contínua criando resiliência suficiente e a capacidade de se recuperar rapidamente de falhas.

Os princípios de design de confiabilidade fornecem uma estratégia de design de alto nível aplicada a componentes individuais, fluxos do sistema e o sistema como um todo.

Lista de verificação de design

Comece sua estratégia de design com base na lista de verificação de revisão de design para confiabilidade. Determine sua relevância para seus requisitos de negócios, tendo em mente as camadas e os recursos do Serviço de Aplicativo e suas dependências. Estenda a estratégia para incluir mais abordagens conforme necessário.

  • Priorizar fluxos de usuário: nem todos os fluxos são igualmente críticos. Identifique os caminhos críticos em seu aplicativo e atribua prioridades a cada fluxo para orientar suas decisões de design. O design do fluxo do usuário pode influenciar quais camadas de serviço e o número de instâncias você escolhe para um plano e configuração do Serviço de Aplicativo.

    Por exemplo, seu aplicativo pode incluir camadas de front-end e back-end que se comunicam por meio de um agente de mensagens. Você pode optar por segmentar as camadas em vários aplicativos Web para permitir o dimensionamento independente, o gerenciamento do ciclo de vida e a manutenção. Colocar um aplicativo grande em um único plano pode levar a problemas de memória ou CPU e afetar a confiabilidade.

    Talvez você precise de mais instâncias no front-end para um desempenho ideal no lado da interface do usuário. No entanto, talvez o back-end não exija o mesmo número de instâncias.

  • Prever possíveis falhas: planeje estratégias de mitigação para possíveis falhas. A tabela a seguir mostra exemplos de análise do modo de falha.

    Fracasso Mitigação
    Falha de componentes subjacentes ou abstraídos do Serviço de Aplicativo Tenha redundância de componentes em instâncias e dependências. Monitore a integridade de instâncias, desempenho de rede e desempenho de armazenamento.
    Falha das dependências externas Use padrões de design, como o Padrão de repetição e o padrão Circuit Breaker. Monitore as dependências externas e defina os tempos limite apropriados.
    Falha devido ao roteamento de tráfego para instâncias não saudáveis Monitore a integridade da instância. Considere a capacidade de resposta e evite enviar solicitações para instâncias não íntegras.

    Para obter mais informações, consulte Análise do modo de falha para aplicativos do Azure.

  • Criar redundância: Estabelecer redundância no aplicativo e na infraestrutura de suporte. Espalhe instâncias em zonas de disponibilidade para melhorar a tolerância a falhas. O tráfego será roteado para outras zonas se uma zona falhar. Implante seu aplicativo em várias regiões para garantir que seu aplicativo permaneça disponível, mesmo que uma região inteira tenha uma interrupção.

    Crie níveis semelhantes de redundância em serviços dependentes. Por exemplo, as instâncias de aplicativo vinculam-se ao armazenamento de blobs. Considere configurar a conta de armazenamento associada ao ZRS (armazenamento com redundância de zona) se um aplicativo usar uma implantação com redundância de zona.

  • Usar várias instâncias: Executar seu aplicativo em apenas uma instância representa um ponto único de falha imediato. Aloque várias instâncias para seu aplicativo para garantir a alta disponibilidade. Se uma instância falhar, outras instâncias ainda poderão lidar com solicitações de entrada. Tenha em mente que o código do aplicativo deve ser capaz de lidar com várias instâncias sem problemas de sincronização ao ler ou gravar em fontes de dados.

    Tenha redundância em componentes de rede. Por exemplo, use endereços IP com redundância de zona e balanceadores de carga.

  • Ter uma estratégia de dimensionamento confiável: a carga inesperada em um aplicativo pode torná-la não confiável. Considere a abordagem de dimensionamento correta com base nas características da carga de trabalho. O escalonamento horizontal (escalar horizontalmente) permite adicionar mais instâncias para distribuir a carga, enquanto o escalonamento vertical (escalar verticalmente) envolve o aumento da capacidade de uma instância existente (CPU, memória). Tenha cuidado com o excesso de provisionamento, pois a adição de instâncias desnecessárias aumenta os custos sem benefícios tangíveis de desempenho.

    Às vezes, você pode escalar verticalmente para lidar com a carga. No entanto, se a carga continuar aumentando, expanda para novas instâncias. Dê preferência ao escalonamento automático ou dimensionamento automático em vez de abordagens manuais. Sempre mantenha um buffer de capacidade extra durante operações de dimensionamento para evitar degradação de desempenho[Escolha a opção de dimensionamento para o Serviço de Aplicativo](Dimensionamento automático no Serviço de Aplicativo do Azure)

    O nível de plano do Serviço de Aplicativo que você escolher afeta o dimensionamento em termos do número de instâncias e das unidades de computação.

  • Verifique a inicialização adequada do aplicativo para que as novas instâncias se aqueçam rapidamente e possam receber solicitações.

    Procure aplicativos sem estado sempre que possível. A escalabilidade confiável do estado com novas instâncias pode aumentar a complexidade. Considere um repositório de dados externo que poderá ser dimensionado de forma independente se precisar armazenar o estado do aplicativo. Armazenar o estado da sessão na memória pode resultar em perda de estado de sessão quando há um problema com o aplicativo ou o Serviço de Aplicativo. Ele também limita a possibilidade de espalhar a carga entre outras instâncias.

    Teste regularmente suas regras de dimensionamento automático. Simule cenários de carga para verificar se o aplicativo é dimensionado conforme o esperado. Você deve registrar eventos de escalonamento para que possa solucionar problemas que possam surgir e otimizar sua estratégia de escalonamento ao longo do tempo.

    O App Service tem uma limitação no número de instâncias em um plano, o que pode afetar a confiabilidade do dimensionamento. Uma estratégia é usar carimbos de implantação idênticos, cada um executado uma instância do plano de Serviço de Aplicativos com seu próprio ponto de extremidade. É fundamental que você coloque na frente de todos os carimbos um balanceador de carga externo para distribuir o tráfego entre elas. Use o Gateway de Aplicativo do Azure para implantações de zona única e o Azure Front Door para implantações multi-regionais. Essa abordagem é ideal para aplicativos críticos em que a confiabilidade é crucial. Para obter mais informações, confira Linha de base com o Serviço de Aplicativo.

  • Planeje sua capacidade de recuperação: a redundância é crucial para a continuidade dos negócios. Faça failover para outra instância se uma instância estiver inacessível. Explore os recursos de recuperação automática no Serviço de Aplicativo, como o reparo automático de instâncias.

    Implemente padrões de design para lidar com a degradação normal para falhas transitórias, como problemas de conectividade de rede e eventos em grande escala, como interrupções regionais. Considere os seguintes padrões de design:

    • o padrão Bulkhead segmenta seu aplicativo em grupos isolados para evitar que uma falha afete todo o sistema.

    • O padrão de Nivelamento de Carga Baseado em Fila coloca itens de trabalho em filas que servem como um buffer para suavizar picos de tráfego.

    • O padrão de nova tentativa lida com falhas temporárias devido a falhas de rede, conexões de banco de dados descartadas ou serviços ocupados.

    • o padrão disjuntor impede que um aplicativo tente executar repetidamente uma operação que provavelmente falhará.

    Você pode usar WebJobs para executar tarefas em segundo plano em seu aplicativo Web. Para executar essas tarefas de forma confiável, verifique se o aplicativo que hospeda seu trabalho é executado continuamente em um agendamento ou com base em gatilhos controlados por eventos.

    Para obter mais informações, consulte Padrões de Confiabilidade.

  • Realizar testes de confiabilidade: realize testes de carga para avaliar a confiabilidade e o desempenho do aplicativo sob carga. Os planos de teste devem incluir cenários que validem suas operações de recuperação automatizadas.

    Use a injeção de falha para introduzir falhas intencionalmente e validar seus mecanismos de autorrecuperação e autopreservação. Explore a biblioteca de falhas fornecida pelo Azure Chaos Studio.

    O Serviço de Aplicativo impõe limites de recursos aos aplicativos hospedados. O plano do Serviço de Aplicativo determina esses limites. Verifique se os testes confirmam que o aplicativo é executado dentro desses limites de recursos. Para saber mais, confira Assinatura e limites de serviço, cotas e restrições do Azure.

  • Use o recurso Verificação de Integridade para identificar os trabalhadores que não respondem: O Serviço de Aplicativos possui uma capacidade integrada para monitorar periodicamente um caminho específico da sua aplicação web. A plataforma executa ping nesse caminho para determinar se seu aplicativo está íntegro e respondendo às solicitações. Quando seu site for escalado para várias instâncias, o Serviço de Aplicativo excluirá quaisquer instâncias com problemas do atendimento de solicitações, melhorando sua disponibilidade geral. O caminho de verificação de integridade do aplicativo deve sondar os componentes críticos do aplicativo, como seu banco de dados, cache ou serviço de mensagens. Isso garante que o status retornado pelo caminho de verificação de integridade seja uma imagem precisa da integridade geral do aplicativo. Definir o caminho de verificação de integridade

  • usar o recurso de Recuperação Automática: às vezes, seu aplicativo pode experimentar comportamentos inesperados que podem ser resolvidos por uma reinicialização simples. Os recursos de Recuperação Automática permitem que você defina uma "condição" que acionaria a Recuperação Automática e a "ação" que a Recuperação Automática iniciará quando a condição for atendida. Ferramentas de Diagnóstico do Serviço de Aplicativo e recurso de Recuperação Automática

  • Relatório de Pontuação de Resiliência do Serviço de Aplicativo: para examinar as recomendações de práticas recomendadas personalizadas, confira o Relatório de Pontuação de Resiliência. Relatório de Pontuação de Resiliência do Serviço de Aplicativo

Recomendações

Recomendação Benefício
(Serviço de Aplicativo) Escolha a camada Premium v3 de um plano do Serviço de Aplicativo para cargas de trabalho de produção.

Defina o número máximo e mínimo de trabalhadores de acordo com seu planejamento de capacidade. Para mais informações, consulte Visão geral do plano do Serviço de Aplicativo.
Um plano do Serviço de Aplicativo Premium V3 oferece recursos avançados de dimensionamento e garante a redundância se ocorrerem falhas.
(Serviço de Aplicativo) Habilitar redundância de zona.

Considere o provisionamento de mais de três instâncias para aprimorar a tolerância a falhas.

Verifique o suporte regional para redundância de zona porque nem todas as regiões oferecem esse recurso.
Seu aplicativo pode suportar falhas em uma única zona quando várias instâncias são distribuídas entre zonas. O tráfego muda automaticamente para instâncias saudáveis em outras zonas e mantém a confiabilidade do aplicativo se uma zona estiver indisponível.
(Aplicativo Web) Considere desabilitar o recurso de afinidade do roteamento de solicitações de aplicativo (ARR). A afinidade do ARR cria sessões persistentes que redirecionam os usuários para o nó que processou suas solicitações anteriores. As solicitações de entrada são distribuídas uniformemente entre todos os nós disponíveis quando você desabilita a afinidade do ARR. Solicitações distribuídas uniformemente impedem que o tráfego sobrecarregue qualquer nó em particular. As solicitações podem ser redirecionadas diretamente para outros nós íntegros se um nó não estiver disponível.

Evite afinidade de sessão para garantir que sua instância do Serviço de Aplicativo permaneça sem estado. Um Serviço de Aplicativo sem estado reduz a complexidade e garante um comportamento consistente entre os nós.

Remova as sessões persistentes para que o Serviço de Aplicações possa adicionar ou remover instâncias para dimensionar horizontalmente.
(Aplicativo Web) Definir regras de recuperação automática com base na contagem de solicitações, solicitações lentas, limites de memória e outros indicadores que fazem parte da linha de base de desempenho. Considere essa configuração como parte de sua estratégia de dimensionamento. As regras de recuperação automática ajudam seu aplicativo a se recuperar automaticamente de problemas inesperados. As regras configuradas disparam ações de recuperação quando os limites são violados.

A recuperação automática permite a manutenção proativa automática.
(Aplicativo Web) Habilitar o recurso de verificação de integridade e fornecer um caminho que responda às solicitações de verificação de integridade. Exames de saúde podem detectar problemas precocemente. Em seguida, o sistema pode executar ações corretivas automaticamente quando uma solicitação de verificação de integridade falhar.

O balanceador de carga distancia o tráfego para de instâncias não íntegras, o que direciona os usuários para nós íntegros.

Segurança

O objetivo do pilar Segurança é fornecer garantias de confidencialidade, integridade e disponibilidade para a carga de trabalho.

Os Princípios de design de segurança fornecem uma estratégia de design de alto nível para atingir essas metas aplicando abordagens ao design técnico em torno da hospedagem no Serviço de Aplicativo.

Lista de verificação de design

Inicie sua estratégia de design com base na Lista de verificação de revisão de design para Segurança e identifique vulnerabilidades e controles para melhorar a postura de segurança. Estenda a estratégia para incluir mais abordagens conforme necessário.

  • Revise as linhas de base de segurança: para aprimorar a postura de segurança do aplicativo hospedado em um plano do Serviço de Aplicativo, examine a linha de base de segurança para o Serviço de Aplicativo.

  • Use o runtime e as bibliotecas mais recentes: teste minuciosamente seus builds de aplicativo antes de fazer atualizações para detectar problemas mais cedo e garantir uma transição tranquila para a nova versão. O Serviço de Aplicativo dá suporte à política de suporte do runtime de linguagem para atualizar pilhas existentes e desativar pilhas em fim de suporte.

  • Criar segmentação por meio de limites de isolamento para conter a violação: Aplicar segmentação de identidade. Por exemplo, implemente o RBAC (controle de acesso baseado em função) para atribuir permissões específicas com base em funções. Siga o princípio de privilégio mínimo para limitar os direitos de acesso apenas ao que é necessário. Crie também a segmentação no nível da rede. Injete aplicativos do Serviço de Aplicativo em uma rede virtual do Azure para isolamento e defina NSGs (grupos de segurança de rede) para filtrar o tráfego.

    Os planos do Serviço de Aplicativo oferecem o nível Ambiente do Serviço de Aplicativo, que fornece um grau alto de isolamento. Com o Ambiente do Serviço de Aplicativo, você obtém computação e rede dedicadas.

  • Aplicar controles de acesso em identidades: restrinja o acesso interno ao aplicativo Web e o acesso externo do aplicativo Web a outros recursos. Essa configuração aplica controles de acesso em identidades e ajuda a manter a postura de segurança geral da carga de trabalho.

    Use a ID do Microsoft Entra para todas as necessidades de autenticação e autorização. Use funções internas, como um Colaborador de plano Web, Colaborador de site e um Colaborador, leitor e proprietário genérico.

  • Aplicar controles de segurança de rede: integre seu Serviço de Aplicativo a uma VNet (rede virtual) para controlar o tráfego de saída. Use pontos de extremidade privados para controlar o tráfego de entrada e limitar o acesso ao Serviço de Aplicativo de dentro de sua VNet e desabilitar o acesso público à Internet. proteger sua rede, controlar o tráfego de entrada e saída

    Implante um WAF (firewall de aplicativo Web) para proteger contra vulnerabilidades comuns. O Gateway de Aplicativo e o Azure Front Door têm recursos de WAF integrados.

    Defina as regras de proxy reverso e as configurações de rede adequadamente para alcançar o nível desejado de segurança e controle. Por exemplo, adicione regras de NSG na sub-rede do ponto de extremidade privado para aceitar apenas o tráfego do proxy reverso.

    O tráfego de saída da aplicação para outros serviços de PaaS deve ocorrer por meio de pontos de extremidade privados. Considere colocar um componente de firewall para restringir o tráfego de saída à Internet pública. Ambas as abordagens impedem a exfiltração de dados.

    Para ter uma visão geral completa, consulte os Recursos de rede do Serviço de Aplicativo.

  • Criptografar dados: Proteja os dados em trânsito com Segurança de Camada de Transporte (TLS) de ponta a ponta. Use suas chaves gerenciadas pelo cliente para criptografia completa de dados em repouso. Para mais informações, consulte Criptografia em repouso usando chaves gerenciadas pelo cliente.

    Não use protocolos herdados, como TLS 1.0 e 1.1. Verifique se todos os aplicativos Web usam somente HTTPS e impõem o TLS 1.2 ou superior. A versão mínima padrão do TLS é 1.2. Para mais informações, consulte Visão geral do TLS do Serviço de Aplicativo.

    Todas as instâncias do Serviço de Aplicativo têm um nome de domínio padrão. Use um domínio personalizado e proteja esse domínio com certificados.

    Criptografia TLS de ponta a ponta: A Criptografia TLS de ponta a ponta está disponível nos planos do App Service Premium. Esse recurso criptografa o tráfego durante toda a transação, minimizando o risco de interceptação de tráfego.

  • Reduzir a superfície de ataque: remova as configurações padrão de que você não precisa. Por exemplo, desabilite a depuração remota, a autenticação local para sites do SCM (Gerenciador de Controle do Código-Fonte) e a autenticação básica. Desabilite protocolos não seguros, como HTTP e FTP (Protocolo de Transferência de Arquivo). Impor configurações por meio de políticas do Azure. Para obter mais informações, consulte Políticas do Azure.

    Implementar políticas restritivas de CORS (compartilhamento de recursos entre origens): use políticas de CORS restritivas em seu aplicativo Web para aceitar apenas solicitações dos domínios, cabeçalhos e outros critérios permitidos. Aplique políticas CORS com definições de políticas internas do Azure.

  • Usar identidades gerenciadas: habilite identidades gerenciadas para que o Serviço de Aplicativo acesse com segurança outros serviços do Azure sem a necessidade de gerenciar credenciais. Saiba mais sobre identidades gerenciadas.

  • Proteger os segredos do aplicativo: você precisa lidar com informações confidenciais, como chaves de API ou tokens de autenticação. Em vez de codificar esses segredos diretamente no código do aplicativo ou nos arquivos de configuração, você pode usar referências do Azure Key Vault nas configurações do aplicativo. Quando o aplicativo é iniciado, o Serviço de Aplicativo recupera automaticamente os valores secretos do Key Vault usando a identidade gerenciada do aplicativo.

  • Habilitar logs de recursos para sua aplicação: habilite os logs de recursos para sua aplicação criar trilhas de atividade abrangentes que forneçam dados valiosos durante investigações subsequentes a incidentes de segurança. Consulte as diretrizes de monitoramento de log para obter diretrizes detalhadas.

    Considere o log como parte do processo de modelagem de ameaças ao avaliar ameaças.

Recomendações

Recomendação Benefício
(Aplicativo Web) Atribuir identidades gerenciadas ao aplicativo Web. Para manter os limites de isolamento, não compartilhe ou reutilize identidades entre aplicativos.

Verifique se você tem conexão segura ao registro de contêiner caso use contêineres para a implantação.
O aplicativo recupera segredos do Key Vault para autenticar a comunicação externa do aplicativo. O Azure gerencia a identidade e não exige que você provisione ou altere segredos.

Você possui identidades distintas para controle granular. Identidades distintas facilitam a revogação se uma identidade estiver comprometida.
(Aplicativo Web) Configurar domínios personalizados para aplicações.

Desabilite HTTP e aceite apenas solicitações HTTPS.
Os domínios personalizados permitem a comunicação segura por meio de HTTPS usando o protocolo TLS (Transport Layer Security), que garante a proteção de dados confidenciais e cria a confiança do usuário.
(Aplicativo Web) avalie se a autenticação interna do Serviço de Aplicativo é o mecanismo certo para autenticar usuários que acessam sua aplicação. A autenticação interna do Serviço de Aplicativos integra-se ao Microsoft Entra ID. Esse recurso lida com a validação de token e o gerenciamento de identidade do usuário em vários provedores de entrada e dá suporte ao OpenID Connect. Com esse recurso, você não tem autorização em um nível granular e não tem um mecanismo para testar a autenticação. Ao usar esse recurso, você não precisa usar bibliotecas de autenticação no código do aplicativo, o que reduz a complexidade. O usuário já está autenticado quando uma solicitação chega ao aplicativo.
(Aplicativo Web) Configure o aplicativo para a integração à rede virtual .

Use pontos de extremidade privados para aplicativos do Serviço de Aplicativo Bloqueie todo o tráfego público.

Roteie a transferência da imagem do contêiner por meio da integração da rede virtual. Todo o tráfego de saída da aplicação passa pela rede virtual.
Obtenha os benefícios de segurança do uso de uma rede virtual do Azure. Por exemplo, o aplicativo pode acessar com segurança os recursos na rede.

Adicione um ponto de extremidade privado para ajudar a proteger sua aplicação. Os pontos de extremidade privados limitam a exposição direta à rede pública e permitem o acesso controlado por meio do proxy reverso.
(Aplicativo Web) Para implementar a proteção:
- Desabilitar a autenticação básica que usa um usuário e senha em vez da autenticação baseada no Microsoft Entra ID.
- Desative a depuração remota para que as portas de entrada não fiquem abertas.
- Habilite as políticas CORS para restringir as solicitações de entrada.
- Desabilitar protocolos, como FTP.
Não recomendamos a autenticação básica como um método de implantação segura. A ID do Microsoft Entra emprega a autenticação baseada em token OAuth 2.0, que oferece inúmeras vantagens e aprimoramentos que abordam as limitações associadas à autenticação básica.

As políticas restringem o acesso aos recursos do aplicativo, permitem apenas solicitações de domínios específicos e protegem solicitações entre regiões.
(Aplicativo Web) Sempre usar referências do Key Vault como configurações de aplicativo.
Os segredos são mantidos separados da configuração do aplicativo. As configurações do aplicativo são criptografadas em repouso. O Serviço de Aplicativo também gerencia rotações secretas.
(Serviço de Aplicativo) Habilitar o Microsoft Defender para Nuvem para o Serviço de Aplicativo. Obtenha proteção em tempo real para recursos executados em um plano do Serviço de Aplicativo. Proteja-se contra ameaças e aprimore sua postura de segurança geral.
(Serviço de Aplicativo) Habilite o log de diagnóstico e adicione instrumentação ao seu aplicativo. Os logs são enviados para contas de Armazenamento do Azure, Hubs de Eventos do Azure e Log Analytics. Para mais informações sobre os tipos de log de auditoria, consulte Tipos de log compatíveis. O registro em log captura padrões de acesso. Ele registra eventos relevantes que fornecem informações valiosas sobre como os usuários interagem com um aplicativo ou plataforma. Essas informações são cruciais para fins de responsabilidade, conformidade e segurança.

Otimização de custos

A otimização de custos se concentra na na detecção de padrões de gastos, na priorização de investimentos em áreas críticas e na otimização de outras para atender ao orçamento da organização e, ao mesmo tempo, aos requisitos comerciais.

Os princípios de design da Otimização de Custos fornecem uma estratégia de design de alto nível para atingir essas metas e fazer compensações conforme necessário no design técnico relacionado aos seus aplicativos Web e ao ambiente no qual eles são executados.

Lista de verificação de design

Inicie sua estratégia de design com base na lista de verificação de revisão de design para otimização de custos em investimentos e ajuste o design para alinhar a carga de trabalho com o orçamento alocado. Seu design deve usar os recursos corretos do Azure, monitorar investimentos e encontrar oportunidades para otimizar ao longo do tempo.

  • Estimar o custo inicial: como parte do exercício de modelagem de custos, use a calculadora de preços do Azure para avaliar os custos aproximados associados a várias camadas com base no número de instâncias que você planeja executar. Cada camada do Serviço de Aplicativo oferece diferentes opções de computação.

    Monitore continuamente o modelo de custo para acompanhar as despesas.

  • Avaliar as opções com desconto: camadas mais altas incluem instâncias de computação dedicadas. Você pode aplicar um desconto de reserva se sua carga de trabalho tiver um padrão de uso previsível e consistente. Certifique-se de analisar os dados de uso para determinar o tipo de reserva que melhor atende à sua carga de trabalho. Para obter mais informações, consulte Economizar custos com instâncias reservadas do Serviço de Aplicativo.

  • Entenda os medidores de uso: a Azure cobra uma taxa por hora, calculada proporcionalmente ao segundo, com base na camada de preços do seu plano do Serviço de Aplicativo. Os encargos aplicam-se a cada instância de expansão em seu plano, com base no tempo em que você aloca à instância da VM. Tenha cuidado com recursos de computação subutilizados que podem aumentar seus custos, graças à superalocação devido à seleção de SKU abaixo do ideal ou à configuração de escala mal configurada.

    Recursos extras do Serviço de Aplicativo, como registro de domínio personalizado e certificados personalizados, podem adicionar custos. Outros recursos, como redes virtuais para isolar sua solução ou cofres de chaves para proteger segredos de carga de trabalho, que se integram aos recursos do Serviço de Aplicativo também podem adicionar custos. Para obter mais informações, consulte Modelo de cobrança dos Serviços de Aplicativo.

  • Considere as compensações entre densidade e isolamento: você pode usar planos do Serviço de Aplicativo para hospedar vários aplicativos na mesma computação, o que economiza custos com ambientes compartilhados. Para obter mais informações, consulte Compensações.

  • Avaliar o efeito de sua estratégia de dimensionamento sobre o custo: você deve projetar, testar e configurar corretamente para escalabilidade externa e escalabilidade interna ao implementar o dimensionamento automático. Estabeleça limites máximos e mínimos precisos no dimensionamento automático.

    Inicialize proativamente o aplicativo para dimensionamento confiável. Por exemplo, não aguarde até que a CPU atinja 95% de uso. Em vez disso, acione o dimensionamento em torno de 65% para permitir tempo suficiente para que novas instâncias sejam alocadas e inicializadas durante o processo de dimensionamento. No entanto, essa estratégia pode levar à capacidade não utilizada.

    Recomendamos que você combine e balanceie mecanismos para escalar verticalmente e horizontalmente. Por exemplo, um aplicativo pode expandir por algum tempo e então escalar horizontalmente conforme necessário. Explore camadas altas que oferecem grande capacidade e uso eficiente de recursos. Com base em padrões de uso, camadas Premium mais altas geralmente são mais econômicas porque são mais capazes.

  • Otimizar os custos de ambiente: considere a camada Básica ou Gratuita para executar ambientes de pré-produção. Essas camadas são de baixo desempenho e baixo custo. Se você usar a camada Básica ou Gratuita, use a governança para impor a camada, restrinja o número de instâncias e CPUs, restrinja o dimensionamento e limite a retenção de log.

  • Implementar padrões de design: essa estratégia reduz o volume de solicitações geradas pela carga de trabalho. Considere o uso de padrões como o padrão Back-ends para Front-ends e o padrão de Agregação de Gateway, o que pode minimizar o número de solicitações e reduzir os custos.

  • Verificar regularmente os custos relacionados a dados: períodos de retenção de dados estendidos ou camadas de armazenamento caras podem levar a altos custos de armazenamento. Mais despesas podem se acumular devido ao uso de largura de banda e à retenção prolongada de dados de registro em log.

    Considere implementar o cache para minimizar os custos de transferência de dados. Comece com o cache local na memória e explore as opções de cache distribuído para reduzir o número de solicitações para o banco de dados de back-end. Considere os custos de tráfego de largura de banda associados à comunicação entre regiões se o banco de dados estiver localizado em uma região diferente.

  • Otimizar os custos de implantação: aproveite os slots de implantação para otimizar os custos. A execução do slot ocorre no mesmo ambiente de computação da instância de produção. Use-os estrategicamente para cenários como implantações azul-verde que alternam entre slots. Essa abordagem minimiza o tempo de inatividade e garante transições suaves.

    Utilize os slots de implantação com cuidado. Você pode introduzir problemas, como exceções ou vazamentos de memória, que podem afetar as instâncias existentes e as novas instâncias. Certifique-se de testar completamente as alterações. Para obter diretrizes operacionais, consulte Excelência Operacional.

Recomendações

Recomendação Benefício
(Serviço de Aplicativo) Escolher camadas gratuitas ou básicas para ambientes inferiores. Recomendamos essas camadas para uso experimental. Remova as camadas quando você não precisar mais delas. Os níveis Gratuito e Básico são econômicos em comparação com os níveis mais altos. Eles fornecem uma solução econômica para ambientes de não produção que não precisam dos recursos completos e do desempenho dos planos premium.
(Serviço de Aplicativo) Aproveite os descontos e explore os preços preferenciais para:
– Ambientes de menor nível com planos de desenvolvimento/teste.
- Reservas do Azure e Planos de Poupança do Azure para computação dedicada que você provisiona no nível Premium V3 e no Ambiente de Serviço de Aplicativo.

Use instâncias reservadas para cargas de trabalho estáveis que têm padrões de uso previsíveis.
Os planos de desenvolvimento/teste fornecem taxas reduzidas para os serviços do Azure, o que os torna econômicos para ambientes de não produção.

Use instâncias reservadas para pagar antecipadamente os recursos de computação e obter descontos significativos.
(Aplicativo Web) Monitorar custos que os recursos do Serviço de Aplicativo geram. Execute a ferramenta de análise de custos no portal do Azure.

Criar orçamentos e alertas para notificar os interessados.
Você pode identificar picos de custo, ineficiências ou despesas inesperadas no início. Essa abordagem proativa ajuda você a fornecer controles orçamentários para evitar gastos excessivos.
(Serviço de Aplicativo) Escale quando a demanda diminuir. Para escalar, defina regras de escala para reduzir o número de instâncias no Azure Monitor. Evite desperdícios e reduza despesas desnecessárias.

Excelência Operacional

A Excelência Operacional concentra-se principalmente em procedimentos para práticas de desenvolvimento, observabilidade e gerenciamento de versões.

Os princípios de design da Excelência Operacional fornecem uma estratégia de design de alto nível para atingir essas metas em relação aos requisitos operacionais da carga de trabalho.

Lista de verificação de design

Elabore sua estratégia de design baseada na lista de verificação de revisão de design para Excelência Operacional, definindo processos de observabilidade, teste e implantação relacionados a Aplicativos Web.

  • Gerenciar versões: use espaços de implantação para gerenciar versões com eficiência. Você pode implantar seu aplicativo em um slot, executar testes e validar sua funcionalidade. Após a verificação, você pode mover o aplicativo diretamente para produção. Esse processo não incorre em custos extras porque o slot é executado no mesmo ambiente de VM (máquina virtual) que a instância de produção.

    Use Troca com visualização (troca de várias fases). A Troca com visualização permite testar o aplicativo em seus slots de teste em relação às configurações de produção e também preparar o aplicativo. Depois de realizar seus testes e preparar todos os caminhos necessários, você poderá concluir a troca e o aplicativo começará a receber tráfego de produção sem precisar reiniciar.

  • Executar testes automatizados: antes de promover uma versão do aplicativo Web, teste minuciosamente seu desempenho, funcionalidade e integração com outros componentes. Use Azure Load Testing, que se integra ao Apache JMeter, uma ferramenta popular para testes de desempenho. Explore ferramentas automatizadas para outros tipos de teste, como o Fantasma para testes funcionais.

  • Automatizar implantações: use pipelines de CI/CD com Azure DevOps ou GitHub Actions para automatizar implantações e reduzir o esforço manual Implantação contínua para o Serviço de Aplicativo do Azure App.

  • Implantar unidades imutáveis: implemente o padrão de carimbos de implantação para compartimentalizar o Serviço de Aplicativo em um carimbo imutável. O Serviço de Aplicativo dá suporte ao uso de contêineres, que são inerentemente imutáveis. Considere contêineres personalizados para seu aplicativo Web do Serviço de Aplicativo.

    Cada carimbo representa uma etapa autocontida na qual é possível expandir ou reduzir. As unidades baseadas nesse carimbo são temporárias e sem estado. O design sem estado simplifica as operações e a manutenção. Essa abordagem é ideal para aplicativos críticos. Para ver um exemplo, consulte Linha de base crítica com o Serviço de Aplicativo.

    Use uma tecnologia de IaC (infraestrutura como código), como o Bicep, para criar unidades com repetibilidade e consistência.

  • Manter os ambientes de produção seguros: crie planos separados do Serviço de Aplicativo para executar ambientes de produção e pré-produção. Não faça alterações diretamente no ambiente de produção para garantir a estabilidade e a confiabilidade. Instâncias separadas permitem flexibilidade no desenvolvimento e teste antes de promover alterações na produção.

    Use ambientes baixos para explorar novos recursos e configurações de maneira isolada. Mantenha os ambientes de desenvolvimento e teste efêmeros.

  • Gerenciar certificados: para domínios personalizados, você precisa gerenciar certificados TLS.

    Tenha processos em vigor para adquirir, renovar e validar certificados. Descarregre esses processos para o Serviço de Aplicativo, se possível. Se você usar seu próprio certificado, deverá gerenciar sua renovação. Escolha uma abordagem que melhor se alinhe aos seus requisitos de segurança.

Recomendação Benefício
(Aplicativo Web) Verificar a integridade de suas instâncias e ativar investigações de integridade das instâncias.

Configure um caminho específico para lidar com solicitações de sondas de saúde.
Você pode detectar problemas prontamente e tomar as ações necessárias para manter a disponibilidade e o desempenho.
(Aplicativo Web) Habilite os logs de diagnóstico para o aplicativo e para a instância.

O registro em log frequente pode diminuir o desempenho do sistema, aumentar os custos de armazenamento e introduzir riscos de segurança se você tiver acesso não seguro aos logs. Siga estas práticas recomendadas:
– Registre o nível certo de informações.
- Definir políticas de retenção.
– Mantenha um registro de auditoria de acesso autorizado e tentativas de acesso não autorizado.
– Tratar logs como dados e aplicar controles de proteção de dados.
Os logs de diagnóstico fornecem informações valiosas sobre o comportamento do aplicativo. Monitore os padrões de tráfego e identifique anomalias.
(Aplicativo Web) Tire proveito de certificados gerenciados do Serviço de Aplicativo para descarregar o gerenciamento de certificação no Azure. O Serviço de Aplicativo lida automaticamente com processos como aquisição de certificado, verificação de certificado, renovação de certificado e importação de certificados do Key Vault. Como alternativa, carregue seu certificado no Key Vault e autorize o provedor de recursos do Serviço de Aplicativo a acessá-lo.
(Serviço de Aplicativo) Valide alterações de aplicativo no slot de preparo antes de trocá-lo pelo slot de produção. Evite tempo de inatividade e erros.

Reverta rapidamente para o último estado estável conhecido se você detectar um problema após uma troca.

Eficiência de desempenho

Eficiência de desempenho significa manter a experiência do usuário mesmo quando há um aumento na carga por meio do gerenciamento da capacidade. A estratégia inclui dimensionamento de recursos, identificação e otimização de possíveis gargalos e otimização para o desempenho de pico.

Os princípios de design de eficiência de desempenho fornecem uma estratégia de design de alto nível para atingir essas metas de capacidade em relação ao uso esperado.

Lista de verificação de design

Inicie sua estratégia de design com base na lista de verificação de revisão de design para Eficiência de Desempenho, a fim de definir uma linha de base baseada nos principais indicadores de desempenho para aplicativos Web.

  • Identificar e monitorar indicadores de desempenho: definir destinos para os principais indicadores do aplicativo, como o volume de solicitações de entrada, o tempo que o aplicativo leva para responder a solicitações, solicitações pendentes e erros em respostas HTTP. Considere os principais indicadores como parte da linha de base de desempenho da carga de trabalho.

    Capture as métricas do Serviço de Aplicativo que formam a base dos indicadores de desempenho. Colete logs para obter informações sobre o uso de recursos e atividades. Use ferramentas de APM (monitoramento de desempenho de aplicativos), como o Application Insights, para coletar e analisar dados de desempenho do aplicativo. Para mais informações, consulte Monitoramento de referência de dados do Serviço de Aplicativo.

    Inclua instrumentação em nível de código, rastreamento de transações e criação de perfil de desempenho.

  • Avaliar a capacidade: simule vários cenários de usuário para determinar a capacidade ideal necessária para lidar com o tráfego esperado. Use o Teste de Carga para entender como seu aplicativo se comporta em diferentes níveis de carga.

  • Selecione a camada certa: use a computação dedicada para cargas de trabalho de produção. As camadas Premium V3 oferecem SKUs maiores com maior capacidade de memória e CPU, mais instâncias e mais recursos, como redundância de zona. Para mais informações, consulte Nível de preço Premium V3.

  • Otimizar sua estratégia de dimensionamento: quando possível, use dimensionamento automático em vez de ajustar manualmente o número de instâncias conforme a carga do aplicativo muda. Com o dimensionamento automático, o Serviço de Aplicativo ajusta a capacidade do servidor com base em regras ou gatilhos predefinidos. Verifique se você faz testes de desempenho adequados e defina as regras certas para os gatilhos corretos.

    Se você priorizar a simplicidade durante a configuração inicial, use uma opção de dimensionamento automático que não exija que você defina regras e você só precisa definir limites.

    Tenha recursos suficientes prontamente disponíveis para garantir o desempenho ideal. Aloque os recursos adequadamente para manter metas de desempenho, como tempo de resposta ou taxa de transferência. Leve em consideração a alocação excessiva de recursos quando necessário.

    Ao definir regras de dimensionamento automático, contabilize o tempo necessário para que seu aplicativo seja inicializado. Considere essa sobrecarga ao tomar todas as decisões de dimensionamento.

  • Usar o cache: recuperar informações de um recurso que não é alterado com frequência e é caro para acessar afeta o desempenho. Consultas complexas, incluindo junções e várias pesquisas, contribuem para o tempo de execução. Execute o cache para minimizar o tempo de processamento e a latência. Armazene em cache os resultados das consultas para evitar acessos repetidos ao banco de dados ou back-end e reduzir o tempo de processamento para solicitações subsequentes.

    Para obter mais informações sobre como usar o cache local e distribuído na carga de trabalho, consulte cache.

  • Examine os antipadrões de desempenho: para garantir que o aplicativo Web seja executado e dimensionado de acordo com seus requisitos de negócios, evite os típicos antipadrões. Aqui estão alguns antipadrões que o Serviço de Aplicativo corrige.

    Antipadrão Descrição
    Front-end ocupado Tarefas com uso intensivo de recursos podem aumentar os tempos de resposta para solicitações do usuário e causar alta latência.
    Mover processos que consomem recursos significativos para um back-end separado. Use um agente de mensagens para enfileirar tarefas com uso intensivo de recursos que o back-end escolhe para processar de forma assíncrona.
    Sem cache Atenda solicitações de um cache intermediário na frente do banco de dados de back-end para reduzir a latência.
    vizinho barulhento Sistemas multilocatários compartilham recursos entre locatários. A atividade de um locatário pode ter um efeito negativo sobre o uso do sistema por outro locatário. O Ambiente do Serviço de Aplicativo fornece um ambiente totalmente isolado e dedicado para executar aplicativos do Serviço de Aplicativo.

Recomendações

Recomendação Benefício
(Serviço de Aplicativo) Habilite a configuração Always On quando os aplicativos compartilham um único plano do Serviço de Aplicativo. Os aplicativos do Serviço de Aplicativo descarregam automaticamente quando ociosos para salvar recursos. A próxima solicitação aciona uma inicialização a frio, o que pode causar tempo limite de solicitação. O aplicativo nunca é descarregado com Always On habilitado.
(Aplicativos Web) Considere usar HTTP/2 para melhorar a eficiência do protocolo dos aplicativos. Escolha HTTP/2 em vez de HTTP/1.1 porque HTTP/2 multiplexa totalmente as conexões, reutiliza as conexões para reduzir a sobrecarga e compacta os cabeçalhos para minimizar a transferência de dados.

Compensações

Talvez seja necessário fazer compensações de design se usar as abordagens nas listas de verificação dos pilares. Aqui estão alguns exemplos de vantagens e desvantagens.

densidade e isolamento

  • Maior densidade: coloca vários aplicativos no mesmo plano do Serviço de Aplicativo para minimizar os recursos. Todos os aplicativos compartilham recursos como CPU e memória, que podem economizar dinheiro e reduzir a complexidade operacional. Essa abordagem também otimiza o uso de recursos. Os aplicativos podem usar recursos ociosos de outro aplicativo se os padrões de carga forem alterados ao longo do tempo.

    Considere também as desvantagens, como a contenção de recursos. Por exemplo, picos de uso ou instabilidade de um aplicativo podem afetar o desempenho de outros aplicativos. Incidentes em um aplicativo também podem permear para outros aplicativos dentro do ambiente compartilhado, o que pode afetar a segurança. Para aplicativos críticos que exigem alta disponibilidade e desempenho, ambientes isolados como ASE (Ambiente do Serviço de Aplicativo V3) fornecem recursos dedicados, mas a um custo mais alto. Considere o uso de ambientes compartilhados para cargas de trabalho não críticas e ambientes isolados para aplicativos críticos.

  • Isolamento maior: o isolamento ajuda a evitar interferências. Essa estratégia se aplica à segurança, ao desempenho e até à segregação de ambientes de desenvolvimento, teste e produção.

    O Ambiente do Serviço de Aplicativo fornece melhor controle sobre segurança e proteção de dados, pois cada aplicativo pode ter suas próprias configurações de segurança. Seu ambiente pode conter violações porque o isolamento limita o raio de explosão. A contenção de recursos é minimizada do ponto de vista do desempenho. O isolamento permite o dimensionamento independente com base na demanda específica e no planejamento de capacidade individual.

    Como desvantagem, essa abordagem é mais cara e requer rigor operacional.

estratégia de dimensionamento confiável

Uma estratégia de dimensionamento bem definida garante que seu aplicativo possa lidar com várias cargas sem comprometer o desempenho. No entanto, há compensações em relação ao custo. As operações de dimensionamento levam tempo. Quando novos recursos são alocados, o aplicativo deve ser inicializado corretamente antes de poder processar efetivamente as solicitações. Você pode superprovisionar recursos (instâncias de prewarm) para fornecer uma rede de segurança. Sem essa capacidade extra, durante a fase de inicialização, pode haver um atraso no atendimento de solicitações, o que afeta a experiência do usuário. As operações de dimensionamento automático podem disparar cedo o suficiente para habilitar a inicialização de recursos adequada quando os clientes usam os recursos.

Como desvantagem, recursos superprovisionados custam mais. Você é cobrado por segundo para todas as instâncias, incluindo instâncias pré-aquecidas. Os níveis mais altos incluem instâncias pré-aquecidas. Avalie se os recursos com níveis mais caros valem o investimento.

Criando redundância

A redundância oferece resiliência, mas também gera custos. Os SLOs (objetivos de nível de serviço) para sua carga de trabalho determinam limites de desempenho aceitáveis. Torna-se um desperdício se a redundância exceder os requisitos de SLO. Avalie se o excesso de redundância melhora os SLOs ou adiciona complexidade desnecessária.

Considere também as desvantagens. Por exemplo, a redundância de várias regiões fornece alta disponibilidade, mas adiciona complexidade e custo devido à sincronização de dados, mecanismos de failover e comunicação entre regiões. Determine se a redundância de zona pode atender a seus Objetivos de Nível de Serviço (SLOs).

Políticas do Azure

O Azure fornece um amplo conjunto de políticas internas relacionadas ao Serviço de Aplicativo e suas dependências. Um conjunto de políticas do Azure pode auditar algumas das recomendações anteriores. Por exemplo, você pode verificar se:

  • Os controles de rede adequados estão em vigor. Por exemplo, você pode incorporar a segmentação de rede colocando o Serviço de Aplicativo na Rede Virtual do Azure por meio da injeção de rede virtual para ter maior controle sobre a configuração de rede. O aplicativo não tem pontos de extremidade públicos e se conecta aos serviços do Azure por meio de pontos de extremidade privados.

  • Os controles de identidade estão em vigor. Por exemplo, o aplicativo usa identidades gerenciadas para se autenticar em outros recursos. A autenticação interna do Serviço de Aplicativo (Autenticação Fácil) verifica as solicitações de entrada.

  • Recursos como depuração remota e autenticação básica são desabilitados, para reduzir a superfície de ataque.

Para uma governança abrangente, examine as definições incorporadas do Azure Policy e outras políticas que podem afetar a segurança da camada de computação.

Recomendações do Assistente do Azure

Assistente do Azure é um consultor de nuvem personalizado que ajuda você a seguir as práticas recomendadas para otimizar suas implantações do Azure. Aqui estão algumas recomendações que podem ajudá-lo a melhorar a confiabilidade, a segurança, a eficácia do custo, o desempenho e a excelência operacional de suas instâncias de aplicativo Web.

Próximas etapas

Considere os artigos a seguir como recursos que demonstram as recomendações realçadas neste artigo.