文章目录

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


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: com.netflix.loadbalancer.RoundRobinRule
#
#artisan-product-center:
#  ribbon:
#    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule# ribbon 饥饿加载 解决第一次耗时多的问题

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

package com.artisan.config;import com.globalconfig.GlobalRibbonConfig;
import org.springframework.cloud.netflix.ribbon.RibbonClients;
import org.springframework.context.annotation.Configuration;/*** @author 小工匠* @version 1.0* @description: Ribbon 全局配置,通过代码实现* @date 2022/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 com.netflix.loadbalancer.IRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @author 小工匠* @version 1.0* @description: 全局负载均衡策略* @date 2022/2/3 0:06* @mark: show me the code , change the world*/@Configuration
public 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 com.netflix.client.config.IClientConfig;
import com.netflix.loadbalancer.AbstractLoadBalancerRule;
import com.netflix.loadbalancer.BaseLoadBalancer;
import com.netflix.loadbalancer.Server;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;/*** @author 小工匠* @version 1.0* @description: 自定义权重策略* @date 2022/2/3 0:08* @mark: show me the code , change the world*/
@Slf4j
public 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次


源码

https://github.com/yangshangwei/SpringCloudAlibabMaster

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

  1. Spring Cloud Alibaba - 11 Ribbon 自定义负载均衡策略(同集群优先权重负载均衡算法)

    文章目录 Pre 需求 工程 Code 继承AbstractLoadBalancerRule实现自定义Rule 随机权重策略 配置 验证 源码 Pre Spring Cloud Alibaba - 0 ...

  2. Spring Cloud Alibaba gateway ribbon 自定义负载均衡规则。发散灰度发布,金丝雀测试等

    上一篇介绍了,ribbon的组件.本篇要自己写一个灰度方案.其实就是一个很简单的思维扩散. 需求 前端header请求携带version字段.路由服务根据version去需要对应版本的服务集合,进行或 ...

  3. Spring Cloud:使用Ribbon实现负载均衡详解(下)

    在上一篇文章(Spring Cloud:使用Ribbon实现负载均衡详解(上))中,我对 Ribbon 做了一个介绍,Ribbon 可以实现直接通过服务名称对服务进行访问.这一篇文章我详细分析一下如何 ...

  4. Ribbon 自定义负载均衡策略

    Ribbon默认的负载均衡策略默认的有下面几种: 我们也可以自定义负载均衡策略: 修改springcloud-consumer-dept-80的主启动类: 下面开始编写自定义配置类MySelfRule ...

  5. springcloud ribbon 配置负载均衡策略以及自定义策略

    一.系统内置的策略有以下几种.  这个负载策略配置说白了就是让 Ribbon 这个客户端负载均衡器怎么进行访问服务提供者列表.是轮流访问?随机访问?权重?等. Ribbon 的负载均衡策略 策略类   ...

  6. SpringCloud Ribbon(二)之自定义负载均衡策略IRule

    一.Ribbon负载均衡策略 一个服务对应一个LoadBalancer,一个LoadBalancer只有一个Rule,LoadBalancer记录服务的注册地址,Rule提供从服务的注册地址中找出一个 ...

  7. Ribbon的负载均衡策略

    一.Ribbon负载均衡 如上图所示,负载均衡就是避免单个服务的实例处理大批量请求而导致其他实例空闲,造成资源浪费.负载均衡分为客户端.服务端的负载均衡,它们最大的区别在于维护服务器的清单保存的位置不 ...

  8. LoadBalance自定义负载均衡策略

    LoadBalance已有策略   LoadBalance的源码中已有两种策略,RandomLoadBalancer(随机).RoundRobinLoadBalancer(轮询,默认的负载均衡策略). ...

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

    文章目录 Ribbon整合三部曲 artisan-cloud-ribbon-order step1 搞依赖 step2 搞注解 (在RestTemplate上加入@LoadBalanced注解) St ...

最新文章

  1. EGL接口介绍-----Android OpenGL ES底层开发
  2. java adapter 模式_Java设计模式之适配器模式(Adapter模式)介绍
  3. php的crypt,php使用crypt()函数进行加密
  4. mysql 表结构监控_性能测试之mysql监控、优化
  5. 一个优秀的公司如何才能成为一个卓越的公司?
  6. HarmonyOS 组件篇
  7. Linux ftp命令
  8. c# 匿名用戶登錄以後的事件處理
  9. libiec61850探究【1】-第一个MMS通讯实例
  10. Vue基础视频教程(一)
  11. cad特性匹配快捷键命令_cad特性匹配快捷键命令_cad快捷键命令大全
  12. 生于七十年代的20位最具潜质商业精英
  13. ctfmon是什么启动项_开机启动项命令是什么-百度经验
  14. 基于Arduino开发的智能小车
  15. 大规模知识图谱数据存储实战解析
  16. YunEngine SDK已经开始发放了!!!
  17. win7 计算机桌面图标不见了,win7系统桌面计算机快捷图标不见了的解决方法
  18. linux 壁纸自动更换,linux设置自动更换壁纸
  19. linux shadow文件*,Linux怎么查找shadow文件进入这样几步轻松搞定
  20. Arduino UNO模拟量采集

热门文章

  1. c++ doxygen 注释规范_C语言代码注释参考
  2. C++模板基本概念及语法
  3. 用indesign怎么更换名牌姓名_颚式破碎机如何拆卸?耐磨件怎么更换,可以用多久?答案都在这里...
  4. python flask 路由_python框架之Flask(2)-路由和视图Session
  5. Albert: A lite bert for self-supervised learning of language representations (Albert)
  6. 8-spark学习笔记-sparksql
  7. 机器学习笔记:GRU
  8. osmnx 补充笔记:get_edge_colors_by_attr get_node_colors_by_attr
  9. 文巾解题1143. 最长公共子序列
  10. 听说你想去大厂看妹子,带你看看美团后端开发实习岗详细面经