Tengo una pila con 10 contenedores de aplicaciones con frontend nginx. Mientras implemento nuevas imágenes de contenedores de aplicaciones en la pila, veo ~ 1-2% de solicitudes fallidas si ejecuto una prueba de apachebenchmark o gatling en su contra. Alrededor de 2 solicitudes fallan si envío ~100 solicitudes por segundo durante la implementación.
Al revisar los registros, parece que la diferencia es solo ~ 1-2 ms para la falla. Nginx envía la solicitud y el enjambre retira el contenedor de la aplicación y nginx da el error 502.
Registro de errores (ver el tiempo de respuesta - 0.002) -
23 Mar 2017 11:07:35.047 192.168.50.68 - - [23/Mar/2017:05:37:34 +0000] "GET http://dev-hapdocker-01/feeds HTTP/1.1" 502 173 "-" "-" 0.002- ContextSospecho que esto puede ser un problema si su máquina es más lenta.
Avísame si me estoy perdiendo algo. Solo tengo curiosidad por saber cómo se hace el diseño para el modo de enjambre durante las actualizaciones o implementaciones continuas, ¿dicen que no hay tiempo de inactividad? (He habilitado todos los controles de salud) .
Hacemos esto con DotNet Core, pero significa mucho trabajo en ambos extremos (giggity). Debe asegurarse de que su imagen esté lista para lanzarse en el momento en que se crea una instancia. En un lenguaje compilado, querrá asegurarse de que todas las operaciones de compilación se realicen antes de que se cree una instancia del contenedor, es decir, en la etapa de compilación.
Esto significa que cada vez que el servicio actualiza la imagen, básicamente se ejecuta en ese momento. Lo siguiente que debe considerar es agregar el indicador de retraso de actualización a la declaración de actualización de su servicio.
Si actualiza el servicio docker --image new/image:version --update-delay 10s,
El servicio reconstruirá uno de los contenedores en el servicio, pero esperará 10 segundos antes de pasar al siguiente. Se necesita un poco de planificación, y siempre tendría un balanceador de carga de aplicaciones frente a los hosts de enjambre, pero lo manejamos sin ningún problema.