En las aplicaciones modernas, la conectividad continua es clave, especialmente para las aplicaciones móviles que dependen de servicios backend. En este blog, veremos una solución basada en Python que supervisa el estado de los servidores de servicios de aplicaciones y, si es necesario, conmuta automáticamente a un servidor secundario. Este código de ejemplo utiliza comprobaciones de estado HTTP y puntos finales de conexión WebSocket para garantizar que la aplicación siempre se conecte a un servicio en buen estado.

Visión general

La solución implica dos tipos de puntos finales:

    1. URL de chequeo
      • Estos puntos finales (por ejemplo https://.../_ping) se sondean mediante HTTP CABEZA peticiones.
      • Determinan si el servidor de servicios de aplicaciones está en buen estado.
    2. Puntos finales de conexión
      • Se trata de las direcciones URL de WebSocket (p. ej, wss://.../primary) que tu aplicación utiliza para interactuar con el backend.
      • El punto final de conexión activo se actualiza en función de los resultados de la comprobación de estado.

Si la comprobación de estado del servidor primario falla consecutivamente, la lógica de conmutación por error cambiará la conexión de la aplicación al servidor secundario.

El código en detalle

A continuación se muestra el código completo con comentarios en línea y explicaciones detalladas:

Puntos técnicos clave

    • Comprobaciones de estado de los servidores App Service:
      El código separa el puntos finales del chequeo (utilizado para la supervisión) del puntos finales de conexión (utilizado por su aplicación). Esto le permite comprobar el estado del servidor de forma independiente mientras mantiene un punto final de conexión estable.
    • Solicitudes HTTP HEAD:
      Utilizando CABEZA solicitudes a la/_ping minimiza la transferencia de datos al tiempo que proporciona códigos de estado y cabeceras para el diagnóstico.
    • Hilo de fondo:
      En chequeo_trabajador se ejecuta en su propio subproceso, lo que permite una supervisión continua sin bloquear el subproceso principal de la aplicación.
    • Lógica de conmutación por error:
      • Un contador (fracasos_consecutivos) realiza un seguimiento de los fallos consecutivos.
      • Si el recuento supera un umbral establecido (9 fallos), el script intenta una conmutación por error comprobando el estado del servidor alternativo.
      • Tras una comprobación de estado satisfactoria en el servidor secundario, se actualiza el punto final de conexión activo.
    • Registro:
      El registro detallado proporciona información sobre el proceso de comprobación de estado, incluidos el estado de respuesta HTTP, las cabeceras y los eventos de conmutación por error. Esto facilita la resolución de problemas y la supervisión.

Adaptación a su aplicación

    • Puedes traducir y adaptar fácilmente este código a tu lenguaje de programación preferido, como Swift y Kotlin, para adaptarlo a las necesidades de tu aplicación.
    • Puede integrar esta secuencia de comandos o lógica en su código móvil (iOS/Android) o un servicio backend que actualiza el activo punto final.
    • Si utiliza iOS o Android, tenga en cuenta con qué frecuencia y dónde ejecuta este código. Por ejemplo, las tareas en segundo plano o las notificaciones push pueden activar comprobaciones de estado en un contexto móvil.
    • Si usted tiene una arquitectura de microservicios, puede ejecutar esta lógica de conmutación por error en un pequeño servicio que expone un archivo URL activa actual a las aplicaciones móviles, para que siempre se conecten al punto final de WSS correcto.

Conclusión

Este código de ejemplo proporciona un mecanismo sencillo pero potente para garantizar la alta disponibilidad de las aplicaciones mediante la conmutación automática a un servidor de copia de seguridad cuando el servidor primario deja de estar accesible. Al separar las comprobaciones de estado de los puntos finales de conexión, la aplicación garantiza que siempre se conecta a un servidor en buen estado a través de WebSocket.

En un entorno de producción, es posible que tenga que adaptar y ampliar la lógica para adaptarla a sus requisitos específicos, las condiciones de la red y las políticas de seguridad.

Implementar esta lógica en su aplicación móvil o servicio backend puede mejorar enormemente el tiempo de actividad y la resistencia, garantizando que sus usuarios sigan conectados incluso durante interrupciones inesperadas del servicio.

 

Autor

Publicado por Nishant Bhatia - Arquitecto de la nube

Dejar una respuesta