Al actualizar una aplicación en línea, debe garantizar la continuidad del negocio durante el periodo en que la aplicación se detiene y se reinicia. Si desea desplegar, detener, revertir, reducir o restablecer una aplicación, configure la función de apagado controlado para asegurar que la aplicación se cierre sin afectar su negocio. Este tema describe las consideraciones y beneficios de usar el apagado controlado, así como el procedimiento para utilizar esta función en la consola de Microservices Engine (MSE).
Requisitos previos
Microservices Governance está activado. Para más información, consulte Activate Microservices Governance.
Microservices Governance está habilitado para las aplicaciones de microservices en su clúster de Container Service for Kubernetes (ACK). Para más información, consulte Enable Microservices Governance for microservice applications in an ACK cluster.
Notas de uso
Si su aplicación solo necesita acceder a MSE, la función de apagado controlado se habilita automáticamente. Esto garantiza que la aplicación ascendente pueda invocar a la aplicación sin interrupciones del servicio cuando esta se apaga. No es necesario configurar ajustes adicionales en la consola de MSE. Además, las funciones de inicio y apagado controlados de MSE proporcionan observability que le ayuda a determinar si una aplicación se apagó correctamente.
Microservices Governance proporcionado por MSE no admite el apagado controlado de las siguientes aplicaciones:
Aplicaciones que no son WebFlux o Spring MVC.
Aplicaciones proveedoras descendentes cuyas aplicaciones consumidoras no son de microservices.
Aplicaciones que no son Java.
Aplicaciones consumidoras y proveedoras para las cuales Microservices Governance no está habilitado.
Debe establecer el parámetro terminationGracePeriodSeconds en un valor mayor a 30 en la consola de ACK. Se recomienda establecer este parámetro en 90.
Contexto
Las solicitudes de servicio de las aplicaciones consumidoras se ven inevitablemente afectadas mientras las aplicaciones proveedoras se detienen y reinician. La solución más segura y confiable consiste en actualizar la aplicación cuando no hay solicitudes de servicio. Sin embargo, estas persisten incluso cuando la aplicación se apaga.
Una solución tradicional consiste en eliminar manualmente el tráfico, detener la aplicación, actualizarla y luego reiniciarla. Si utiliza este método para actualizar su aplicación, la continuidad del negocio no se ve afectada.
El apagado controlado es un mecanismo automatizado en el nivel de contenedor o framework. Elimina automáticamente el tráfico y procesa las solicitudes recibidas antes de actualizar una aplicación. Este mecanismo hace que el proceso de actualización sea imperceptible para su negocio y mejora significativamente la eficiencia de operaciones y mantenimiento durante la actualización de una aplicación.
Beneficios
Si utiliza la solución de apagado controlado de Spring Cloud de código abierto, las aplicaciones pueden apagarse de forma controlada mediante un shutdown hook, Spring Boot Actuator o Ribbon. Esta solución requiere esfuerzo de desarrollo adicional y puede provocar pérdida de tráfico en algunos registros durante un breve periodo.
Si utiliza la solución de apagado controlado de Dubbo de código abierto, puede usar shutdown hooks y QoS para apagar las aplicaciones de forma controlada. Esto no solo requiere esfuerzo de desarrollo adicional, sino que también impone requisitos de versión para las aplicaciones Dubbo. Además, aún existen problemas conocidos, lo cual afecta negativamente el uso de las aplicaciones.
MSE Microservices Governance integra la función de apagado controlado en el proceso de publicación de aplicaciones. De este modo, las aplicaciones se apagan de forma controlada cuando usted detiene, despliega, revierte, reduce o restablece aplicaciones.
-
En comparación con la solución de apagado controlado de Spring Cloud de código abierto, la función de apagado controlado de MSE Microservices Governance ofrece las ventajas descritas en la siguiente tabla.
Elemento
Spring Cloud de código abierto
MSE Microservices Governance
Versión
Cuando invoca ServiceRegistryEndpoint, debe usar Spring Boot Actuator y actualizarlo a la versión compatible con la versión de Spring Cloud.
MSE Microservices Governance es compatible con Spring Cloud Dalston o posterior. No es necesario realizar ninguna modificación.
Registros de servicio y pérdida de tráfico
Spring Cloud de código abierto depende de registros que pueden causar pérdida de tráfico.
Si se utilizan registros ZooKeeper, no hay pérdida de tráfico.
Si se utilizan registros Eureka, se produce pérdida de tráfico de hasta 3 segundos.
Si se utilizan registros Nacos, puede producirse pérdida de tráfico de hasta 10 segundos debido a la caché en los clientes.
MSE Microservices Governance no depende de registros. No se produce pérdida de tráfico.
Escenario
Si desea apagar una aplicación desplegada en una instancia de Elastic Compute Service (ECS), debe consultar los detalles de cambio de la aplicación en la consola de MSE. Si desea apagar una aplicación desplegada en un clúster de Kubernetes, puede usar la interfaz preStop. Sin embargo, solo puede configurar una acción para dicha interfaz.
Puede apagar de forma controlada aplicaciones desplegadas en instancias ECS y en clústeres de Kubernetes. Las operaciones y configuraciones de las aplicaciones no se ven afectadas.
Caché en los clientes
Debe configurar un intervalo de tiempo adecuado para que Ribbon actualice la caché en los clientes. Si el intervalo es excesivamente grande, se produce pérdida de tráfico al apagar una aplicación. Si el intervalo es excesivamente pequeño, se afecta el rendimiento del servicio.
MSE Microservices Governance proporciona un mecanismo mejorado para que Ribbon actualice la caché durante el apagado de la aplicación. Este mecanismo permite que MSE Microservices Governance actualice automáticamente la caché mediante un método de respuesta reactiva.
-
En comparación con la solución de apagado controlado de Dubbo de código abierto, la función de apagado controlado de MSE Microservices Governance ofrece las ventajas descritas en la siguiente tabla.
NotaAntes de configurar la función de apagado controlado de MSE Microservices Governance para sus aplicaciones, debe habilitar MSE Microservices Governance tanto para las aplicaciones consumidoras como para las proveedoras.
Elemento
Dubbo de código abierto
MSE Microservices Governance
Correcciones de problemas de concurrencia causados porque el método unexport de los registros no usa variables atómicas
No compatible en 2.5.3 o anterior
Compatible
Notificación inversa
No compatible en 2.5.3 o anterior
Compatible
Espera de solicitudes en tránsito por parte de los clientes
No compatible en 2.5.3 o anterior
Compatible
qos offline
Compatible en 2.5.8 a 2.6.2 y posteriores
Compatible
Activación de shutdown hooks de Dubbo y Spring Cloud
Compatible en Apache Dubbo 2.7.3 y posteriores
Compatible
Eventos de apagado
Compatible en Apache Dubbo 2.7.3 y posteriores
Compatible
Espera del servidor
No compatible
Compatible
Entrega anticipada de eventos ReadOnly
No compatible
Compatible
Habilitar la notificación proactiva de apagado controlado
Inicie sesión en la consola de MSE y seleccione una región en la barra de navegación superior.
En el panel de navegación izquierdo, elija . En la página que aparece, haga clic en la tarjeta de recurso de la aplicación que desea gestionar.
En la página de detalles de la aplicación, haga clic en Traffic management en el panel de navegación izquierdo y haga clic en la pestaña Graceful Start/Shutdown.
-
En la sección Graceful Shutdown, active el interruptor Proactive Notification. En el mensaje Prompt message, haga clic en OK.
Una vez habilitada la función de notificación proactiva, se envía una notificación a la aplicación consumidora cuando se apaga una aplicación proveedora. Posteriormente, la aplicación consumidora deja de invocar a la aplicación proveedora.