En realidad no es tan difícil y hay varias formas de lograr lo que está pidiendo.
1. Actualización de tiempo de inactividad cero a nivel de aplicación
Consideremos que su aplicación se está ejecutando y, por lo tanto, escucha en un puerto, aceptando conexiones de red. Ahora que desea actualizar la aplicación, le dice a su programa que no acepte más conexiones (deje de escuchar en ese puerto) pero que siga ejecutándose. Al mismo tiempo, comienza su proceso actualizado e inmediatamente comienza a escuchar en el mismo puerto que la aplicación anterior. (Hay herramientas que permiten que su nueva aplicación “espere” para escuchar en ese puerto y, por lo tanto, siempre habrá un proceso de escucha: jbenet / go-reuseport) Mantendrá su aplicación anterior en funcionamiento hasta que no haya más conexiones abiertas o Decides matarlo. Al final, su aplicación tuvo cero tiempo de inactividad.
- ¿Cuál es el siguiente paso en la evolución de Internet y las aplicaciones web? ¿Qué va a ser la Web 3.0?
- ¿Cuáles son los consejos para un mejor desarrollo de aplicaciones web en 2017?
- Ruby / Rails vs Python / Flask: ¿cuál es el mejor para crear una aplicación web de visualización de datos?
- Cómo implementar una aplicación web en una VPC de AWS
- ¿Cuáles son algunos buenos sistemas personalizados de pedidos de alimentos en línea?
2. Otra opción es utilizar el equilibrio de carga y la alta disponibilidad.
Digamos que tenemos un equilibrador de carga y las instancias de la aplicación detrás. Primero le decimos al equilibrador de carga que deje de distribuir el tráfico a la instancia uno. Espere hasta que todas las conexiones abiertas a la instancia uno estén cerradas. Ciérrelo, actualícelo, reinícielo. Si se está ejecutando, dígale a LB que dirija el tráfico hacia él nuevamente. Repita para las tres instancias, hecho.