4.5 负载均衡调度算法

这一节内容介绍负载均衡的另一个重要职责「选择谁来处理用户请求」,也就是负载均衡器所采用的调度算法。

负载均衡的调度算法是一个相对活跃的研究领域,从简单的随机选择、Round Robin, 到更复杂的考虑各种延迟和后端负载状态的算法,笔者无法逐一展开,所以本节仅从功能和应用的角度介绍部分常见的算法。

  • 轮询均衡(Round-Robin):按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是实现简单。轮询算法假设所有的服务器处理请求的能力都一样的,调度器会将所有的请求平均分配给每个真实服务器。

  • 最小连接均衡(Least-Connection):该算法中调度器需要记录各个服务器已建立连接的数目,通过服务器当前活跃的连接数来估计服务器的情况。当一个请求被调度到某台服务器,其连接数加 1;当连接中断或者超时,其连接数减 1。该算法的策略把新的连接请求分配到当前连接数最小的服务器。

  • 一致性哈希均衡(Consistency Hash):将请求中的某些特征数据(例如 IP、MAC 或者更上层应用的某些信息)作为特征值来计算需要落在的节点。一致性哈希算法会保证同一个特征值每一次都会落在相同的服务器上。

  • 随机均衡(Random):此种负载均衡算法类似于轮询调度,不过在分配处理请求时是随机的过程。由概率论可以得知,随着客户端调用服务端的次数增多,其实际效果趋近于平均分配请求到服务端的每一台服务器,也就是达到轮询的效果。

以上算法假设的是所有服务器处理性能均相同,不管服务器的当前连接数和响应速度,调度器会将所有的请求平均分配给每个服务器。但如果服务器处理能力不一致呢?譬如:服务器 A 每秒可处理 10 个请求,服务器 B 每秒可处理 100 个请求,如果不考虑服务器的处理能力,负载均衡算法实际上就是一种伪均衡。

考虑服务器的处理能力不同,负载均衡策略又有了对服务器「加权」的补充(不包括一致性哈希均衡)。加权调度算法增加了按权值高低分配的因素,权值高的服务器会比权值低的服务器处理更多的连接,从而保证各个性能不一致的服务器集群整体处于均衡状态。常用的加权负载均衡策略包括加权轮询调度(Weight Round Robin)、加权最小连接调度(Weight Least-Connection)、加权随机策略(Weight Random)等。

总字数:790
Last Updated:
Contributors: isno