ALB 中的负载均衡会话亲和策略
本指南介绍了 ALB 中可用的各种负载均衡算法,以及如何配置它们以优化应用原生应用 Pod 之间的流量分配。
目录
概述可用算法轮询(默认)源 IP 哈希基于 Cookie 的亲和基于 Header 的亲和EWMA(指数加权移动平均)配置方式1. 使用 Ingress 注解2. 使用 ALB Frontend/Rule 自定义资源最佳实践概述
ALB 支持多种负载均衡算法,用于将传入流量分配到后端 Pod。算法的选择取决于您的应用需求,例如会话持久性、性能优化或负载均匀分布。
可用算法
轮询(默认)
- 策略:
rr - 描述:按顺序循环将请求分发到所有可用的 Pod。
- 使用场景:适用于无状态原生应用,每个请求都可以由任意 Pod 处理。
源 IP 哈希
- 策略:
sip-hash - 描述:将来自相同源 IP 地址的请求始终路由到同一个 Pod。
- 行为:如果存在 X-Forwarded-For 头,则使用该头中的第一个 IP,否则使用客户端的源 IP。
- 使用场景:需要基于客户端 IP 的会话持久性时使用。
基于 Cookie 的亲和
- 策略:
cookie - 属性:
cookie-name(默认值为JSESSIONID) - 描述:将具有相同 Cookie 值的请求路由到同一个 Pod。
- 行为:
- 如果指定的 Cookie 不存在,ALB 会将其添加到响应中
- Cookie 格式为:
timestamp.worker_pid.random_number
- 使用场景:适用于需要基于 Cookie 实现会话粘性的应用。
基于 Header 的亲和
- 策略:
header - 属性:
header-name - 描述:将具有相同 Header 值的请求路由到同一个 Pod。
- 使用场景:适用于需要基于特定 HTTP 头进行路由的应用。
EWMA(指数加权移动平均)
- 策略:
ewma - 描述:基于 Pod 响应时间,使用“二选一”算法(Power of Two Choices, P2C)结合 EWMA 进行流量路由。
- 行为:
- 为每个 Pod 维护基于响应时间的 EWMA 分数
- 将流量路由到 EWMA 分数较低的 Pod
- 分数随时间呈指数衰减
- 使用场景:适合对延迟敏感的应用
- 参考:Twitter Finagle EWMA 文档
配置方式
1. 使用 Ingress 注解
2. 使用 ALB Frontend/Rule 自定义资源
最佳实践
- 对于请求模式均匀的无状态原生应用,选择轮询算法
- 需要基于客户端 IP 的会话持久性时,使用源 IP 哈希
- 对于需要会话粘性的 Web 应用,采用基于 Cookie 的亲和
- 对于响应时间波动较大的服务,考虑使用 EWMA 以优化延迟