知识卡片
负载均衡算法四大类,及轮询/加权轮询的双刃剑特性
内容
负载均衡算法数量很多、还能按业务定制,但抛开细节差异,按算法追求的目标可以归为四大类:任务平分类(把任务绝对数量或按比例/权重平均分配给各服务器)、负载均衡类(按服务器当前压力分配,压力可以用CPU负载、连接数、I/O使用率、网卡吞吐量等指标衡量)、性能最优类(按响应时间分配,优先给响应最快的服务器派活)、Hash类(按任务关键信息做哈希运算,相同哈希值的请求固定分配到同一台服务器)。轮询是最基础的算法,收到请求后按顺序轮流分配,完全不关注服务器本身的状态——即使某台服务器因为程序bug陷入死循环、CPU负载爆表,只要它没宕机、还连着负载均衡系统,请求照样源源不断地分给它;即使集群里新机器是32核、老机器是16核,分配的任务量也完全一样。这里有个值得细究的区分:轮询不关注的是服务器”本身”的运行状态(负载高低、处理快慢),但如果服务器彻底宕机或和负载均衡系统断连,这种情况负载均衡系统是能感知并处理的(比如把它从可分配列表里剔除),否则就会出现明明宕机了还继续往上派任务的荒谬情况。轮询的优点和缺点是同一件事——”简单”。加权轮询是轮询的变体,专门为解决”不同服务器处理能力有差异”这个问题而生:按硬件配置给服务器设定权重(比如假设32核机器处理能力是16核机器的2倍,就按2:1的比例多分配任务给新机器),从而更充分利用高配机器的性能;权重也可以做成动态计算而非静态配置,但那样复杂度会进一步上升。加权轮询解决了”配置差异”这个问题,但和轮询一样,依然完全无法感知服务器运行时的实际状态差异(比如某台机器临时负载飙高)。
参考来源
- 位置:《从零开始学架构》第21讲《高性能负载均衡:算法》"任务平分类/负载均衡类/性能最优类/Hash类""轮询""加权轮询"(源文件:_epub-src/OEBPS/text00001.html + text00002.html,跨spine文件章节)
- 结论依据:原文列出四类算法目标后说明轮询"负载均衡系统收到请求后,按照顺序轮流分配到服务器上……只要服务器在运行,运行状态是不关注的……'简单'是轮询算法的优点,也是它的缺点",并说明加权轮询"主要目的就是为了解决不同服务器处理能力有差异的问题……同样存在无法根据服务器的状态差异进行任务分配的问题",直接支撑本卡片结论。
- 原始内容:负载均衡系统收到请求后,按照顺序轮流分配到服务器上……"简单"是轮询算法的优点,也是它的缺点……加权轮询是轮询的一种特殊形式,其主要目的就是为了解决不同服务器处理能力有差异的问题。