负载均衡系统的经济学与 Erlang C
在保持单台服务器利用率不变的情况下,增加负载均衡系统中的服务器数量可以降低平均延迟并改善尾部百分位数。在一个负载随服务器数量线性增加的系统中,随着系统规模的扩大,在队列中花费的时间会渐进地趋于零,这意味着在相同的利用率水平下,更大的集群能提供更好的延迟表现。
M/M/c 排队系统中的延迟行为
在 M/M/c 排队系统(其特征是泊松到达过程、指数分布的服务时间以及 c 台后端服务器)中,规模与延迟之间的关系是非线性的。当一个具有无限队列的负载均衡器将流量分配给 c 台服务器(每台服务器能够处理一个并发请求)时,即使单台服务器的负载保持不变(例如,在 80% 的利用率下),客户端观察到的平均请求时间也会随着 c 的增加而减少。
这一行为可以通过 Erlang C 公式来解释,该公式计算了新到达的请求必须进入队列而不是立即被处理的概率。随着服务器数量的增加,请求进入队列的概率会显著下降:
- 小规模: 在特定的利用率率下,服务器较少的系统请求进入队列的概率更高。
- 大规模: 在相同的利用率率下,拥有更多服务器的系统在吸收突发流量方面更有效率,从而导致较低的队列概率。
对平均延迟和尾部延迟的影响
虽然平均延迟通常是一个有争议的指标,但蒙特卡洛模拟表明,这种延迟的改善并不局限于平均值。中位数 (p50) 和高百分位数 (p99 和 p99.9) 随着服务器数量的增加也呈现出类似的下降趋势。这表明,通过扩展服务器数量可以有效地降低尾部延迟,而不会引入隐藏的性能退化。
云服务的经济学意义
扩展服务器数量提供了一个明显的经济优势:运营商可以在相同的资源利用率下实现更低的延迟,或者在相同的延迟目标下实现更高的利用率。由于这些延迟收益大多发生在 c 相对较小的值时,因此这种优势不仅适用于超大规模基础设施,也适用于中小规模的服务。
模型假设与约束
M/M/c 模型依赖于特定的假设,这些假设可能并不总是与现实世界的生产环境一致:
- 到达过程: 假设为泊松到达过程。
- 服务时间: 假设为指数服务时间。虽然现实中的服务通常表现出对数正态服务时间分布,但随着规模扩大而改善延迟的总体趋势通常会持续存在。
- 稳定性要求: 为了使系统保持稳定并避免无限队列,平均到达率 ($λ$) 与服务器数量 ($c$) 和平均服务率 ($μ$) 的乘积之比必须小于 1 ($λ/cμ < 1$)。如果到达率超过了系统的总处理能力,延迟将无限制地增长。