Exercício: Adicionar verificações de integridade do aplicativo Web
A Contoso Shoes precisa verificar a integridade do aplicativo Web no nível da API e também de suas dependências. Você deseja implementar um ponto de extremidade de verificação de integridade dedicado no aplicativo, que relatará o status de integridade da API em intervalos regulares.
Estado atual e problema
No design atual, o aplicativo registra erros quando há problemas de runtime no código da API ou falhas nas chamadas para serviços dependentes, como consultas de banco de dados com falha. Essa abordagem é útil na solução de problemas após a ocorrência de um incidente.
No entanto, a abordagem não é proativa. O Serviço de Aplicativo do Azure e as ferramentas de monitoramento externas não têm como verificar o status de integridade do próprio aplicativo. Essa defasagem afeta muitos casos de uso, como a distribuição da carga. A implementação atual depende exclusivamente do melhor esforço do plano do Serviço de Aplicativo para distribuir o tráfego uniformemente entre as instâncias sem nunca verificar a integridade do aplicativo. Em um incidente relatado, o tráfego foi roteado para instâncias do Serviço de Aplicativo não íntegras, resultando em solicitações com falha.
Especificação
Sua tarefa é criar o serviço de integridade dedicado como uma extensão para o código já implantado.
Introduza uma API de verificação de integridade no aplicativo. A API deve verificar o status de integridade do aplicativo e suas dependências e retornar uma indicação de status. Por exemplo, periodicamente, ela deve verificar as operações de leitura e gravação no Azure Cosmos DB. Implemente essas funções como investigações separadas para que as leituras e gravações sejam verificadas independentemente.
Dica
Estenda a verificação de integridade para serviços não funcionais, como o Azure Key Vault e o Registro de Contêiner do Azure. Essa etapa é importante porque, se esses serviços sofrerem uma interrupção, você poderá notar um impacto na capacidade de expansão ou inicialização de uma instância do Serviço de Aplicativo.
O ponto de extremidade da API de verificação de integridade deve ser chamado com frequência, por diversas fontes, e não deve prejudicar o desempenho da API. Por exemplo, o plano do Serviço de Aplicativo do Azure deve enviar solicitações para um ponto de extremidade duas vezes por minuto e tomar decisões informadas sobre para quais instâncias do Serviço de Aplicativo distribuir o tráfego.
Otimize o desempenho da API de verificação de integridade armazenando os resultados em cache na memória por 10 segundos. Nem toda consulta ao ponto de extremidade de verificação de integridade deve resultar em uma chamada de back-end. Algumas dessas respostas podem ser entregues do cache.
Disponibilize os dados de verificação de integridade no Azure Monitor para análises futuras.
Abordagem recomendada
Para começar o design, recomendamos a abordagem a seguir:
1 – Verificações de integridade
Todas as consultas enviadas pela API de verificação de integridade devem ser realizadas de maneira assíncrona e em paralelo. Projete verificações de integridade em componentes críticos, como o banco de dados. A API deve verificar periodicamente as operações de leitura e gravação. Implemente essas funções como investigações separadas para que as leituras e gravações sejam verificadas independentemente.
Use solicitações que imitem o comportamento real do aplicativo sem sobrecarregar os serviços somente com as investigações de integridade. Para também testar as solicitações de gravação, você precisa remover os dados de teste com eficiência a fim de que não sejam misturados com os dados reais do usuário.
2 – Padrão de cache
Para evitar a sobrecarga dos serviços downstream com verificações de integridade, a API de verificação de integridade deve armazenar em cache os resultados por um número configurável de segundos. Pense em possíveis maneiras de conseguir isso.
Verificar seu trabalho
Veja um exemplo de um Serviço de Integridade de Aplicativo. Você cobriu todos os aspectos do projeto?
- O ponto de extremidade de verificação de integridade é compatível com o recurso de verificação de integridade do Serviço de Aplicativo do Azure?
- Você incluiu verificações de dependências de runtime? O que você usou como proxy/teste?
- Leitura/gravação do Cosmos DB
- API de terceiros
- Você armazenou em cache os resultados da verificação de integridade para reduzir a sobrecarga de desempenho?
- Você registrou eventos em suas verificações de integridade? Observou os sucessos e as falhas?
- Você aplicou a amostragem de log do Azure Application Insights aos logs de verificação de integridade?