Compartilhar via


Princípios de design de uma carga de trabalho crítica

A metodologia de design crítico é apoiada por cinco princípios de design fundamentais que servem como uma bússola para decisões de design subsequentes nas áreas de design críticas. É altamente recomendável que você se familiarize com esses princípios para entender melhor seu impacto e as compensações associadas à não adesão.

Importante

Este artigo faz parte da série de cargas de trabalho críticas do Azure Well-Architected . Se você não estiver familiarizado com esta série, recomendamos que comece com o que é uma carga de trabalho crítica?

Princípios de design críticos

Esses princípios de design críticos ressoam e estendem os pilares de qualidade do Azure Well-Architected Framework – Confiabilidade, Segurança, Otimização de Custos, Excelência Operacional e Eficiência de Desempenho.

Confiabilidade

Confiabilidade máxima – busca fundamental da solução mais confiável, garantindo que as compensações sejam compreendidas corretamente.

Princípio de design Considerações
Design ativo/ativo Para maximizar a disponibilidade e atingir a tolerância a falhas regionais, os componentes da solução devem ser distribuídos entre várias regiões do Zonas de Disponibilidade e do Azure usando um modelo de implantação ativo/ativo sempre que possível.
Redução de raio de explosão e isolamento de falha A falha é impossível de evitar em um ambiente de nuvem multilocatário altamente distribuído, como o Azure. Antecipando falhas e impacto correlacionado, de componentes individuais a regiões inteiras do Azure, uma solução pode ser projetada e desenvolvida de maneira resiliente.
Observe a integridade do aplicativo Antes que os problemas que afetam a confiabilidade do aplicativo possam ser mitigados, eles devem primeiro ser detectados e compreendidos. Ao monitorar a operação de um aplicativo em relação a um estado íntegro conhecido, torna-se possível detectar ou até mesmo prever problemas de confiabilidade, permitindo que medidas corretivas rápidas sejam tomadas.
Impulsionar a automação Uma das principais causas do tempo de inatividade do aplicativo é o erro humano, seja devido à implantação de software testado insuficientemente ou configuração incorreta. Para minimizar a possibilidade e o impacto dos erros humanos, é vital buscar a automação em todos os aspectos de uma solução de nuvem para melhorar a confiabilidade; teste automatizado, implantação e gerenciamento.
Design para autorrecuperação A autorrecuperação descreve a capacidade de um sistema de lidar com falhas automaticamente por meio de protocolos de correção predefinidos conectados aos modos de falha dentro da solução. É um conceito avançado que requer um alto nível de maturidade do sistema com monitoramento e automação, mas deve ser uma aspiração desde o início para maximizar a confiabilidade.
Prevenção de complexidade Evite complexidade desnecessária ao projetar a solução e todos os processos operacionais para gerar eficiências de confiabilidade e gerenciamento, minimizando a probabilidade de falhas.

Eficiência de desempenho

Desempenho e escalabilidade sustentáveis – design para escalabilidade em toda a solução de ponta a ponta sem gargalos de desempenho.

Princípio de design Considerações
Design para expansão A expansão é um conceito que se concentra na capacidade de um sistema de responder à demanda por meio do crescimento horizontal. Isso significa que, à medida que o tráfego cresce, mais unidades de recursos são adicionadas em paralelo em vez de aumentar o tamanho dos recursos existentes. Uma capacidade de sistemas de lidar com o tráfego esperado e inesperado aumenta por meio de unidades de escala é essencial para o desempenho geral e a confiabilidade, reduzindo ainda mais o impacto de uma única falha de recurso.
Automação para hiperescala As operações de escala em toda a solução devem ser totalmente automatizadas para minimizar o impacto de desempenho e disponibilidade de aumentos inesperados ou esperados no tráfego, garantindo que o tempo necessário para realizar operações de escala seja compreendido e alinhado com um modelo para a integridade do aplicativo.
Validação e testes contínuos Os testes automatizados devem ser executados em processos de CI/CD para impulsionar a validação contínua para cada alteração de aplicativo. O teste de carga em uma linha de base de desempenho com experimentação de caos sincronizada deve ser incluído para validar limites, destinos e suposições existentes, além de ajudar a identificar rapidamente os riscos de resiliência e disponibilidade. Esses testes devem ser realizados em ambientes de preparo e teste, mas também opcionalmente em ambientes de desenvolvimento. Também pode ser benéfico executar um subconjunto de testes no ambiente de produção, especialmente em conjunto com um modelo de implantação azul/verde para validar novos selos de implantação antes de receber o tráfego de produção.
Reduzir a sobrecarga com serviços de computação gerenciados O uso de serviços de computação gerenciados e arquiteturas em contêineres reduz significativamente a sobrecarga administrativa e operacional contínua de projetar, operar e dimensionar aplicativos mudando a implantação e a manutenção da infraestrutura para o provedor de serviços gerenciados.
Desempenho da linha de base e identificar gargalos O teste de desempenho com telemetria detalhada de cada componente do sistema permite a identificação de gargalos dentro do sistema, incluindo componentes que precisam ser dimensionados em relação a outros componentes, e essas informações devem ser incorporadas em um modelo de capacidade.
Capacidade do modelo Um modelo de capacidade permite o planejamento de níveis de escala de recursos para um determinado perfil de carga e, além disso, expõe o desempenho dos componentes do sistema em relação uns aos outros, permitindo, portanto, o planejamento de alocação de capacidade em todo o sistema.

Excelência operacional

Operações por design – projetadas para durar com gerenciamento operacional robusto e assertivo.

Princípio de design Considerações
Componentes flexívelmente acoplados O acoplamento flexível permite testes, implantações e atualizações independentes e sob demanda para componentes do aplicativo, minimizando as dependências entre equipes para suporte, serviços, recursos ou aprovações.
Automatizar processos de build e lançamento Processos de build e versão totalmente automatizados reduzem o atrito e aumentam a velocidade de implantação de atualizações, trazendo repetibilidade e consistência entre ambientes. A automação reduz o loop de comentários de desenvolvedores que efetuam push de alterações para obter insights sobre qualidade do código, cobertura de teste, resiliência, segurança e desempenho, o que aumenta a produtividade do desenvolvedor.
Agilidade do desenvolvedor A automação de CI/CD (integração contínua e implantação contínua) permite o uso de ambientes de desenvolvimento de curta duração com ciclos de vida vinculados ao de uma branch de recurso associada, o que promove a agilidade do desenvolvedor e impulsiona a validação o mais cedo possível dentro do ciclo de engenharia para minimizar o custo de engenharia de bugs.
Quantificar a integridade operacional A instrumentação de diagnóstico completa de todos os componentes e recursos permite a observabilidade contínua de logs, métricas e rastreamentos, mas também facilita a modelagem de integridade para quantificar a integridade do aplicativo no contexto para requisitos de disponibilidade e desempenho.
Testar recuperação e falha na prática As análises de planejamento e prática de BC (Continuidade dos Negócios) e recuperação de desastres (DR) são essenciais e devem ser realizadas com frequência, pois os aprendizados podem melhorar iterativamente planos e procedimentos para maximizar a resiliência em caso de tempo de inatividade não planejado.
Adotar o aprimoramento operacional contínuo Priorize a melhoria de rotina do sistema e da experiência do usuário, usando um modelo de integridade para entender e medir a eficiência operacional com mecanismos de comentários para permitir que as equipes de aplicativos entendam e resolvam lacunas de maneira iterativa.

Segurança

Sempre seguro – projete a segurança de ponta a ponta para manter a estabilidade do aplicativo e garantir a disponibilidade.

Princípio de design Considerações
Monitorar a segurança de toda a solução e planejar respostas a incidentes Correlacionar eventos de segurança e auditoria para modelar a integridade do aplicativo e identificar ameaças ativas. Estabeleça procedimentos automatizados e manuais para responder a incidentes usando ferramentas de SIEM (Gerenciamento de Eventos e Informações de Segurança) para acompanhamento.
Modele e teste contra ameaças potenciais Garanta a proteção de recursos apropriada e estabeleça procedimentos para identificar e atenuar ameaças conhecidas, usando testes de penetração para verificar a mitigação de ameaças, bem como a análise de código estático e a verificação de código.
Identificar e proteger pontos de extremidade Monitore e proteja a integridade de rede de pontos de extremidade internos e externos por meio de recursos de segurança e dispositivos, como firewalls ou firewalls de aplicativo Web. Use abordagens padrão do setor para proteger contra vetores de ataque comuns, como ataques de DDoS (negação de serviço distribuído), como SlowLoris.
Proteger contra vulnerabilidades no nível do código Identifique e reduza vulnerabilidades no nível do código, como script entre sites ou injeção de SQL, e incorpore a aplicação de patch de segurança em ciclos de vida operacionais para todas as partes da base de código, incluindo dependências.
Automatizar e usar privilégios mínimos Conduza a automação para minimizar a necessidade de interação humana e implemente privilégios mínimos no aplicativo e no plano de controle para proteger contra cenários de exfiltração de dados e de ator mal-intencionado.
Classificar e criptografar dados Classifique os dados de acordo com o risco e aplique a criptografia padrão do setor em repouso e em trânsito, garantindo que as chaves e os certificados sejam armazenados com segurança e gerenciados corretamente.

Otimização de custos

Há compensações de custos óbvias associadas à introdução de maior confiabilidade, que devem ser cuidadosamente consideradas no contexto dos requisitos de carga de trabalho.

Maximizar a confiabilidade pode afetar o custo financeiro geral da solução. Por exemplo, a duplicação de recursos e a distribuição de recursos entre regiões para obter alta disponibilidade tem implicações de custo claras. Para evitar custos excessivos, não faça excesso de engenharia ou excesso de provisionamento além dos requisitos de negócios relevantes.

Além disso, há um custo adicional associado ao investimento em engenharia em conceitos fundamentais de confiabilidade, como a adoção da infraestrutura como código, automação de implantação e engenharia de caos. Isso tem um custo em termos de tempo e esforço, que podem ser investidos em outro lugar para fornecer novas funcionalidades e recursos do aplicativo.

Design nativo de nuvem

  • Serviços gerenciados nativos do Azure – os serviços gerenciados nativos do Azure são priorizados devido à menor sobrecarga administrativa e operacional, bem como à integração rígida com a configuração e a instrumentação consistentes na pilha de aplicativos.

  • Alinhamento de roteiro – incorpore recursos de serviço do Azure novos e aprimorados à medida que eles se tornam GA (Disponibilidade Geral) para se manterem próximos da borda superior do Azure.

  • Adotar recursos de visualização e atenuar lacunas conhecidas – embora os serviços ga (disponibilidade geral) sejam priorizados para dar suporte, as visualizações de serviço do Azure são exploradas ativamente para rápida incorporação, fornecendo comentários técnicos e acionáveis aos grupos de produtos do Azure para resolver lacunas.

  • Alinhamento da zona de destino do Azure – implantável em uma zona de destino do Azure e alinhado à metodologia de design da zona de destino do Azure, mas também totalmente funcional e implantável em um ambiente nu fora de uma zona de destino.

Próxima etapa

Examine as preocupações transversais associadas a cargas de trabalho críticas.