Ejercicio: Adición de comprobaciones de estado de la aplicación web

Completado

Contoso Shoes necesita una manera de comprobar el estado de la aplicación web en el nivel de API y también sus dependencias. Nuestro objetivo es implementar en la aplicación un punto de conexión de comprobación de estado dedicado que avise del estado de mantenimiento de la API a intervalos regulares.

Estado actual y problema

En el diseño actual, la aplicación registra errores cuando hay problemas en tiempo de ejecución en el código de API o las llamadas a servicios dependientes generan errores, como las consultas de base de datos con errores. Este enfoque es útil para solucionar problemas después de que se haya producido un incidente,

pero no es proactivo. Azure App Service y las herramientas de supervisión externas no tienen forma de comprobar el estado de mantenimiento de la aplicación en sí. Esta carencia afecta a muchos casos de uso, por ejemplo, cómo se distribuye una carga. La implementación actual se basa únicamente en el mejor esfuerzo del plan de App Service para distribuir el tráfico uniformemente entre instancias, sin comprobar nunca el estado de la aplicación. Si se notificaba un incidente, el tráfico se enrutaba a instancias App Service en un estado incorrecto, lo que generaba solicitudes con errores.

Especificación

Compile el servicio de mantenimiento dedicado como una extensión en el código ya implementado.

  • Incluya una API de comprobación de estado en la aplicación. La API debe comprobar el estado de mantenimiento de la aplicación y sus dependencias y devolver una indicación del estado. Por ejemplo, la API debe comprobar periódicamente las operaciones de lectura y escritura en Azure Cosmos DB. Implemente esas funciones como sondeos independientes para que las lecturas y escrituras se comprueben de manera independiente.

    Sugerencia

    Amplíe la comprobación de estado a servicios no funcionales, como Azure Key Vault y Azure Container Registry. Este paso es importante, porque si esos servicios experimentan una interrupción, se puede producir un impacto en la capacidad para escalar horizontalmente o para soportar el reinicio de una instancia de App Service.

  • Se debe llamar con frecuencia al punto de conexión de la API de comprobación de estado a través de varios orígenes, y esto no debe degradar el rendimiento de la API. Por ejemplo, el plan de Azure App Service debe enviar solicitudes a un punto de conexión dos veces cada minuto y tomar decisiones fundamentadas sobre las instancias de App Service a las que distribuir el tráfico.

  • Optimice el rendimiento de la API de comprobación de estado almacenando en caché los resultados en la memoria durante 10 segundos. No todas las consultas al punto de conexión de comprobación de estado deben dar lugar a una llamada al back-end. Algunas de esas respuestas se pueden atender desde la memoria caché.

  • Haga que los datos de comprobación de estado estén disponibles en Azure Monitor para análisis futuros.

Para empezar con el diseño, se recomienda este enfoque.

1: Comprobaciones de mantenimiento

Todas las consultas enviadas por la API de comprobación de estado se deben realizar de forma asincrónica y en paralelo. Diseñe comprobaciones de estado de los componentes críticos, como la base de datos. La API debe comprobar periódicamente las operaciones de lectura y escritura. Implemente esas funciones como sondeos independientes para que las lecturas y escrituras se comprueben de manera independiente.

Use solicitudes que imiten el comportamiento real de la aplicación sin poner demasiada carga en los servicios, solo desde los sondeos de estado. Para probar también las solicitudes de escritura, debe diseñar una manera de quitar los datos de prueba de forma eficaz para que no se mezclen con los datos de usuario reales.

2: Almacenamiento en caché del patrón

Para evitar sobrecargar los servicios de bajada con comprobaciones de estado, la API de comprobación de estado debe almacenar en caché los resultados durante un número de segundos configurable. Piense en las posibles formas de lograrlo.

Comprobar el trabajo

Este es un ejemplo de servicio de mantenimiento de la aplicación. ¿Cubre el diseño todos los aspectos?

  • ¿El punto de conexión de comprobación de estado es compatible con la característica de comprobación de estado de Azure App Service?
  • ¿Ha incluido comprobaciones de las dependencias en tiempo de ejecución? ¿Qué ha usado como proxy/prueba?
    • Lectura y escritura de Cosmos DB
    • API de terceros
  • ¿Ha almacenado en caché los resultados de la comprobación de estado para reducir la sobrecarga de rendimiento?
  • ¿Ha registrado eventos en las comprobaciones de estado? ¿Ha anotado los procesos correctos y los que han generado errores?
  • ¿Ha aplicado el muestreo de registros de Azure Application Insights a los registros de comprobación de estado?

Prueba de conocimientos

1.

¿Por qué se ha implementado el almacenamiento en caché en el punto de conexión de mantenimiento?

2.

Nuestra API está protegida por la autenticación de App Service. ¿Funcionará la comprobación de estado de App Service con el punto de conexión de la API de comprobación de estado?