循环调度是一种简单的负载平衡和任务调度方法,可将请求、工作负载或进程均匀地分配到多个服务器或资源上。它遵循循环顺序,这意味着池中的每台服务器轮流按顺序处理传入的请求,然后再循环回到第一个服务器。
假设一个系统有三台服务器:A、B 和 C。如果请求按以下顺序到达:
1 → 服务器 A
2 → 服务器 B
3 → 服务器 C
4 → 服务器 A(循环重复)
这种模式可确保没有任何单个服务器承受过重负载,从而成为一种简单有效的流量分配方法。
基本循环:按照严格的顺序分配请求,不考虑服务器负载或容量。
加权轮询:根据预定义的服务器权重分配请求,优先考虑功能更强大的服务器。例如,如果服务器 A 的速度是 B 和 C 的两倍,它将接收两倍的请求。
动态循环:根据实时服务器健康和性能指标调整请求分布。
简单性:易于在 DNS、代理服务器或应用程序级负载平衡器中实现和配置。
公平分配:确保所有服务器获得均衡的流量份额,防止过载。
可扩展性:适用于具有多个后端服务器的水平扩展环境。
负载分布不均匀:由于基本循环算法不考虑实时性能,因此某些服务器可能会陷入困境,而其他服务器仍未得到充分利用。
会话持久性问题:无状态应用程序与循环算法配合良好,但如果用户会话绑定到特定服务器(例如登录会话),则此方法可能会导致没有粘性会话或会话复制的问题。
健康检查限制:标准循环本身并不能检测服务器故障,因此,除非与健康监测相结合,否则故障的服务器仍可能接收请求。
DNS 负载平衡:在多个 IP 之间分配流量,以实现冗余和性能优化。
应用程序负载平衡:用于 Web 服务器、代理和云环境中,以在后端实例之间分散请求。
任务调度:应用于需要将作业或进程均匀分布在工作节点上的计算集群。
循环仍然是负载平衡的基础技术,尤其是在简单性和公平分配比实时性能优化更重要的环境中。然而,在高流量或性能敏感的应用程序中,自适应或加权策略通常是首选。