上一篇 负载均衡篇-问题是什么 提到,负载均衡的核心点之一就是分配规则的制定,即压力的分配算法是什么?
网络上该类文章很多,在此就不细致描述了。本篇主要对算法归类汇总,并从算法如何决策这一方面进行学习。
本篇只是起到承上启下的作用,更进一步的研究在后续的文章中涉及。
规则分类
常见的算法可以分为以下几类:
- 轮询类(包括加权轮询)
- 动态感知类
- 负载均衡端为主的感知,如最小连接数
- 服务器为主的感知,如负载最低,性能最优
- hash类:将相同hash值的请求转发到同一台服务器上
其中,轮询类算法仅仅是轮流转发请求,或者根据权重比例来转发请求,实现起来比较简单。
动态感知类需要感知后端服务器的实际情况,从而去动态调整,难点在于如何感知。
hash类利用可以利用源地址IP或者一些业务标识来进行hash,关键在于应用场景。
如何进行健康检查
- 定时ping请求;或者定时发送HTTP请求;
- TCP连接出现n次问题或者HTTP 状态码异常;
如何决策
动态感知类
负载均衡端为主的感知,主要是将信息记录在负载均衡端,从而根据信息情况进行转发请求。比如记录和后端服务器建立的连接数来转发请求。
服务端为主的感知,实际上是负载均衡根据请求的相关信息来决定如何转发,比如根据每个请求的响应时间来进行性能是否最优的判断,响应时间的难点在于如何确定任务采集间隔。
动态感知类集中了很多有意思的算法,比如 The Power of Two Random Choices
算法等。
hash类
hash类负载均衡难点在于,既然需要使用hash分发请求,必然引入了状态的存储,所以一般比较偏向于缓存系统或者需要实现类似 session 概念的系统。
扫描二维码关注公众号,回复:
8591886 查看本文章
该类中有意思的点在于 hash 算法的实现,值得深入研究的是 一致性hash
算法。
本篇提到的算法如下:
- The Power of Two Random Choices
- 一致性hash算法
这些算法会在后续进行研究,下一章节我们从负载均衡器的分类入手,从中选择 lvs 负载均衡来研究。