全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

spring cloud 之 客户端负载均衡Ribbon深入理解

一、负载均衡

负载均衡(Load Balance): 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

1、服务端负载均衡:客户端请求到负载均衡服务器,负载均衡服务器根据自身的算法将该请求转给某台真正提供业务的服务器,该服务器将响应数据给负载均衡服务器,负载均衡服务器最后将数据返回给客服端。(nginx)

2、客服端负载均衡:基于客户端的负载均衡,简单的说就是在客户端程序里面,自己设定一个调度算法,在向服务器发起请求的时候,先执行调度算法计算出向哪台服务器发起请求,然后再发起请求给服务器。

基于客户端负载均衡的特点:

由客户端内部程序实现,不需要额外的负载均衡器软硬件投入。

程序内部需要解决业务服务器不可用的问题,服务器故障对应用程序的透明度小。

程序内部需要解决业务服务器压力过载的问题。

二、Ribbon实现客户端的负载均衡

我们使用spring boot 来测试。

pom文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.jalja.org</groupId>
 <artifactId>spring-consumer-server-ribbon</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.2.RELEASE</version>
  </parent>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
  </properties>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>Camden.SR4</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <dependencies>
     <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-ribbon</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
  </dependencies>
  
</project>

application.yml

stores:
 ribbon:
  listOfServers: www.baidu.com,www.jalja.org,www.163.com

Ribbon的负载均衡策略

1、RoundRobinRule(轮询模式)

public class RoundRobinRule extends AbstractLoadBalancerRule roundRobin方式轮询选择server 轮询index,选择index对应位置的server 该策略也是ribbon的默认策略

SpringCloudRibbonApplication.java

@SpringBootApplication
@EnableDiscoveryClient
@RestController
public class SpringCloudRibbonApplication {
  public static void main(String[] args) {
    SpringApplication.run(SpringCloudRibbonApplication.class, args);
  }
  @Autowired
  private LoadBalancerClient loadBalancer;
  @RequestMapping(value="static")
  public String staticRibbon(){
     ServiceInstance instance = loadBalancer.choose("stores");
     URI storesUri = URI.create(String.format("http://%s:%s", instance.getHost(), instance.getPort()));
     System.out.println(storesUri);
    return "static";
  }
}

连续请求6次执行结果:

http://www.baidu.com:80
http://www.jalja.org:80
http://www.163.org:80
http://www.baidu.com:80
http://www.jalja.org:80
http://www.163.org:80

2、RandomRule(随机策略)

public class RandomRule extends AbstractLoadBalancerRule 随机选择一个server 在index上随机,选择index对应位置的server。

在配置文件application.yml加入

NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
stores:
 ribbon:
  listOfServers: www.baidu.com,www.jalja.org,www.163.org
  #随机
  NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

在SpringCloudRibbonApplication.java 中加入

@Bean
  public IRule ribbonRule() {
    return new RandomRule();//这里配置策略,和配置文件对应
  }

执行6次的结果:

http://www.baidu.com:80
http://www.baidu.com:80
http://www.baidu.com:80
http://www.163.org:80
http://www.baidu.com:80
http://www.jalja.org:80

3、BestAvailableRule(并发量)

public class BestAvailableRule extends ClientConfigEnabledRoundRobinRule 选择一个最小的并发请求的server 逐个考察Server,如果Server被tripped了,则忽略,在选择其中ActiveRequestsCount最小的server

在配置文件application.yml加入

NFLoadBalancerRuleClassName: com.netflix.loadbalancer.BestAvailableRule

在SpringCloudRibbonApplication.java 中加入

@Bean
  public IRule ribbonRule() {
    return new BestAvailableRule();//这里配置策略,和配置文件对应
  }

执行6次的结果:

http://www.baidu.com:80
http://www.baidu.com:80
http://www.baidu.com:80
http://www.baidu.com:80
http://www.baidu.com:80
http://www.baidu.com:80

4、AvailabilityFilteringRule(服务器状态)

public class AvailabilityFilteringRule extends PredicateBasedRule 过滤掉那些因为一直连接失败的被标记为circuit tripped的后端server,并过滤掉那些高并发的的后端server(active connections 超过配置的阈值) 使用一个AvailabilityPredicate来包含过滤server的逻辑,其实就就是检查status里记录的各个server的运行状态

5、WeightedResponseTimeRule(根据响应时间)

public class WeightedResponseTimeRule extends RoundRobinRule 根据响应时间分配一个weight,相应时间越长,weight越小,被选中的可能性越低。 一个后台线程定期的从status里面读取评价响应时间,为每个server计算一个weight。Weight的计算也比较简单responsetime 减去每个server自己平均的responsetime是server的权重。当刚开始运行,没有形成statas时,使用roubine策略选择server。

6、RetryRule(根据策略+重试)

public class RetryRule extends AbstractLoadBalancerRule 对选定的负载均衡策略机上重试机制。
在一个配置时间段内当选择server不成功,则一直尝试使用subRule的方式选择一个可用的server

7、ZoneAvoidanceRule(Zone状态+服务状态)

public class ZoneAvoidanceRule extends PredicateBasedRule
复合判断server所在区域的性能和server的可用性选择server
使用ZoneAvoidancePredicate和AvailabilityPredicate来判断是否选择某个server,前一个判断判定一个zone的运行性能是否可用,剔除不可用的zone(的所有server),AvailabilityPredicate用于过滤掉连接数过多的Server。

4、5、6、7这些策略使用方式与上述方式相同这里不在演示

以上这篇spring cloud 之 客户端负载均衡Ribbon深入理解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# spring  # cloud负载均衡  # Spring Cloud Alibaba Nacos服务治理平台服务注册、RestTemplate实  # SpringCloud feign微服务调用之间的异常处理方式  # Spring Cloud多个微服务之间调用代码实例  # spring cloud eureka微服务之间的调用详解  # springcloud gateway如何实现路由和负载均衡  # Spring Cloud 负载均衡器 Ribbon原理及实现  # Spring Cloud实现微服务调用的负载均衡(详解)  # 负载均衡  # 客户端  # 配置文件  # 响应时间  # 客服  # 可用性  # 给大家  # 过滤掉  # 均衡器  # 不可用  # 重试  # 后端  # 多个  # 的说  # 不需要  # 希望能  # 然后再  # 数据处理  # 刚开始  # 这篇 


相关文章: 内网网站制作软件,内网的网站如何发布到外网?  如何选择香港主机高效搭建外贸独立站?  SQL查询语句优化的实用方法总结  外贸公司网站制作,外贸网站建设一般有哪些步骤?  如何用虚拟主机快速搭建网站?详细步骤解析  平台云上自助建站如何快速打造专业网站?  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  建站主机解析:虚拟主机配置与服务器选择指南  道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?  青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?  网站制作软件免费下载安装,有哪些免费下载的软件网站?  广州网站建站公司选择指南:建站流程与SEO优化关键词解析  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  如何高效完成自助建站业务培训?  广州营销型建站服务商推荐:技术优势与SEO优化解析  建站VPS能否同时实现高效与安全翻墙?  如何在建站宝盒中设置产品搜索功能?  制作宣传网站的软件,小红书可以宣传网站吗?    交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?  历史网站制作软件,华为如何找回被删除的网站?  在线制作视频网站免费,都有哪些好的动漫网站?  网站好制作吗知乎,网站开发好学吗?有什么技巧?  网站代码制作软件有哪些,如何生成自己网站的代码?  枣阳网站制作,阳新火车站打的到仙岛湖多少钱?  如何快速打造个性化非模板自助建站?  如何快速查询网址的建站时间与历史轨迹?  如何高效生成建站之星成品网站源码?  高端企业智能建站程序:SEO优化与响应式模板定制开发  ,南京靠谱的征婚网站?  网站制作话术技巧,网站推广做的好怎么话术?  网站制作新手教程,新手建设一个网站需要注意些什么?  如何生成腾讯云建站专用兑换码?  用v-html解决Vue.js渲染中html标签不被解析的问题  如何在阿里云完成域名注册与建站?  建站之星微信建站一键生成小程序+多端营销系统  安云自助建站系统如何快速提升SEO排名?  如何通过WDCP绑定主域名及创建子域名站点?  云南网站制作公司有哪些,云南最好的招聘网站是哪个?  建站之星如何修改网站生成路径?  深圳 网站制作,深圳招聘网站哪个比较好一点啊?  网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?  网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何在Golang中指定模块版本_使用go.mod控制版本号  建站之星安装后界面空白如何解决?  在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?  如何挑选高效建站主机与优质域名?  七夕网站制作视频,七夕大促活动怎么报名?  公众号网站制作网页,微信公众号怎么制作? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。