Load Balancing for Latency
本文介绍了在某些特定情况下比 Round Robin 更适用的负载均衡算法。负载均衡要完成的两个大目标是:Scale(支持更多数量的 backend),和 Resilience(坏掉的一些 backends 不影响服务总体)。本文探讨了如果引入 Latency 用于负载均衡也会有很不错的效果。一般健康检查校验服务是否挂了,而 Latency 能校验服务现在合不合适承接流量。本文的立论是:一个好的负载均衡也应该同等检查 failure 和 latency。
本文介绍的两种算法分别是:
- least loaded, 负载均衡维护每台机器的流量,路由新流量去负载最低的机器。
- peak exponentially-weighted moving average (“peak EWMA”): 负载均衡维护每台机器的 round-trip time,需要的话乘上权重,路由新流量去平均响应时间最短的那台机器。
一般最常见的还是 round robin;这两种算法见于 Twitter Finagle 的 RPC 客户端中。 这两种算法需要使用 OSI Layer 5 Session 层的一些信息,例如queue depth / RPC latencies。