SpringCloud全家桶学习之客户端负载均衡及自定义负载均衡算法

Easter79
• 阅读 837

一、Ribbon是什么?

  Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端  负载均衡的工具(这里区别于nginx的负载均衡)。简单来说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix中间服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。再简单点说,就是在配置文件中列出Load Balancer后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询、随机连接等)去连接这些机器。当然,我们也很容易使用Ribbon实现自定义的负载均衡算法。

  Ribbon官网:https://github.com/Netflix/ribbon

二、Ribbon配置

本项目的地址https://github.com/Simple-Coder/microservice-demo-study

(1)Maven工程结构

SpringCloud全家桶学习之客户端负载均衡及自定义负载均衡算法

(2)microservice-consumer添加Ribbon的pom依赖

SpringCloud全家桶学习之客户端负载均衡及自定义负载均衡算法 pom

(3)添加负载均衡注解:@LoadBalanced

SpringCloud全家桶学习之客户端负载均衡及自定义负载均衡算法

(4)地址修改

SpringCloud全家桶学习之客户端负载均衡及自定义负载均衡算法

(5)启动类添加@EnableEurekaClient注解

SpringCloud全家桶学习之客户端负载均衡及自定义负载均衡算法

(6)测试:依次启动3个EurekaServer、3个Provider、1个Consumer

SpringCloud全家桶学习之客户端负载均衡及自定义负载均衡算法

(7)浏览器访问服务消费方提供的地址:http://localhost:7001/consumer/get/all

第一次访问该地址,可以看出数据来自Cloud02数据库

SpringCloud全家桶学习之客户端负载均衡及自定义负载均衡算法

第二次访问该地址,可以看出数据来自Cloud03数据库

 SpringCloud全家桶学习之客户端负载均衡及自定义负载均衡算法

第三次访问该地址,可以看出数据来自Cloud01数据库

SpringCloud全家桶学习之客户端负载均衡及自定义负载均衡算法

第四次访问该地址,可以看出数据来自Cloud02数据库,说明客户端使用的负载均衡算法默认是简单轮询

SpringCloud全家桶学习之客户端负载均衡及自定义负载均衡算法

三、Ribbon核心组件IRule

   IRule:根据特定算法从服务列表中选取一个要访问的服务,官网源码地址如下:

  https://github.com/Netflix/ribbon/blob/master/ribbon-loadbalancer/src/main/java/com/netflix/loadbalancer/IRule.java,IRule的继承关系图如下:

  SpringCloud全家桶学习之客户端负载均衡及自定义负载均衡算法

(1)框架自带的7种特定算法概括

  ①RoundRobinRule:简单轮询

  ②RandomRule:随机

  ③AvailabilityFilteringRule:先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,还有并发连接数量超过阈值的服务,然后对剩余的服务列表按照轮询策略进行访问。

  ④WeightedResponseTimeRule:根据平均响应时间计算所有服务的权重,响应时间越快服务权重越大,被选中的概率越高,刚启动时如果统计信息不足,则使用RoundRibbonRule策略,等统计信息足够,会切换到WeightedResponseTimeRule

  ⑤RetryRule:先按照RoundRobinRule的策略获取服务,如果获取服务失败则在指定时间会进行重试,获取可用的服务

  ⑥BestAvailableRule:先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务

  ⑦ZoneAvoidanceRule:默认规则,符合判断server所在区域的性能和server的可用性选择服务器

(2)启动类添加配置(添加此注解:@RibbonClient)

SpringCloud全家桶学习之客户端负载均衡及自定义负载均衡算法

  在这里要特别注意:官方文档明确给出警告,这个自定义的配置类不能放在@ComponentScan所扫描的当前包及子包下,否则我们自定义的这个配置类就会被所有Ribbon客户端所共享,也就不能达到特殊化定制的目的了。 SpringCloud全家桶学习之客户端负载均衡及自定义负载均衡算法

(3)根据需求自定义算法(MyRandomRule.java)

  需求:依旧轮询策略,但是加上新的需求,每个服务器要求被调用3次。也就是以前每台机器一次,现在每台机器5次。参考官网源码地址如下:

https://github.com/Netflix/ribbon/blob/master/ribbon-loadbalancer/src/main/java/com/netflix/loadbalancer/RandomRule.java SpringCloud全家桶学习之客户端负载均衡及自定义负载均衡算法

(4)配置该自定义算法

SpringCloud全家桶学习之客户端负载均衡及自定义负载均衡算法

(5)测试

依次启动3个Eureka、3个provider、1个consumer,查看consumer是否每个服务调用3次切换

SpringCloud全家桶学习之客户端负载均衡及自定义负载均衡算法

 浏览器访问消费方提供的地址:http://localhost:7001/consumer/get/all

SpringCloud全家桶学习之客户端负载均衡及自定义负载均衡算法

   不断访问该地址,确实发现每个服务调用3次,至此自定义的负载均衡算法小练习已经完成!

四、总结

  ①Ribbon是客户端、负载均衡的工具(区别于nginx)

  ②框架自带7种负载均衡算法

  ③自定义负载均衡算法的使用(启动类添加@RibbonClient、配置类不能在启动类扫描包下,否则所有Ribbon客户端都会生效该配置)

  ④本代码已经上传:https://github.com/Simple-Coder/microservice-demo-study

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Easter79 Easter79
3年前
springcloud
Ribbon简介Ribbon是管理HTTP和TCP服务客户端的负载均衡器。Ribbon具有一些列带有名称的客户端,也就是带有名称的Ribbon客户端。每个客户端由可配置的组件构成,负责一类服务的调用请求。SpringCloud通过RibbonClientConfiguration为每个Ribbon客户端创建一个Appl
Easter79 Easter79
3年前
SpringCloud系列——Zuul 动态路由
  前言  Zuul是在SpringCloudNetflix平台上提供动态路由,监控,弹性,安全等边缘服务的框架,是Netflix基于jvm的路由器和服务器端负载均衡器,相当于是设备和Netflix流应用的Web网站后端所有请求的前门。本文基于上篇(SpringCloud系列——Ribbon负载均衡(https://www.
Stella981 Stella981
3年前
Nepxion Discovery
NepxionDiscovery基于Nacos实现SpringCloud灰度发布和路由前言NepxionDiscovery是一款对SpringCloudDiscovery服务注册发现、Ribbon负载均衡、Feign和RestTe
Easter79 Easter79
3年前
SpringCloud学习笔记(四)之Ribbon负载均衡
    在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于httprestful的。Springcloud有两种服务调用方式,一种是ribbonrestTemplate,另一种是feign。简介是基于NetflixRibbon实现的一套客户端负载均衡的工具。简单的说,Ribbon是
Easter79 Easter79
3年前
SpringCloud:Ribbon负载均衡
1.概述SpringCloudRibbon是基于NetflixRibbon实现的一套客户端       负载均衡的工具。 简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。
Stella981 Stella981
3年前
Ribbon远程调用
Ribbon是客户端的负载均衡机制,它有几种负载均衡机制。默认是轮询,我们也可以自定义规则。通过合理的分配网络请求来减小服务器的压力。项目都是注册到eureka服务器上(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.cnblogs.com%2Fwlwl%2Fp%2F94733
Easter79 Easter79
3年前
SpringCloud微服务(02):Ribbon和Feign组件,实现服务调用的负载均衡
一、Ribbon简介1、基本概念\Ribbon是一个客户端的负载均衡(LoadBalancer,简称LB)器,它提供对大量的HTTP和TCP客户端的访问控制。2、负载均衡简介目前主流的负载均衡方案可分成两类:1)集中式\即在服务的消费方和提供方之间使用独立的LB设施,可以是硬
解密负载均衡技术和负载均衡算法
什么是负载均衡技术负载均衡器是一种软件或硬件设备,它起到了将网络流量分散到一组服务器的作用,可以防止任何一台服务器过载。负载均衡算法就是负载均衡器用来在服务器之间分配网络流量的逻辑(算法是一组预定义的规则),有时候也叫做负载均衡的类型。负载均衡
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k