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

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

静态负载均衡算法

  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:会先过滤掉由于多次访问故障而处于断路器状态的服务,还有并发的连接数量超过阈值的服务,然后对剩余的服务列表按照轮询策略进行访问。

 

你可能感兴趣的:(架构设计,java,nginx,负载均衡,负载均衡算法,算法)