自定义 Ribbo 的负载均衡策略(下)|学习笔记

简介: 快速学习自定义 Ribbo 的负载均衡策略(下)

开发者学堂课程【微服务框架 Spring Cloud 快速入门自定义Ribbo的负载均衡策略(下)】学习笔记与课程紧密联系,让用户快速学习知识

课程地址https://developer.aliyun.com/learning/course/614/detail/9358


自定义Ribbo的负载均衡策略(下)


内容介绍

一、问题

二、解析码

三、参考源码修改

四、调用

五、测试

 

根据上节可了解到 MySeLfRule 是 OK 的意思,因为不 OK 会自动变成它的默认值,默认是轮询算法现在自定义是随机的,通过人工自定义显示定义了随机。自定义规则深度解析:

 

一、问题:

依旧轮询策略,但是加上新需求,每个服务器要求被调用5次。也即以前是每台机器一次,现在是每台机器5次

return new RandomRule();此时为随机

return new RandobinRule();改为轮询

运行结果为:{“deptno”:1,”dname”:”开发部”,”db_source”:”clouddb01‘’},clouddb01按照顺序变化为02,03。

 

二、解析码:

https://github.com/Netflix/ribbon/blob/master/ribbon-loadbalancer/src/main/java/com/netflix/loadbalancer/RandomRule.java

打开浏览器复制解析码找到 github 上面来,找到第32行的 public classRandom

Rule extends AbstractLoadBalancerRule {}

 

三、参考源码修改为需求要求的 RandomRule_ZY.java

新建一个 java 类,命名为 RandomRule_ZY,这属于定义的类打开刚才的源代码中RandomRule 后面所有的代码复制到新建 RandomRule_ZY  中 public class RandomRule_ZY 的后面。

image.png

这是全部架构图,抽象的 Abstact 意思是下载规则。

RandomRule 随机算法,先参考原作者的源码再根据需要的进行修改

Random 随机算法真正起作用的其实是:public Server choose(ILoadBalancer lb,object key){,其中的 Server 的意思的返回具体服务的哪一个服务线。

if (lb == nul1){

return null;

}

Server server = null;

while (server== nul1){

if (Thread.interrupted()){

return null;

}

List<Server> upList = lb.getReachableServers();

List<Server> allList = lb.getAllServers();

int serverCount = allList.size();

if (serverCount == 0){

/*

*No servers. End regardless of pass,because subsequent passes

*only get more restrictive.

*/

return null;

}

int index=rand.nextInt(serverCount);

server=upList.get(index);

if(server==null){

Thread.yield();

continue;

}

LoadBalancer lb哪一种均衡算法如果等于 null 的话就返还,自然而然,它一定会加载成一种。Server 现在还不知道是从何响应,因为现在这里有三台机器,不知道是其中的哪一台响应。

如果说 server 等于 null 试验层被中断,就会返回 null。

 

四、调用

if (serverCount == 0) 即当 serverCount == 0 才进入程序,但是如今serverCount==3,所以不进入程序。

int index=rand.nextInt(serverCount) 相当于 java.util.Random().nextInt(3) 数组的下标从0开始,serverCount为3得到的index为0,1,2

server=upList.get(index)返回的结果为运行到的机器。

将没用的代码删除,然后导入对应的包java.util.List

// total = 0 //当total == 5以后,指针才能往下走

//index = 0 //当前对外提供服务的服务器地址

第一次来total为0,index也应该为0。

第二次来total为1没满足5,index也为0。

直到第五次满足条件

//total需要重新置为零,但是已经达到过一个5次,index=1

//分析:5次,但是微服务只有8001 8002  8003三台。

按照这种加法index如果加到3还可行,但如果加到4就会出现问题,因为只有三台机器,所以只能重新设置,不能让index超过3。只要到3了就需要把它重新清空下次再设置。

private int total = 0;  //总共被调用的次数,目前要求每台被调用5次

private int currentIndex=0;  //当前提供服务的机器号

intindex=rand.nextInt(serverCount);server=upList.get(index);

替换成以下代码:

if(total < 5)

{

server = upList.get( currentIndex);

total++;

}else {

total = 0;

currentIndex++;

if(currentIndex >= upList.size())

{

currentIndex = 0;

}

}

当前提供服务的仍然是0号机,total加一次变成2,2小于5,再加当 total 值为5时,此时 total = 0,currentIndex 加上1 if(currentIndex >= upList.size())

{

currentIndex = 0;

//这里不过来,说明了此时的0号机过渡到了1号机。循环往复,直到 total 再次变为0.

return new RandomRule_ZY();

// 我自定义为每台机器5次。

主启动类里的 RibbonClient 要对负载均衡类加微服务算法,不用默认,要自定义值。

 

五、测试

启动所有微服务,现在每一个服务都需要被调用五次,在浏览器输入localhost/consumer/dept/get/1显示结果为{“deptno”:1,”dname”:”开发部”,”db_source”:”clouddb01”}

刚才是每个一次,现在为每个五次,跳转结果显示正确,主定义结束。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
9月前
|
缓存 负载均衡 网络协议
电商API接口性能优化技术揭秘:缓存策略与负载均衡详解
电商API接口性能优化是提升系统稳定性和用户体验的关键。本文聚焦缓存策略与负载均衡两大核心,详解其在电商业务中的实践。缓存策略涵盖本地、分布式及CDN缓存,通过全量或部分缓存设计和一致性维护,减少后端压力;负载均衡则利用反向代理、DNS轮询等技术,结合动态调整与冗余部署,提高吞吐量与可用性。文中引用大型及跨境电商平台案例,展示优化效果,强调持续监控与迭代的重要性,为电商企业提供了切实可行的性能优化路径。
|
9月前
|
人工智能 负载均衡 Cloud Native
云原生之负载均衡策略
ai必学之负载均衡 @[TOC]轮询处理;weight权重;ip_hash
|
负载均衡 算法
架构学习:7种负载均衡算法策略
四层负载均衡包括数据链路层、网络层和应用层负载均衡。数据链路层通过修改MAC地址转发帧;网络层通过改变IP地址实现数据包转发;应用层有多种策略,如轮循、权重轮循、随机、权重随机、一致性哈希、响应速度和最少连接数均衡,确保请求合理分配到服务器,提升性能与稳定性。
2755 11
架构学习:7种负载均衡算法策略
|
负载均衡 IDE Java
SpringBoot整合XXL-JOB【04】- 以GLUE模式运行与执行器负载均衡策略
在本节中,我们将介绍XXL-JOB的GLUE模式和集群模式下的路由策略。GLUE模式允许直接在线上改造方法为定时任务,无需重新部署。通过一个测试方法,展示了如何在调度中心配置并使用GLUE模式执行定时任务。接着,我们探讨了多实例环境下的负载均衡策略,确保任务不会重复执行,并可通过修改路由策略(如轮训)实现任务在多个实例间的均衡分配。最后,总结了GLUE模式和负载均衡策略的应用,帮助读者更深入理解XXL-JOB的使用。
838 9
SpringBoot整合XXL-JOB【04】-  以GLUE模式运行与执行器负载均衡策略
|
负载均衡
slb自定义健康检查路径
slb自定义健康检查路径
283 3
|
负载均衡 算法 Java
腾讯面试:说说6大Nginx负载均衡?手写一下权重轮询策略?
尼恩,一位资深架构师,分享了关于负载均衡及其策略的深入解析,特别是基于权重的负载均衡策略。文章不仅介绍了Nginx的五大负载均衡策略,如轮询、加权轮询、IP哈希、最少连接数等,还提供了手写加权轮询算法的Java实现示例。通过这些内容,尼恩帮助读者系统化理解负载均衡技术,提升面试竞争力,实现技术上的“肌肉展示”。此外,他还提供了丰富的技术资料和面试指导,助力求职者在大厂面试中脱颖而出。
腾讯面试:说说6大Nginx负载均衡?手写一下权重轮询策略?
|
负载均衡 Java Nacos
常见的Ribbon/Spring LoadBalancer的负载均衡策略
自SpringCloud 2020版起,Ribbon被弃用,转而使用Spring Cloud LoadBalancer。Ribbon支持轮询、随机、加权响应时间和重试等负载均衡策略;而Spring Cloud LoadBalancer则提供轮询、随机及Nacos负载均衡策略,基于Reactor实现,更高效灵活。
911 0
|
10月前
|
负载均衡 前端开发 应用服务中间件
Tomcat的负载均衡和动静分离(与nginx联动)
总的来说,负载均衡和动静分离是提高Web应用性能的两个重要手段。通过合理的配置和使用,我们可以让Web应用更好地服务于用户。
324 21
|
缓存 负载均衡 算法
解读 Nginx:构建高效反向代理和负载均衡的秘密
解读 Nginx:构建高效反向代理和负载均衡的秘密
360 2
|
负载均衡 前端开发 应用服务中间件
负载均衡指南:Nginx与HAProxy的配置与优化
负载均衡指南:Nginx与HAProxy的配置与优化
850 3