Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A metodologia de design crítico da missão é apoiada por cinco princípios de design chave 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.
Fiabilidade
| Princípio de design | Considerações |
|---|---|
| Design ativo/ativo | Para maximizar a disponibilidade e obter tolerância a falhas regionais, os componentes da solução devem ser distribuídos entre várias zonas de disponibilidade e regiões do Azure usando um modelo de implantação ativo/ativo sempre que possível. |
| Redução do alcance de explosão e isolamento de falhas | A falha é impossível de evitar em um ambiente de nuvem de hiperescala altamente distribuído, como o Azure. Ao antecipar falhas e impacto correlacionado, de componentes individuais a regiões inteiras do Azure, uma solução pode ser projetada e desenvolvida de maneira resiliente. |
| Observar 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 insuficientemente testado ou configuração incorreta. Para minimizar a possibilidade e o impacto de erros humanos, é vital lutar pela automação em todos os aspectos de uma solução de nuvem para melhorar a confiabilidade; teste automatizado, implantação e gerenciamento. |
| Design de 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 a 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
| 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 aumenta, mais unidades de recursos são adicionadas em paralelo em vez de aumentar o tamanho dos recursos existentes. A habilidade do sistema de lidar com aumentos esperados e inesperados de tráfego através de unidades de escala é essencial para o desempenho geral e a confiabilidade, ao reduzir o impacto de uma falha de um único 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 teste 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. |
| Estabelecer o 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 no 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 como os componentes do sistema se comportam em relação uns aos outros, permitindo, portanto, o planejamento de alocação de capacidade em todo o sistema. |
Excelência operacional
| Princípio de design | Considerações |
|---|---|
| Componentes levemente 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 versão | 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 ciclo de feedback dos desenvolvedores que implementam alterações para obter insights sobre a qualidade do código, a cobertura de teste, a resiliência, a segurança e o desempenho, algo que aumenta a produtividade dos desenvolvedores. |
| Agilidade do desenvolvedor | A automação de Integração Contínua e Implantação Contínua (CI/CD) permite o uso de ambientes de desenvolvimento de curta duração com ciclos de vida vinculados ao de um ramo de funcionalidades associado, o que promove a agilidade do desenvolvedor e impulsiona a validação o mais cedo possível dentro do ciclo de engenharia, minimizando assim o custo de engenharia de bugs. |
| Quantificar a integridade operacional | A instrumentação completa de diagnóstico 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 | O planejamento e os exercícios práticos de Continuidade de Negócios (BC) e Recuperação de Desastres (DR) são essenciais e devem ser realizados com frequência, pois os aprendizados podem melhorar iterativamente os planos e procedimentos para maximizar a resiliência em caso de tempo de inatividade não planejado. |
| Adotar melhoria operacional contínua | 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 feedback para permitir que as equipes de aplicativos entendam e resolvam lacunas de maneira iterativa. |
Segurança
| 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. |
| Modelar e testar contra possíveis ameaças | Verifique 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 | Monitorar e proteger a integridade da rede de pontos de extremidade internos e externos por meio de recursos e dispositivos de segurança, tais como firewalls ou firewalls de aplicativos Web. Use abordagens padrão do setor para proteger contra vetores de ataque comuns, como ataques de DDoS (Negação DistribuídaOf-Service), como o SlowLoris. |
| Proteger contra vulnerabilidades de nível de código | Identifique e mitigue vulnerabilidades no nível do código, como cross-site scripting ou injeção de SQL, e incorpore a correção de segurança no ciclo de vida operacional para todas as partes do código-fonte, incluindo dependências. |
| Automatizar e usar privilégios mínimos | Conduza a automação para minimizar a necessidade de interação humana e implementar privilégios mínimos no aplicativo e no plano de controle para proteger contra a exfiltração de dados e cenários de atores mal-intencionados. |
| 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 chaves e 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 têm implicações de custo claras. Para evitar o excesso de custos, não faça excesso de engenharia ou excesso de provisionamento além dos requisitos comerciais relevantes.
Além disso, há um custo adicional associado ao investimento em engenharia em conceitos fundamentais de confiabilidade, como adotar a infraestrutura como código, automação de implantação e automação de teste. Isso tem um custo em termos de tempo e esforço, que podem ser investidos em outros lugares para fornecer novas funcionalidades e recursos do aplicativo.
Próxima etapa
As áreas de design estão interconectadas, portanto, as alterações em uma área podem afetar outras. Comece com a área mais crítica para sua empresa e examine as considerações e recomendações para entender como suas escolhas criam compensações em toda a arquitetura.