负载均衡算法可以分为两类:静态负载均衡算法和动态负载均衡算法,另外还可以自定义负载均衡算法。

静态负载均衡算法

  1. 轮询(Round Robin):服务器按照顺序循环接受请求。
  2. 随机(Random):随机选择一台服务器接受请求。
  3. 权重(Weight):给每个服务器分配一个权重值,根据权重来分发请求到不同的机器中。
  4. IP哈希(IP Hash):根据客户端IP计算Hash值取模访问对应服务器。
  5. URL哈希(URL Hash):根据请求的URL地址计算Hash值取模访问对应服务器。
  6. 一致性哈希(Consistent Hash ):采用一致性Hash算法,相同IP或URL请求总是发送到同一服务器。

动态负载均衡算法

  1. 最少连接数(Least Connection):将请求分配给最少连接处理的服务器。
  2. 最快响应(Fastest Response):将请求分配给响应时间最快的服务器。
  3. 观察(Observed):以连接数和响应时间的平衡为依据请求服务器。
  4. 预测(Predictive):收集分析当前服务器性能指标,预测下个时间段内性能最佳服务器。
  5. 动态性能分配(Dynamic Ratio-APM):收集服务器各项性能参数,动态调整流量分配。
  6. 服务质量(QoS):根据服务质量选择服务器。
  7. 服务类型(ToS): 根据服务类型选择服务器。

自定义负载均衡算法

  1. 灰度发布:平滑过渡的发布方式,可以降低发布失败风险,减少影响范围,发布出现故障时可以快速回滚,不影响用户。
  2. 版本隔离:为了兼容或者过度,某些应用会有多个版本,保证1.0版本不会调到1.1版本服务。
  3. 故障隔离:生产出故障后将出问题的实例隔离,不影响其他用户,同时也保留故障信息便于分析。
  4. 定制策略:根据业务情况定制跟业务场景最匹配的策略。

PS:上面的算法还能组合成新算法,如:

  • 轮询+权重=加权轮询。
  • 最快响应+权重,可以根据响应时间动态调整服务器的权重,达到负载均衡。

中间件使用的负载均衡算法

  • Nginx
  1. RoundRobin:轮询。
  2. WeightedRoundRobin:加权轮询。
  3. IPHash:按访问IP的Hash选择服务器。
  4. URLHash:按请求URL的Hash选择服务器。
  5. Fair:根据后端服务器的响应时间判断负载情况,从中选出负载最轻的机器进行分流。
  • Dubbo
  1. RandomLoadBalance:加权随机。
  2. RoundRobinLoadBalance:加权轮询。
  3. LeastActionLoadBalance:最少链接数。
  4. ShortestResponseLoadBalance:最短响应时间。
  5. ConsistentHashLoadBalance:一致性Hash。
  • Ribbon
  1. RoundRobinRule:轮询。
  2. RandomRule:随机。
  3. WeightedResponseTimeRule:根据响应时间来分配权重的方式,响应的越快,分配的值越大。
  4. BestAvailableRule:会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务。
  5. RetryRule:先按照轮询策略获取服务,如果获取服务失败则在指定时间内进行重试,获取可用的服务。
  6. ZoneAvoidanceRule:根据性能和可用性选择服务。
  7. AvailabilityFilteringRule:会先过滤掉由于多次访问故障而处于断路器状态的服务,还有并发的连接数量超过阈值的服务,然后对剩余的服务列表按照轮询策略进行访问。

负载均衡算法居然有这么多种!!!负载均衡算法总结相关推荐

  1. java负载均衡原理_多种负载均衡算法及其 Java 代码实现

    首先给我们介绍下什么是负载均衡 负载均衡 树立在现有网络结构之上,它供给了一种廉价有用通明的办法扩展 网络设备和 效劳器的带宽.添加 吞吐量.加强网络数据处理才能.进步网络的灵敏性和可用性. 负载均衡 ...

  2. java 一致性hash算法 均衡分发_Dubbo一致性哈希负载均衡的源码和Bug,了解一下?...

    本文是对于Dubbo负载均衡策略之一的一致性哈希负载均衡的详细分析.对源码逐行解读.根据实际运行结果,配以丰富的图片,可能是东半球讲一致性哈希算法在Dubbo中的实现最详细的文章了. 文中所示源码,没 ...

  3. JAVA权重算法(如Dubbo的负载均衡权重)

    首先了解一下负载均衡. 百度百科: 负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡.分摊到多个操作单元上进行运行,例如FTP服务器.Web服务器.企业核心应用服务 ...

  4. 详解【负载均衡】(负载均衡算法、一致性hash、负载均衡架构分析)

    作者:duktig 博客:https://duktig.cn 优秀还努力.愿你付出甘之如饴,所得归于欢喜. 本文源码参看:https://github.com/duktig666/distribute ...

  5. PF_RING 的多种负载均衡方法

    PF_RING 的多种负载均衡方法 1.简介 负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡.分摊到多个操作单元上进行运行,例如FTP服务器.Web服务器.企业核 ...

  6. java轮训算法_负载均衡算法WeightedRoundRobin(加权轮询)简介及算法实现

    Nginx的负载均衡默认算法是加权轮询算法,本文简单介绍算法的逻辑,并给出算法的Java实现版本. 算法简介 有三个节点{a, b, c},他们的权重分别是{a=5, b=1, c=1}.发送7次请求 ...

  7. 架构设计:负载均衡层设计方案(8)——负载均衡层总结上篇

    1.概述 很明显通过前面的八篇文章的介绍,并不能覆盖负载均衡层的所有技术,但是可以作为一个引子,告诉各位读者一个学习和使用负载均衡技术的思路.虽然后面我们将转向"业务层"和&quo ...

  8. nodejs负载均衡(一):服务负载均衡

    什么是负载均衡 负载平衡(Load balancing)是一种 计算机技术,用来在多个计算机( 计算机集群).网络连接.CPU.磁盘驱动器或其他资源中分配负载,以达到最优化资源使用.最大化吞吐率.最小 ...

  9. 均衡原理_干货什么是负载均衡?负载均衡原理详解

    负载均衡是高可用网络基础架构的一个关键组成部分,有了负载均衡,我们通常可以将我们的应用服务器部署多台,然后通过负载均衡将用户的请求分发到不同的服务器用来提高网站.应用.数据库或其他服务的性能以及可靠性 ...

最新文章

  1. jquery extend函数
  2. 发起一个ajax请求,发送ajax请求
  3. caffe的python接口学习(2)生成solver文件
  4. linux创建数据库并设置密码,CentOS 8安装MySQL教程并创建数据库并添加用户
  5. 栈和队列之用一个栈实现另一个栈的排序
  6. matlab如何建立一个空矩阵,然后往里面赋值
  7. 论文浅尝 - AAAI2020 | 通过句子级语义匹配和答案位置推断改善问题生成
  8. 【转】(译)iOS Code Signing: 解惑详解
  9. 【MySQL】MySQL 界面连接工具 优化工具 监控工具 其他工具 简介
  10. Net学习日记_ADO.Net_2_练习(treeView)
  11. 2-7 StatusStrip 控件
  12. source命令执行SQL脚本文件
  13. Kafka配置1--Windows环境安装和配置Kafka
  14. 剪贴板查看器clipbrd.exe
  15. 【每日一P】利用通道抠图更换天空
  16. 微信开放平台认证后怎么实现扫码登录功能
  17. adb 查看浏览器内核
  18. TCP协议格式和特点
  19. NDT-MCL定位算法论文解读
  20. Android-AIUI技能设计技巧及处理策略总结

热门文章

  1. 1.1 认识Linux网络操作系统
  2. chatgpt + 飞书 一个完整可部署的学习项目
  3. 阅文集团财报解读:美梦诞生的地方,让更多美梦被“看见”
  4. tf第十讲:TFRecord(tf.train.Exampletf.train.SequenceExample)
  5. 20230107英语学习
  6. 如何用最暴力的方法实现恺撒密码——python
  7. python分词设计_Python smallseg分词用法实例分析
  8. 又一款抓包工具,比Fiddler更好用的神器:Charles
  9. 时间序列之指数平滑法(Exponential Smoothing)
  10. html textarea 插件,在TextArea中呈现HTML