La función Intra-zone Provider First de Microservices Engine (MSE) es una política de balanceo de carga. Esta función identifica de forma dinámica las zonas donde residen los consumidores y proveedores de un servicio, y enruta las solicitudes preferentemente a los nodos de servicio de la misma zona. En comparación con el algoritmo round-robin tradicional, esta política reduce la transferencia de tráfico entre zonas. Como resultado, disminuye la latencia de red, mejora la velocidad de respuesta del servicio y fortalece la capacidad de recuperación ante desastres del sistema. A continuación se describe cómo configurar la función Intra-zone Provider First en MSE.
Funcionamiento
Cuando usted habilita la función Intra-zone Provider First para una aplicación, las aplicaciones consumidoras llaman preferentemente a las instancias de su propia zona. Por ejemplo, si habilita esta función para la Aplicación P, las aplicaciones C1, C2 y C3 llamarán preferentemente a las instancias de la Aplicación P que se encuentren en su misma zona.
La función Intra-zone Provider First que ofrece MSE actualmente solo tiene efecto para una única aplicación proveedora. Es decir, después de habilitar la función para una aplicación, todos sus consumidores llamarán preferentemente a las instancias de su propia zona cuando llamen a dicha aplicación.
A continuación se muestra el modelo de llamadas de la aplicación cuando no se habilitan las llamadas Intra-zone Provider First en MSE.

A continuación se muestra el modelo de llamadas de la aplicación cuando se habilitan las llamadas Intra-zone Provider First en MSE.

Beneficios
La función Intra-zone Provider First es una política de programación de tráfico diseñada para arquitecturas de microservices. En una arquitectura multizona, las llamadas dentro de la misma zona ofrecen los siguientes beneficios:
Menor latencia del sistema: las llamadas entre zonas se convierten en llamadas dentro de la misma zona, lo cual reduce el RT de todo el sistema.
Dominio de falla más reducido: las llamadas de microservices se limitan a la misma zona. Si una zona presenta una falla, el impacto se restringe únicamente a esa zona.
Términos
Zona: área física dentro de una región que cuenta con suministro eléctrico y redes independientes. Una región contiene varias zonas. La latencia de red entre instancias de la misma zona es menor que la latencia entre zonas distintas.
Consumidores y proveedores: en escenarios de microservices, la parte que inicia una llamada es el consumidor del servicio, mientras que la parte que proporciona el servicio es el proveedor. En la mayoría de los casos, una aplicación actúa como proveedor y como consumidor al mismo tiempo.
RT: tiempo de ida y vuelta de una solicitud. El RT es el tiempo total desde que el cliente envía una solicitud hasta que recibe la respuesta del servidor.
Instancia: este concepto equivale al de nodo en el uso coloquial. En escenarios de Kubernetes, un pod bajo una carga de trabajo de aplicación es una instancia de aplicación. En escenarios de Elastic Compute Service (ECS), un proceso de aplicación individual en una instancia ECS es una instancia de aplicación.
Umbral de seguridad
Después de habilitar la función Intra-zone Provider First para una aplicación, todos los consumidores llaman a los proveedores de su propia zona. Sin embargo, no todas las aplicaciones se despliegan de manera estricta y uniforme entre las zonas. Una aplicación podría tener muy pocos nodos proveedores en una zona, y esos nodos no podrían manejar el tráfico que envían los consumidores de dicha zona.
Por ejemplo, suponga que su aplicación tiene 3, 3 y 1 instancias desplegadas en las zonas A, B y C, respectivamente. Si la función Intra-zone Provider First está habilitada y la cantidad de consumidores en cada zona es equilibrada, cada zona recibirá un tercio del tráfico. No obstante, la zona C solo tiene una instancia. Esa instancia deberá procesar tres veces más tráfico que cada instancia de las otras zonas, lo cual puede generar riesgos de estabilidad.
Para evitar que los consumidores de una zona como la C llamen preferentemente a la aplicación en su propia zona, la función Intra-zone Provider First de MSE incluye la configuración de un umbral de seguridad. Cuando se habilitan las llamadas Intra-zone Provider First para una aplicación y el porcentaje de instancias que la aplicación despliega en una zona es menor que el umbral de seguridad, los consumidores de esa zona no aplicarán la política Intra-zone Provider First al llamar a la aplicación. En su lugar, las llamadas recurrirán a la política aleatoria o round-robin predeterminada del framework de microservices.
Por ejemplo, suponga que su aplicación tiene 2, 2 y 1 instancias desplegadas en las zonas A, B y C, lo que representa el 40 %, 40 % y 20 % del total de instancias. Si habilita la función Intra-zone Provider First para la aplicación y establece el umbral de seguridad en 30 %, los consumidores de la zona C no realizarán llamadas con prioridad intra-zona, mientras que los consumidores de las zonas A y B sí las realizarán según lo esperado.
Cuándo usar esta función
La función Intra-zone Provider First está orientada principalmente a las llamadas entre aplicaciones desplegadas en distintas zonas. Esta función es compatible con servicios Dubbo y Spring Cloud. Los servicios de Kubernetes aún no son compatibles.
El uso de la función Intra-zone Provider First es opcional. Habilítela cuando necesite reducir la latencia general de las solicitudes de su sistema y mejorar aún más su disponibilidad global.
Aplicaciones desplegadas uniformemente entre zonas: utilice la función Intra-zone Provider First.
Aplicaciones no desplegadas de manera estrictamente uniforme entre zonas: utilice la función Intra-zone Provider First, pero evalúe y configure un umbral de seguridad que evite dirigir el tráfico de los consumidores hacia zonas con muy pocas instancias. Para obtener instrucciones, consulte Configure a security threshold.
Requisitos previos
MSE Microservices Governance está activado. Para obtener instrucciones, consulte Activate Microservices Governance.
La aplicación de destino y sus aplicaciones consumidoras están conectadas a MSE Microservices Governance. Para obtener instrucciones, consulte Enable Microservices Governance for Java microservice applications in an ACK or ACS cluster y Connect an ECS microservice to Microservices Governance.
El entorno donde despliega los recursos contiene varias zonas, y sus aplicaciones están desplegadas en dichas zonas.
Si utiliza Professional Edition o si su namespace es de Professional Edition, no podrá consultar la distribución de instancias y tráfico entre zonas. Para conocer las rutas de actualización, consulte Node and traffic distribution across zones.
Desplegar aplicaciones en varias zonas
-
Si utiliza Alibaba Cloud Container Service for Kubernetes (ACK) para gestionar y desplegar sus aplicaciones, compruebe que la configuración de red de su node pool incluya vSwitches en varias zonas. Esta configuración permite que sus cargas de trabajo se ejecuten en nodos de distintas zonas. Despliegue sus aplicaciones en varias zonas mediante la adición de una restricción de distribución de topología a su carga de trabajo en
spec > template > spec, tal como se muestra en el siguiente ejemplo. Para obtener información sobre cómo configurar una carga de trabajo para el despliegue entre zonas, consulte Recommended high availability architecture configurations for clusters.topologySpreadConstraints: - maxSkew: 1 topologyKey: "topology.kubernetes.io/zone" whenUnsatisfiable: ScheduleAnyway Si su aplicación está desplegada en instancias de Alibaba Cloud ECS, seleccione vSwitches de distintas zonas para las instancias ECS durante su creación. Después, al desplegar la aplicación, distribuya manualmente las instancias de la aplicación entre estas instancias ECS.
Configurar un umbral de seguridad
El umbral de seguridad determina si los consumidores de una zona realizan llamadas con prioridad intra-zona a una aplicación. Para obtener más información sobre cómo se evalúa este umbral, consulte Security threshold.
Antes de establecer un valor, consulte el porcentaje de instancias de cada zona en la vista Overall Data de la pestaña Intra-zone Provider First. Estos datos están disponibles incluso si la función Intra-zone Provider First no está habilitada para la aplicación. Luego, configure el umbral de seguridad con base en el despliegue actual de sus aplicaciones de negocio. El objetivo principal es proteger las instancias de las zonas con pocas instancias para evitar que se saturen de tráfico. Utilice los dos escenarios a continuación como referencia.
Escenario 1 (común): la aplicación está desplegada uniformemente entre zonas. Ninguna zona tiene una cantidad significativamente menor de instancias. Establezca el umbral de seguridad en un valor inferior al porcentaje promedio de instancias de una sola zona, el cual corresponde al inverso del número de zonas. Por ejemplo, una aplicación tiene 2, 2 y 2 instancias desplegadas en las zonas A, B y C. Las instancias de cada zona representan el 33.33 % del total, por lo que puede establecer el umbral de seguridad en 33 %.
Escenario 2: la aplicación no está desplegada uniformemente entre zonas. Considere la cantidad real de instancias en la zona que tiene menos instancias. Por ejemplo, una aplicación tiene 2, 2 y 1 instancias desplegadas en las zonas A, B y C. Dado que la zona C tiene menos instancias, es conveniente que los consumidores de la zona C no realicen llamadas con prioridad intra-zona. En este caso, establezca el umbral de seguridad en 30 %. Las instancias de las zonas A y B representan el 40 % del total cada una, por lo que se aplicarán las llamadas con prioridad intra-zona. Las instancias de la zona C representan el 20 %, por lo que las llamadas recurrirán a la política aleatoria o round-robin predeterminada.
El umbral de seguridad predeterminado es del 20 %. Este valor es muy bajo y está pensado principalmente para verificaciones y pruebas en entornos de prueba. Establezca un valor adecuado según la forma en que su aplicación esté desplegada actualmente entre las zonas.
Procedimiento
Antes de habilitar la función Intra-zone Provider First para una aplicación, establezca un security threshold adecuado para dicha aplicación.
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 recursos de la aplicación que desea gestionar.
En el panel de navegación izquierdo, haga clic en Traffic management.
En la parte superior de la página, haga clic en la pestaña Intra-zone Provider First.
Haga clic en {key, select, RAM {RAM} Overview {Overview} Identities {Identities} Users {Users} Groups {Groups} Roles {Roles} Settings {Settings} Permissions {Permissions} Grants {Grants} Troubleshoot {Troubleshooting} Policies {Policies} Integrations {Integrations} Providers {SSO} Applications {OAuth (Preview)} CloudSSO {CloudSSO} AccessAnalyzing {Access Analysis} Analyzers {Analyzers} Findings {Findings} Beta {Beta} Governance {Cloud Governance} AgentControl {Agent Management} other {{key}} } junto a Configuration Information. TODO: confirm the UI label of the edit entry next to Configuration Information. The managed conref key ramnext-console-aliyun-com/nav_menu inherited from the source appears to point at the RAM (Resource Access Management) console navigation menu rather than an MSE edit control; needs product-side confirmation.
Cambie Enable Status a Enabled, introduzca el Security Threshold y luego haga clic en OK. TODO: valid input format and value range of Security Threshold are not available in the source
Después de hacer clic en OK, la configuración tendrá efecto sin necesidad de reiniciar ninguna aplicación. Cuando un consumidor de la aplicación inicie una llamada hacia ella, seleccionará automáticamente y de forma preferente una instancia de la misma zona.
Para comprobar el resultado, realice las siguientes verificaciones:
Compruebe que la sección Configuration Information muestre los valores de Enable Status y Security Threshold que configuró.
En la vista Overall Data de la pestaña Intra-zone Provider First, compare el porcentaje de tráfico de cada zona con el porcentaje de instancias de dicha zona. Para obtener detalles sobre las vistas y métricas disponibles, consulte Node and traffic distribution across zones.
Para dejar de usar la función Intra-zone Provider First en la aplicación, modifique Enable Status en la misma sección Configuration Information.
Notas de uso
Equilibrio del despliegue: lo ideal es que las aplicaciones proveedoras y consumidoras estén desplegadas de manera uniforme. Ninguna aplicación debería tener una cantidad muy alta de instancias en zonas específicas. De lo contrario, las cargas de tráfico podrían desequilibrarse gravemente después de habilitar la función Intra-zone Provider First.
Versiones de servicio: cuando publica una versión de un servicio, especialmente durante una actualización continua en Kubernetes, la cantidad de instancias en cada zona puede cambiar en un periodo corto. Algunas zonas podrían quedar con un porcentaje de instancias que no cumple el umbral de seguridad, lo cual generaría llamadas entre zonas durante un breve lapso.
Alcance del aislamiento: utilice la función Intra-zone Provider First únicamente para el aislamiento a nivel de tráfico, no para el aislamiento a nivel de negocio. Al usar esta función, asegúrese de que las llamadas entre zonas sean tolerables.
-
Canary release integral: cuando el umbral de seguridad entra en vigor, el sistema calcula si las instancias disponibles de una zona representan un porcentaje del total de nodos que cumpla dicho umbral. La cantidad de instancias disponibles y el total de instancias se cuentan a partir de las instancias que quedan después del filtrado del canary release integral. En la mayoría de los casos, un sistema de negocio usa el canary release integral solo al publicar una versión de negocio, por lo que puede ignorar este punto. Si su sistema utiliza el canary release integral para el filtrado rutinario de rutas, es decir, fuera de las ventanas de publicación, preste atención a este punto.
Por ejemplo, una aplicación tiene 2, 2 y 1 nodos desplegados en las zonas A, B y C, y uno de los dos nodos de la zona A y uno de los dos nodos de la zona B son nodos canary. Para una aplicación consumidora que usa la versión oficial en la zona A, las cantidades efectivas de nodos en las zonas A, B y C son 1, 1 y 1, por lo que cada zona representa el 33.33 % de los nodos efectivos. Si el umbral de seguridad se establece en 35 %, la función Intra-zone Provider First no tendrá efecto en las zonas A y B para los consumidores que usan la versión oficial. Para un consumidor que usa la versión canary en la zona A, las cantidades efectivas de nodos en las zonas A, B y C son 1, 1 y 0, por lo que la función Intra-zone Provider First sí tendrá efecto para los consumidores canary.
Observability del tráfico a nivel de zona
Distribución de nodos y tráfico entre zonas
La función Intra-zone Provider First ofrece cierto grado de observability. Después de conectar su aplicación a MSE Microservices Governance, puede consultar la distribución del despliegue de instancias de la aplicación y el tráfico que maneja cada zona en la pestaña Intra-zone Provider First. Estos datos están disponibles independientemente de si la función Intra-zone Provider First está habilitada para la aplicación.
La pestaña Intra-zone Provider First contiene las siguientes secciones:
Configuration Information: muestra Enable Status y Security Threshold.
Vista Overall Data: muestra el porcentaje de instancias, el porcentaje de tráfico, el número total de solicitudes, el RT, la tasa de éxito y los gráficos de tendencias correspondientes para cada zona.
Vista Availability Zone: muestra el número de solicitudes, el RT y la tasa de éxito para cada zona.
Cuando la función Intra-zone Provider First no está habilitada, el tráfico se distribuye uniformemente entre las zonas.

Si utiliza Professional Edition o si su namespace es de Professional Edition, no podrá consultar estos datos.
Para actualizar un namespace de Professional Edition a uno de Enterprise Edition, consulte Microservice namespace management.
Verificaciones de despliegue y tráfico
En la página de observación de la función Intra-zone Provider First, la sección Overall Data muestra la cantidad de instancias que la aplicación despliega en cada zona. Si una aplicación está desplegada de manera muy desigual entre las zonas, el gráfico lo reflejará. Despliegue sus aplicaciones en varias zonas para mejorar la disponibilidad general de su sistema.
Además, después de habilitar la función Intra-zone Provider First para su aplicación, compruebe si el tráfico de alguna zona es demasiado alto o demasiado bajo, y si el tráfico que maneja cada zona coincide con la cantidad de nodos desplegados en ella. Por ejemplo, una zona podría tener muchos nodos pero manejar poco tráfico, o tener pocos nodos pero manejar una gran cantidad de tráfico. En estos casos, ajuste el umbral de seguridad para evitar riesgos de estabilidad provocados por una distribución de tráfico desequilibrada.
Ejemplo de comparación de RT
Si la función Intra-zone Provider First no está habilitada, las llamadas de microservices utilizan la política aleatoria o round-robin predeterminada, lo cual genera muchas invocaciones de servicio entre zonas. En el ejemplo descrito en esta sección, la función no está habilitada para la aplicación, y el RT promedio general de los últimos 5 minutos es de 7.88 ms.
Después de habilitar la función Intra-zone Provider First para todas las aplicaciones a lo largo de toda la cadena de llamadas, el RT promedio general de la aplicación cambia a 6.85 ms.
Una vez habilitada la función, el tráfico se distribuye uniformemente entre cinco zonas (cn-hangzhou-k, cn-hangzhou-j, cn-hangzhou-i, cn-hangzhou-h y cn-hangzhou-g), y cada zona maneja aproximadamente el 20 % del tráfico. La tasa de éxito general de las solicitudes es del 100.00 %, y el umbral de seguridad está establecido en 10.00 %.