En una arquitectura de microservices, las llamadas entre aplicaciones suelen ser aleatorias. Al actualizar una aplicación Spring Cloud o Dubbo, puede resultar difícil enrutar tráfico específico hacia la nueva versión. La función de versión canary de extremo a extremo de MSE Microservices Governance permite implementar un control de tráfico granular y de extremo a extremo sin modificar el código de la aplicación. Los lanes aíslan las versiones de las aplicaciones en entornos de ejecución independientes. Al establecer reglas de enrutamiento para un lane, es posible dirigir las solicitudes que cumplen criterios específicos hacia una versión objetivo de la aplicación.
Proceso de implementación
Limitaciones
La función de versión canary de extremo a extremo utiliza la capacidad de enrutamiento basado en etiquetas de MSE Microservices Governance, la cual es distinta del enrutamiento basado en etiquetas propio del gateway. Para evitar conflictos, no aplique reglas separadas de enrutamiento canary o basado en etiquetas a las aplicaciones gestionadas por esta función.
Para consultar las limitaciones de la función de versión canary de extremo a extremo en aplicaciones Java, consulte Java frameworks supported by MSE Microservices Governance.
Para utilizar las capacidades más recientes de versión canary de extremo a extremo, su gateway nativo para la nube de MSE debe tener la versión 2.0.6 o posterior. Para obtener instrucciones sobre cómo actualizar su gateway, consulte Upgrade an MSE cloud-native gateway.
Escenario de ejemplo
El siguiente escenario de realización de pedidos en una arquitectura de comercio electrónico demuestra el control de tráfico de extremo a extremo desde un gateway nativo para la nube de MSE hasta los microservices del backend. La arquitectura de la aplicación consta de un gateway nativo para la nube de MSE y una arquitectura de microservices backend construida con Spring Cloud. La cadena de llamadas del backend involucra tres servicios: un centro de transacciones (A), un centro de productos (B) y un centro de inventario (C). Los clientes acceden a los servicios backend, los cuales utilizan un registro de servicios MSE Nacos para el descubrimiento de servicios.
Después de realizar un pedido, el gateway nativo para la nube de MSE enruta el tráfico entrante al centro de transacciones (A). Posteriormente, el centro de transacciones (A) llama al centro de productos (B), y este último llama al centro de inventario (C) en sentido descendente. La cadena completa de llamadas es: Cliente > gateway nativo para la nube de MSE > A > B > C.
A medida que evoluciona su negocio, las nuevas funciones requieren que publique versiones nuevas de la Aplicación A y la Aplicación C simultáneamente. Antes de que las nuevas versiones entren en producción, debe validar ambas aplicaciones mediante una versión canary. Una vez que confirme que las nuevas versiones son estables, podrá proceder con la publicación oficial.
Las capacidades de versión canary de extremo a extremo del gateway nativo para la nube de MSE y MSE Microservices Governance permiten construir un pipeline de versión canary desde el gateway hacia múltiples servicios backend. Las solicitudes con características específicas se enrutan de manera consistente al entorno canary correspondiente, lo que permite validar varios servicios simultáneamente. Si una versión canary objetivo no está disponible, el tráfico realiza failover automáticamente al entorno base.

Conceptos clave
Gateway nativo para la nube de MSE: Un gateway de próxima generación compatible con el estándar Kubernetes Ingress. Admite múltiples métodos de descubrimiento de servicios, incluidos Container Service for Kubernetes (ACK) y MSE Nacos, y ofrece diversos métodos de autenticación para proteger sus servicios.
Lane: Un entorno aislado definido para un grupo de versiones específicas de aplicaciones, como todas las versiones "canary". Solo el tráfico que coincide con las reglas de enrutamiento se dirige a las aplicaciones etiquetadas dentro del lane correspondiente. Una aplicación puede pertenecer a varios lanes y un lane puede contener múltiples aplicaciones, formando una relación de muchos a muchos.
Grupo de lanes: Una colección de lanes. Los grupos de lanes se utilizan principalmente para separar entornos por equipos o escenarios.
Entorno base: El entorno para aplicaciones sin etiquetar. Funciona como entorno de respaldo o de producción para todos los demás entornos.
Requisitos previos
Creación de un clúster de Kubernetes
Para obtener más información, consulte Create an ACK dedicated cluster (discontinued) o Create an ACK managed cluster.
Habilitación de la gobernanza de microservicios de MSE
Asegúrese de que su agente Java de MSE tenga la versión 3.2.3 o posterior. De lo contrario, sus operaciones comerciales podrían verse afectadas.
Active la Professional Edition en la página de activación de MSE Microservices Governance.
Conecte sus aplicaciones de microservicios ACK al Centro de gobernanza de MSE tal como se describe en Connect ACK microservice applications to the MSE Governance Center.
Creación de un gateway nativo para la nube de MSE
Para obtener más información, consulte Create an MSE cloud-native gateway.
Asociación de un origen de servicio con el gateway nativo para la nube
Para obtener más información, consulte Add a service source.
Para la función de versión canary de extremo a extremo, los gateways nativos para la nube de MSE actualmente solo admiten clústeres de Container Service for Kubernetes (ACK) e instancias de MSE Nacos como orígenes de servicio.
El gateway nativo para la nube de MSE y el clúster ACK o la instancia MSE Nacos deben estar en la misma virtual private cloud (VPC).
Paso 1: Configuración del entorno base
Paso 1: Despliegue de las aplicaciones base
Inicie sesión en la consola de ACK.
En el panel de navegación izquierdo, haga clic en Clusters. Luego, haga clic en el nombre del clúster que desea gestionar.
En el panel de navegación izquierdo, seleccione .
En la parte superior de la página, seleccione el namespace del clúster y haga clic en Create from YAML.
-
Despliegue las aplicaciones base.
MSE Nacos
Copie el siguiente contenido YAML para desplegar las versiones base de las aplicaciones A, B y C.
NotaReemplace
nacos server addressen el código por el nombre de dominio interno de su instancia MSE Nacos. Elimine las llaves{}.Container Service (ACK)
-
Copie el siguiente contenido YAML para desplegar Nacos y simular un registro de servicios autoadministrado.
-
Copie el siguiente contenido YAML para desplegar las versiones base de las aplicaciones A, B y C.
-
Copie el siguiente contenido YAML para crear un Service para la aplicación de entrada A.
-
Paso 2: Exposición de la Aplicación A
New service
Si no ha agregado la Aplicación A al gateway nativo para la nube, siga estos pasos para exponerla.
-
Inicie sesión en MSE console. Vaya a Cloud-native Gateway > Gateways y haga clic en el nombre de su instancia de gateway. En el panel de navegación izquierdo, seleccione Routes. En la página que aparece, seleccione la pestaña Services y haga clic en Add Service. Para obtener más información, consulte Add a service.
-
Si su origen de servicio es un clúster ACK:
Service Source: Seleccione Container Service.
Namespace: Seleccione default.
Services: Seleccione sc-a.
-
Si su origen de servicio es una instancia MSE Nacos:
Service Source: Seleccione MSE Nacos.
Namespace: Seleccione public.
Services: Seleccione sc-A.
-
-
En la página Routes, seleccione la pestaña Routes. Haga clic en Add Route para crear una ruta para el servicio sc-a/sc-A y exponerlo. Para obtener más información, consulte Create a route.
Parámetro
Descripción
Path
Seleccione el tipo de coincidencia Prefix y establezca el valor de la ruta en /a.
Route Target
Seleccione Single Service.
Backend service
Seleccione sc-A.
Existing service
Si la Aplicación A ya es un servicio en línea en su gateway, siga estos pasos para exponerla.
Inicie sesión en MSE console. Vaya a Cloud-native Gateway > Gateways y seleccione su instancia de gateway. En el panel de navegación izquierdo, seleccione Routes. En la página que aparece, seleccione la pestaña Routes. Edite una ruta existente para exponer el servicio.
|
Parámetro |
Descripción |
|
Path |
Seleccione el tipo de coincidencia Prefix y establezca el valor de la ruta en /a. |
|
Route Target |
Seleccione Single Service. |
|
Backend service |
Seleccione sc-A. |
Paso 3: Prueba del tráfico del entorno base
Inicie sesión en la consola de MSE. En la barra de navegación superior, seleccione una región.
En el panel de navegación izquierdo, seleccione Cloud-native Gateway > Gateways. En la página Gateways, haga clic en el ID del gateway.
En el panel de navegación izquierdo, haga clic en Overview.
En la pestaña Endpoint, busque la Ingress IP Address del SLB en la sección Gateway Ingress.
-
Ejecute el comando curl para probar el tráfico del entorno base. El resultado muestra que el tráfico pasa por las versiones base de las aplicaciones A, B y C.
# Test command curl x.x.1.1/a # Test result A[10.0.3.178][config=base] -> B[10.0.3.195] -> C[10.0.3.201]La ausencia de un sufijo de versión para las aplicaciones B y C en la salida indica que las solicitudes se enrutan a sus versiones base.
Paso 2: Configuración del entorno canary
Si una nueva función requiere publicar versiones nuevas de la Aplicación A y la Aplicación C simultáneamente, puede utilizar una versión canary de extremo a extremo para validarlas.
Paso 1: Despliegue de las aplicaciones canary
Inicie sesión en la consola de ACK.
En el panel de navegación izquierdo, haga clic en Clusters. Luego, haga clic en el nombre del clúster que desea gestionar.
En el panel de navegación izquierdo, seleccione .
En la parte superior de la página, seleccione el namespace del clúster y haga clic en Create from YAML.
-
Copie el siguiente contenido YAML para desplegar las versiones canary de las aplicaciones A y C.
MSE Nacos
NotaReemplace
{nacos server address}en el código por el nombre de dominio interno de su instancia MSE Nacos. No incluya las llaves{}.Container Service (ACK)
Paso 2: Creación de un grupo de lanes
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, seleccione .
Si no existe ningún grupo de lanes en el namespace de microservicios seleccionado, haga clic en Create Lane Groups and Lanes. Si ya existe un grupo de lanes, haga clic en + Create Lane Group.
-
En el panel Create Lane Group, configure los siguientes parámetros y haga clic en OK.
Parámetro
Descripción
Name of Lane Group
Introduzca un nombre para el grupo de lanes.
Entry Type
Seleccione MSE Cloud-native Gateway.
Gateway
Seleccione el gateway nativo para la nube objetivo.
Lane Group Application
Seleccione spring-cloud-a, spring-cloud-b y spring-cloud-c.
Una vez creado el grupo de lanes, podrá consultarlo en la sección Lane Group de la página Full link Grayscale. Para modificar la información del grupo de lanes, haga clic en el icono de edición (
) y actualice la configuración.
Paso 3: Crear una lane
Al utilizar la función de versión canary de extremo a extremo, debe agregar una
tagespecial a sus aplicaciones canary para distinguirlas de otros nodos. En un entorno de contenedores, agregue la etiquetaalicloud.service.tag: ${tag}enspec.template.metadata.labels. En un entorno de ECS, añada el parámetro de inicio de Java-Dalicloud.service.tag=${tag}.-
Cuando se utiliza un cloud-native gateway como ingreso para una versión canary de extremo a extremo, MSE admite dos modos de versión canary para las lanes.
Versión canary por contenido: Recomendado cuando el contenido de la solicitud permite identificar el tráfico canary. De lo contrario, considere modificar su sistema para añadir identificadores canary y obtener mejores resultados; por ejemplo, mantener la consistencia en las solicitudes de un mismo usuario.
Versión canary por proporción: Modo alternativo para cuando el contenido de la solicitud no permite identificar el tráfico canary y no es posible modificar los sistemas heredados. Este modo puede enrutar solicitudes del mismo origen a diferentes lanes, lo que provoca un comportamiento inconsistente en las solicitudes canary.
El modo de versión canary debe ser consistente en todas las lanes dentro de un grupo de lanes. Solo puede establecer el modo de versión canary al crear la primera lane de un grupo.
En la parte inferior de la página Full link Grayscale, si no existe ninguna lane en el namespace seleccionado, haga clic en Click to create the first shunt Lane. Si ya existe una lane, haga clic en + Create swim lanes.
-
En el panel Create swim lanes, configure los ajustes de la lane y haga clic en OK.
Por contenido
Parámetro
Descripción
Add Node Tag
Agregue una tag a los nodos de su aplicación canary para distinguirlos de los nodos base.
Enter lane information
Lane Name: Introduzca un nombre para la lane.
Lane Tag: La tag de destino para el tráfico que coincide con las reglas de esta lane.
Confirm Matching Relationship: Compruebe si la cantidad de nodos de aplicación con esta tag cumple con sus expectativas.
Lane Status: Seleccione Enable.
Add Canary Release Rule
Establezca la regla para enrutar el tráfico hacia esta lane.
-
Canary Release Mode: Seleccione Canary Release by Content.
-
Canary Release Condition: Seleccione Meet All Conditions.
La condición en este ejemplo se configura de la siguiente manera:
-
Parameter Type: Header.
-
Parameter: canary.
-
Condition: ==.
-
Value: gray.
-
Modos de enrutamiento canary
Condición de versión canary
Efecto
Meet All Conditions
El tráfico se enruta a la lane correspondiente solo si se cumplen todas las condiciones especificadas.
Meet Any Condition
El tráfico se enruta a la lane correspondiente si se cumple cualquiera de las condiciones especificadas.
Tipos de condiciones
Condición
Descripción
Ejemplo de configuración
Ejemplo de solicitud
==
Coincidencia exacta. La condición se cumple solo si el valor en el tráfico coincide exactamente con el valor especificado.
Por ejemplo, la condición de coincidencia de solicitudes para la lane mse (tag de lane: gray, lista de aplicaciones de lane:
spring-cloud-a,spring-cloud-c) es Condition: AND header: [name] == xiaoming. Esto significa que cuando el valor del encabezado de solicitudnamees exactamente igual axiaoming, el tráfico se enruta a esta lane. El estado actual de la lane es Enabled.Se envía una solicitud GET a la ruta
/acon el encabezadoname=xiaoming. La respuestaAgray[192.168.0.22][config=base] -> B[192.168.0.9] -> Cgray[192.168.0.17]confirma que el tráfico se enrutó a través de las versiones canary de los servicios A y C.!=
Coincidencia de desigualdad. La condición se cumple si el valor en el tráfico no coincide con el valor especificado.
Por ejemplo, si la condición de coincidencia de solicitudes para la lane mse se establece en
header: [name] != xiaoming, el tráfico coincide con esta lane cuando el valor del campo name en el encabezado de la solicitud no es igual axiaoming.Por ejemplo, si envía una solicitud GET a la ruta
/acon el encabezado establecido enname=xiaoming1, la respuesta muestra que el tráfico se enruta a través del enlace canary:Agray[10.0.10.58][config=base] -> B[10.0.10.206] -> Cgray[10.0.10.8]. Esto indica que el tráfico coincide con la regla canary cuando el valor denameno es igual al valor de la condición.in
Coincidencia por inclusión. La condición se cumple si el valor en el tráfico está presente en la lista especificada.
Por ejemplo, la condición de coincidencia de solicitudes para la lane mse se establece en
header: [name] in [xiaoming,xiaohong]. Esto significa que si el valor del encabezado name en una solicitud es xiaoming o xiaohong, el tráfico se enruta a las aplicaciones grayscale spring-cloud-a y spring-cloud-c que corresponden a esta lane.Se envía una solicitud GET a la ruta
/acon el encabezadonameestablecido enxiaohong. La respuestaAgray[10.0.10.58][config=base] -> B[10.0.10.206] -> Cgray[10.0.10.8]confirma que el tráfico se enrutó a la lane canary porque el valor estaba en la lista.Percentage
Coincidencia por porcentaje. La condición se cumple si hash(get(key)) % 100 < value es verdadero.
Se configura una regla para enrutar el 10% de las solicitudes a la lane con tag gray, basándose en el hash del parámetro Header name. Esta lane incluye
spring-cloud-ayspring-cloud-c.Se envía una solicitud GET a la ruta
/acon el encabezadoname=111. La respuestaAgray[10.0.10.58][config=base] -> B[10.0.10.206] -> Cgray[10.0.10.8]indica que el valor hash de esta solicitud cayó dentro del rango del 10% y se enrutó a la lane canary.Regex
Coincidencia por expresión regular. La condición se cumple si el valor en el tráfico coincide con la expresión regular especificada.
Se configura una regla para coincidir con solicitudes donde el parámetro Header name coincide con una regex para una cadena alfanumérica de 32 caracteres. La lane con tag gray incluye
spring-cloud-a,spring-cloud-c.Se envía una solicitud GET a la ruta
/acon el encabezado name establecido en1234567890abcdef1234567890ABCDEF. La respuestaAgray[10.0.10.58][config=base] -> B[10.0.10.206] -> Cgray[10.0.10.8]confirma que el tráfico se enrutó a la lane canary porque el valor coincidió con la regex.Por proporción
NotaPara crear una lane para versión canary por proporción, la versión de ack-onepilot debe ser 3.0.18 o posterior y la versión del agente debe ser 3.2.3 o posterior.
Parámetro
Descripción
Add Node Tag
Agregue una tag a los nodos de su aplicación canary para distinguirlos de los nodos base.
Enter lane information
Lane Name: Introduzca un nombre para la lane.
Lane Tag: La tag de destino para el tráfico que coincide con las reglas de esta lane.
Confirm Matching Relationship: Compruebe si la cantidad de nodos de aplicación con esta tag cumple con sus expectativas.
Lane Status: Seleccione Enable.
Configure Routing and Canary Release Rules
Establezca la regla para enrutar el tráfico hacia esta lane.
-
Canary Release Mode: Seleccione Routing by Percentage.
-
Traffic Percentage: 30%.
NotaTambién puede establecer diferentes proporciones de tráfico para cada ruta base del gateway. Al habilitar esta función, asegúrese de que la suma de todas las proporciones de tráfico configuradas para esa ruta base en todos los grupos de lanes no exceda el 100%.
-
Después de crear la lane, puede consultar sus detalles en la sección Traffic Allocation de la página Full link Grayscale y realizar las siguientes acciones:
En la columna Actions, haga clic en Enable para activar la lane. El tráfico se enrutará entonces según las reglas de la lane. El tráfico coincidente tiene prioridad hacia la versión de la aplicación con la tag de lane correspondiente. Si no se encuentra dicha versión, el tráfico se enruta a la versión base sin tag.
En la columna Actions, haga clic en Close para desactivar la lane. El tráfico subsiguiente se enrutará a la versión base sin tag.
Haga clic en el icono de vista (
) para consultar la proporción de tráfico de la lane.Haga clic en el icono de estado (
) para establecer el estado de las aplicaciones dentro de la lane.
Paso 4: Probar el tráfico canary
Por contenido
Utilice el comando curl para probar el tráfico canary. El resultado muestra que el tráfico pasa por los entornos canary de A y C. Dado que no existe una versión canary de la aplicación B (con tag 'gray'), el tráfico se enruta automáticamente a su versión base.
# Test command
curl -H "canary: gray" x.x.x.x/a
# Test result
Agray[10.0.3.177][config=base] -> B[10.0.3.195] -> Cgray[10.0.3.180]
Por proporción
Puede ejecutar el siguiente script de Python para probar la distribución de tráfico para el enrutamiento por proporción. Debe instalar el paquete requests y reemplazar x.x.x.x con la dirección IP de ingreso de su cloud-native gateway.
El resultado muestra que aproximadamente el 30% del tráfico se enruta al entorno canary.
(Opcional) Paso 3: Observability
Las funciones de observability de MSE le ayudan a monitorear el rendimiento de la aplicación y diagnosticar problemas rápidamente.
Observability del cloud-native gateway
En la página Routes de la consola de MSE cloud-native gateway, seleccione la pestaña Services. Haga clic en el servicio objetivo y consulte sus métricas de tráfico en el área Monitor.

Observability de gobernanza de microservices de MSE
En la página Full link Grayscale de MSE Microservices Governance, haga clic en la aplicación objetivo. En el área Application QPS Monitoring, puede consultar el tráfico de las versiones base (sin tag) y canary de la lane correspondiente.

Total QPS: El total de consultas por segundo (QPS) de la aplicación.
Abnormal QPS: La cantidad de solicitudes con errores por segundo de la aplicación.
GrayQPS: Las QPS de la versión 'gray' de la aplicación.
Observability de ARMS
Si su aplicación está conectada a Application Real-Time Monitoring Service (ARMS), puede monitorear las métricas de negocio de su entorno canary en el panel de versión canary de extremo a extremo de ARMS para decidir si revertir o continuar con la versión.
La pestaña end-to-end canary release compara métricas clave para cada aplicación en los entornos online y canary, incluidas requests per second, error rate y average response time. Al seleccionar una aplicación, se muestran sus métricas de instance count, request volume, exception count, error rate y response time, lo que le ayuda a determinar si el tráfico canary funciona según lo esperado.