LoadBalancer

LoadBalancer下面更底层的7种内置的负载均衡策略

RandomRule - 随性而为

RoundRobinRule - 按部就班

RandomRule是随性而为挑选节点,RobinRule却按部就班从一个节点一步一步地向后选取节点,既不会跳过一个,也不会原地踏步,每一次只向后移动一步。

同学也许会问了,假如在多线程环境下,两个请求同时访问这个Rule是否会读取到相同节点呢?不会,这靠的是RandomRobinRule底层的自旋锁+CAS的同步操作。CAS的全称是compare and swap,是一种借助操作系统函数来实现的同步操作。前面我们讲到过Eureka为了防止服务下线被重复调用,就使用AtomicBoolean的CAS方法做同步控制,CAS+自旋锁这套组合技是高并发下最廉价的线程安全手段,因为这套操作不需要锁定系统资源。当然了,有优点必然也有缺点,自旋锁如果迟迟不能释放,将会带来CPU资源的浪费,因为自旋本身并不会执行任何业务逻辑,而是单纯的使CPU“空转”。所以通常情况下会对自旋锁的旋转次数做一个限制,比如JDK中synchronize底层的锁升级策略,就对自旋次数做了动态调整。

// CAS+自旋锁获取系统资源的打开方式,真实应用中还要注意防止无休止自旋:

// 或者for (;;) 做自旋

while (true) {

// cas操作

if (cas(expected, update)) {

// 业务逻辑代码

// break或退出return

}

}

Netflix真是特别喜欢用自旋CAS,毕竟作为中间件来说性能还是非常重要的。不过我实在没明白为什么名字里带个Robin,我猜想写代码的人或者他的宠物可能叫Robin?就像Oracle数据库有一个默认账号叫scott一样。

RetryRule - 卷土重来

RetryRule是一个类似装饰器模式的Rule,我们前面学习服务注册的时候了解过,装饰器相当于一层套一层的俄罗斯娃娃,每一层都会加上一层独特BUFF,我们这里复习一下装饰器的结构

RetryRule也是同样的道理,他的BUFF就是给其他负载均衡策略加上“重试”功能。而在RetryRule里还藏着一个subRule,这才是隐藏在下面的真正被执行的负载均衡策略,RetryRule正是要为它添加重试功能(如果初始化时没指定subRule,将默认使用RoundRibinRule)。

WeightedResponseTimeRule - 能者多劳

这个Rule继承自RoundRibbonRule,他会根据服务节点的响应时间计算权重,响应时间越长权重就越低,响应越快则权重越高,权重的高低决定了机器被选中概率的高低。也就是说,响应时间越小的机器,被选中的概率越大

由于服务器刚启动的时候,对各个服务节点采样不足,因此会采用轮询策略,当积累到一定的样本时候,会切换到WeightedResponseTimeRule模式。关于权重的计算方式,请大家参考源码阅读视频。

BestAvailableRule - 让最闲的人来

应该说这个Rule有点智能的味道了,在过滤掉故障服务以后,它会基于过去30分钟的统计结果选取当前并发量最小的服务节点,也就是最“闲”的节点作为目标地址。如果统计结果尚未生成,则采用轮询的方式选定节点。

关键字

过滤故障服务

选取并发量最小的节点

AvailabilityFilteringRule - 我是有底线的

这个规则底层依赖RandomRobinRule来选取节点,但并非来者不拒,它也是有一些底线的,必须要满足它的最低要求的节点才会被选中。如果节点满足了要求,无论其响应时间或者当前并发量是什么,都会被选中。

每次AvailabilityFilteringRule(简称AFR)都会请求RobinRule挑选一个节点,然后对这个节点做以下两步检查:

是否处于熔断状态(熔断是Hystrix中的知识点,后面章节会讲到,这里大家可以把熔断当做服务不可用)

节点当前的active请求连接数超过阈值,超过了则表示节点目前太忙,不适合接客

如果被选中的server不幸挂掉了检查,那么AFR会自动重试(次数最多10次),让RobinRule重新选择一个服务节点。

ZoneAvoidanceRule - 我的地盘我做主

这个过滤器包含了组合过滤条件,分别是Zone级别和可用性级别。

Zone Filter: 在Eureka注册中一个服务节点有Zone, Region和URL三个身份信息,其中Zone可以理解为机房大区(未指定则由Eureka给定默认值),而这里会对这个Zone的健康情况过滤其下面所有服务节点。

可用性过滤:这里和AvailabilityFilteringRule的验证非常像,会过滤掉当前并发量较大,或者处于熔断状态的服务节点。

负载均衡策略-七种策略相关推荐

  1. nginx负载均衡的5种策略

    nginx负载均衡的5种策略 nginx负载均衡 发布于 2018-04-19 要理解负载均衡,必须先搞清楚正向代理和反向代理. 负载均衡的几种常用方式 1.轮询(默认) 每个请求按时间顺序逐一分配到 ...

  2. 微服务(三) 【手摸手带你搭建Spring Cloud】 Ribbon 什么是负载均衡?spring cloud如何实现负载均衡?ribbon负载均衡有几种策略?Ribbon是什么?

    在上一章,我介绍了springcloud的eureka搭建.我们做了服务注册.最后我们还介绍了一些续约,失效剔除等参数配置.已经不需要再通过手动输入ip去访问服务,而是通过中心只需要通过服务名就可以获 ...

  3. Dubbo 负载均衡(4种策略算法)

    Dubbo负载均衡 1.什么是负载均衡? 负载均衡改善了跨多个计算资源(例如计算机,计算机集群,网络链接,中央处理单元或磁盘驱动)的工作负载分布.负载平衡旨在优化资源使用,最大化吞吐量,最小化响应时间 ...

  4. php负载均衡面板,nginx负载均衡的五种策略

    nginx可以根据客户端IP进行负载均衡,在upstream里设置ip_hash,就可以针对同一个C类地址段中的客户端选择同一个后端服务器,除非那个后端服务器宕了才会换一个. nginx可以根据客户端 ...

  5. Tomcat集群快速入门:Nginx负载均衡配置,常用策略,场景及特点

    Nginx负载均衡的配置,常用策略,场景,以及特点,放到这里是需要更细化的讲解,毕竟一期还没有做集群,而我们这一期做集群的时候,很多点要单独拿出来深入讲解,第一个轮询,默认的一个配置,简单也好理解,第 ...

  6. lvs工作在第几层_LVS 原理(调度算法、四种模式、四层负载均衡和七层 的区别)...

    目录 lvs的调度算法 lvs的四种模式 四层均衡负载和七层的区别 1.lvs调度算法(最常用的四种) 轮叫调度(rr) 调度器通过外部请求的顺序轮流分配到集群中的真实服务器上,对每台服务器都是均等的 ...

  7. Nginx负载均衡的4种方式 :轮询-Round Robin 、Ip地址-ip_hash、最少连接-least_conn、加权-weight=n

    负载均衡的概念: Load Balance负载均衡是用于解决一台机器(一个进程)无法解决所有请求而产生的一种算法. 我们知道单台服务器的性能是有上限的,当流量很大时,就需要使用多台服务器来共同提供服务 ...

  8. VMware ESX 主机的网卡负载均衡配置3种方法

    VMware ESX 5.0 网卡负载均衡配置3种方法 (1) 基于端口的负载均衡 (Route based on the originating virtual port ID)(这个是默认支持) ...

  9. IIS Web负载均衡的几种方式

    Web负载均衡的几种实现方式 摘要: 负载均衡(Load Balance)是集群技术(Cluster)的一种应用.负载均衡可以将工作任务分摊到多个处理单元,从而提高并发处理能力.目前最常见的负载均衡应 ...

最新文章

  1. 【FFmpeg】使用sws_scale将AVFrame转换后的图像数据放入cv::Mat中
  2. clion pycharm 报错 bash: line 0: cd: /xxx: No such file or directory
  3. (多线程)leetcode1114. 按序打印 认识AtomicInteger
  4. Facebook何恺明团队提出SlowFast网络,视频识别无需预训练
  5. 配置 HTTP 与 DNS 功能
  6. Android Studio没有看到设备
  7. 2015-05-16
  8. 文本的平均列数python-CDA数据分析师
  9. 神经网络算法的关键参数,神经网络计算方法
  10. PHP开发安全之近墨者浅谈(转)
  11. [HTML5-SVG]SVG是什么?SVG有什么用途?
  12. 使用prometheus(普罗米修斯)监控redis容器详解
  13. 计算机软考中级能评职称吗,软考中级是中级职称么?考此证后可以办理落户么?...
  14. 架构设计-架构愿景分析
  15. 使用 hugo 快速开发博客网页
  16. 债务大爆发,中国30%家庭不堪一击!
  17. 分词器——ik——分词算法
  18. 联想拯救者7000充不上电的解决办法
  19. 怎样消除幸存者偏见?——谈谈成败观
  20. Jasper 动态数据源

热门文章

  1. PERT2型热力管的材质及作用
  2. 乔春洋:品牌定位中的若干关系问题
  3. C++ 11 新玩法
  4. SQLite多线程并发操作
  5. 什么是服务治理平台?
  6. 流利阅读 2019.3.17 School lessons to cover sexting, FGM and mental health
  7. webstorm 安装vue
  8. linux开发板lcd上显示jpg图片,关于在嵌入式开发板上显示一张jpeg图片
  9. linux防火墙查看状态firewall
  10. 【C++】超级详细,多元一次方程的求解方法