1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Spring Cloud Alibaba - 10 Ribbon 自定义负载均衡策略(权重算法)

Spring Cloud Alibaba - 10 Ribbon 自定义负载均衡策略(权重算法)

时间:2022-11-15 10:25:27

相关推荐

Spring Cloud Alibaba - 10 Ribbon 自定义负载均衡策略(权重算法)

文章目录

Pre工程首先屏蔽细粒度配置然后通过代码设置一个全局配置 指定 GlobalRibbonConfigGlobalRibbonConfig 设置负载均衡策略开发自定义策略 (权重访问)验证源码

Pre

我们看下Nacos Server上的服务详情中有个权重

Spring Cloud Alibaba - 07 Ribbon 应用篇及内置的负载均衡算法

没有根据权重访问的策略, 自己写个行不 ?

假设我们一个微服务部署了三台服务器A,B,C.其中A,B,C三台服务的性能不一,A的性能最牛逼,B次之,C最差.那么我们设置权重比例 为5 : 3:2 那就说明 10次请求到A上理论是5次,B服务上理论是3次,B服务理论是2次.

工程

artisan-cloud-customcfg-ribbon-order (修改)

artisan-cloud-customcfg-ribbon-pay (无修改)

首先屏蔽细粒度配置

#自定义Ribbon的细粒度配置 (推荐)#artisan-pay-center:# ribbon:# NFLoadBalancerRuleClassName: flix.loadbalancer.RoundRobinRule##artisan-product-center:# ribbon:# NFLoadBalancerRuleClassName: flix.loadbalancer.RandomRule# ribbon 饥饿加载 解决第一次耗时多的问题

然后通过代码设置一个全局配置 指定 GlobalRibbonConfig

package com.artisan.config;import com.globalconfig.GlobalRibbonConfig;import org.flix.ribbon.RibbonClients;import org.springframework.context.annotation.Configuration;/*** @author 小工匠* @version 1.0* @description: Ribbon 全局配置,通过代码实现* @date /2/3 0:05* @mark: show me the code , change the world*/@Configuration@RibbonClients(defaultConfiguration = GlobalRibbonConfig.class)public class CustomRibbonConfig2 {}

GlobalRibbonConfig 设置负载均衡策略

package com.globalconfig;import com.artisan.customrules.ArtisanWeightedRule;import flix.loadbalancer.IRule;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;/*** @author 小工匠* @version 1.0* @description: 全局负载均衡策略* @date /2/3 0:06* @mark: show me the code , change the world*/@Configurationpublic class GlobalRibbonConfig {@Beanpublic IRule globalConfig() {// 根据权重的规则return new ArtisanWeightedRule();}}

开发自定义策略 (权重访问)

package com.artisan.customrules;import com.alibaba.cloud.nacos.NacosDiscoveryProperties;import com.alibaba.cloud.nacos.ribbon.NacosServer;import com.alibaba.nacos.api.exception.NacosException;import com.alibaba.nacos.api.naming.NamingService;import com.alibaba.nacos.api.naming.pojo.Instance;import flix.client.config.IClientConfig;import flix.loadbalancer.AbstractLoadBalancerRule;import flix.loadbalancer.BaseLoadBalancer;import flix.loadbalancer.Server;import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.annotation.Autowired;/*** @author 小工匠* @version 1.0* @description: 自定义权重策略* @date /2/3 0:08* @mark: show me the code , change the world*/@Slf4jpublic class ArtisanWeightedRule extends AbstractLoadBalancerRule {@Autowiredprivate NacosDiscoveryProperties discoveryProperties;@Overridepublic void initWithNiwsConfig(IClientConfig iClientConfig) {//读取配置文件并且初始化,ribbon内部的, 几乎用不上}@Overridepublic Server choose(Object key) {try {log.info("key:{}", key);BaseLoadBalancer baseLoadBalancer = (BaseLoadBalancer) this.getLoadBalancer();log.info("baseLoadBalancer--->:{}", baseLoadBalancer);//获取微服务的名称String serviceName = baseLoadBalancer.getName();//获取Nacos服务发现的相关组件APINamingService namingService = discoveryProperties.namingServiceInstance();//获取 一个基于nacos client 实现权重的负载均衡算法Instance instance = namingService.selectOneHealthyInstance(serviceName);//返回一个serverreturn new NacosServer(instance);} catch (NacosException e) {log.error("自定义负载均衡算法错误");}return null;}}

可以看到,这里的权重访问主要是依赖Nacos提供的功能

验证

权重的取值 0 ~ 1 , 修改两个节点的访问权重 0.9 和 0.1

访问10次

观察请求日志

当调整为 0.5:0.5 , 再此请求10次

源码

/yangshangwei/SpringCloudAlibabMaster

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。