本章节介绍如何实现服务实例按照配置权重分配流量.
前提条件
已开通微服务引擎MSE;
开通MSE实例并且状态正常;
注册服务提供者,服务至少包含两个两个实例;
注册服务消费者,服务至少包含两个两个实例;
服务提供者和服务消费者必须在同一命名空间下;
服务提供者和服务消费者客户端使用 SpringCloud和Feign作为服务调用框架;
服务端配置
登录微服务引擎MSE注册配置中心管理控制台,选择资源池;
在左侧导航栏,选择注册配置中心 > 实例列表;
在实例列表页面,单击目标实例ID、实例名称或者目标行“管理”按钮均可跳转至实例基础信息页面;
在基础信息页面,点击服务管理> 服务列表,选择命名空间,查看当前命名空间下注册的服务列表;
找到目标服务所在行,点击查看按钮查看服务详情;
点击服务详情页面"提供者" tab页,查看当前服务的实例,点击右侧操作列权重按钮,可以修改服务实例的权重,权重取值范围为[0-10000],含义为万分之N,数值与权重成正比;
说明
服务实例的权重会影响该服务的消费者对该服务下所有实例的调用权重,例如,某个服务nacos-provider下存在提供者实例1.1.1.1:11和1.1.1.1:22,此时设置1.1.1.1:11权重为1,1.1.1.1:22权重为2,则服务nacos-provider的消费者nacos-consumer在进行服务消费时将可实现调用1.1.1.1:11和1.1.1.1:22的理论调用次数比例为1:2,据此可细粒度控制nacos-provider服务的负载均衡策略。
权重设置的取值范围为0-10000,需要注意的是,当权重设置为0时,该实例将无法被消费者发现,从而无法接收请求。
Spring Cloud Nacos客户端配置
服务消费者应用(例如nacos-consumer)引入ribbon依赖,选择合适的spring-cloud-starter-netflix-ribbon版本。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
<version>xxx</version>
</dependency>
修改服务消费者应用的启动配置application.properties文件,以指定ribbon在客户端负载均衡时使用NacosRule. 配置格式为:
#配置格式
{your_provider_service_name}.ribbon.NFLoadBalancerRuleClassName=com.alibaba.cloud.nacos.ribbon.NacosRule
#配置示例,假设服务消费者需要消费的服务有nacos-provider,每个服务一行配置
nacos-provider.ribbon.NFLoadBalancerRuleClassName=com.alibaba.cloud.nacos.ribbon.NacosRule
修改完配置后分别启动服务消费者和服务提供者,并并通过消费者调用提供者服务任意接口,即调用1.1.1.1:11和1.1.1.1:22的理论调用次数比例为1:2.实现流量按照权重分配的效果。
说明
当您使用Dubbo作为服务调用框架时,Nacos体系中实例权重的概念将会失效,此时若仍需要实现基于权重的负载均衡,请参考Dubbo官方文档中关于负载均衡的介绍。
当使用其他服务调用框架时,需要根据实际情况在客户端增加配置,才能实现按照权重分配流量。