Ribbon负载均衡服务调用

SpringCLoud Ribbon 是一款基于Netflix Ribbon 实现的一套客户端负载均衡的工具

 

简单的说,Ribbon是Netflix发布的开源的项目,主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项,如连接超时、重试等。简单的说,及时在配置文件中列出Load Balance(简称LB)后面的所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询。随机连接等)去连接这些机器。我们很容易使用Ribbon实现自定义的负载均衡算法。

https://github.com/Netflix/ribbon/wiki/Getting-Started

LB负载均衡(Load Balance)是什么

简单的说就是将用户的请求平摊的分配到多个服务器上,从而达到系统的高可用。

常见的负载均衡软件有Nginx

 

Ribbon 客户端本地负载均衡  VS  Nginx服务端负载均衡区别

  Nigix是服务器端负载均衡,客户端所有的请求都会交给nginx,然后由nginx实现转发请求。即负载均衡是由服务器端实现的。

  Ribbon本地负载均衡,在调用微服务接口的时候,会在注册中心上获取注册信息服务列表之后缓存到JVM本地,从而在本地实现RPC远程服务调用技术。

 

Ribbon在工作时分成两步
第一步先选择 EurekaServer ,它优先选择在同一个区域内负载较少的server.
第二步再根据用户指定的策略,在从server取到的服务注册列表中选择一个地址。
其中Ribbon提供了多种策略:比如轮询、随机和根据响应时间加权。
 
Ribbon的核心组件IRule
IRule:根据特定算法中从服务列表中选取一个要访问的服务
1、com.netflix.loadbalancer.RoundRobinRule:轮询
2、com.netflix.loadbalancer.RandomRule: 随机
3、com.netflix.loadbalancer.RetryRule: 先按照RoundRobinRule的策略获取服务,如果获取服务失败则在指定时间内会进行重试,获取可用的服务 
4、WeightedResponseTimeRule : 对RoundRobinRule的扩展,响应速度越快的实例选择权重越大,越容易被选择 
5、BestAvailableRule :会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务 
6、AvailabilityFilteringRule: 先过滤掉故障实例,再选择并发较小的实例
7、ZoneAvoidanceRule: 默认规则,复合判断server所在区域的性能和server的可用性选择服务器
 
 
Ribbon负载均衡算法原理
rest接口第几次请求数 % 服务器集群总数量 = 实际调用服务器位置下标 ,每次服务重启动后rest接口计数从1开始。
 
List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
 
如: List [0] instances = 127.0.0.1:8002
   List [1] instances = 127.0.0.1:8001
 
8001+ 8002 组合成为集群,它们共计2台机器,集群总数为2, 按照轮询算法原理:
 
当总请求数为1时: 1 % 2 =1 对应下标位置为1 ,则获得服务地址为127.0.0.1:8001
当总请求数位2时: 2 % 2 =0 对应下标位置为0 ,则获得服务地址为127.0.0.1:8002
当总请求数位3时: 3 % 2 =1 对应下标位置为1 ,则获得服务地址为127.0.0.1:8001
当总请求数位4时: 4 % 2 =0 对应下标位置为0 ,则获得服务地址为127.0.0.1:8002
如此类推......
 

posted @ 2022-07-15 13:26  雨韵蓝田  阅读(47)  评论(0编辑  收藏  举报