知识卡片
均衡策略的核心矛盾:均匀分布与节点差异感知与一致性
内容
负载均衡器”选择谁来处理请求”这件事,各种具体算法背后其实是在三个诉求 间取舍。追求简单均匀:轮询按顺序循环分配,假设所有服务器能力相同;随机 均衡在数据量足够大时统计上趋近均匀,两者都不关心节点差异。追求感知节点 差异:权重轮询/权重随机给不同处理能力的服务器分配不同权值(如1:3:6), 让高性能机器分担更多流量;响应速度均衡则更进一步,靠均衡器主动探测 (如Ping)各节点最新响应耗时来决定路由,能反映节点当前真实负载状态, 但探测到的只是”均衡器到服务器”的耗时,不完全等同于”客户端到服务器”的 真实体验。追求会话一致性:一致性哈希把请求的某个特征值(MAC、IP、更 上层协议参数)映射到固定节点,保证同一特征值总落在同一台服务器上,且 某节点故障时只影响该节点的哈希值,不会引发整个集群的哈希键重新分布—— 这对需要保持连接亲和性(如WebSocket、有状态会话)的场景是不可替代的。 没有一种策略是万能的,选择哪种取决于集群节点是否同构、是否需要感知 实时负载、请求是否要求路由到同一台机器。
参考来源
- 位置:《凤凰架构:构建可靠的大型分布式系统》第4章"透明多级分流系统"
4.5.4节"均衡策略与实现"(源文件:_epub-src对应OEBPS/Text/chapter52.xhtml)
- 结论依据:原文逐一定义轮询、权重轮询、随机、权重随机、一致性哈希、
响应速度六种均衡算法及其适用场景(如权重轮询适合异构服务器、一致性
哈希保证故障时只影响局部哈希分布),直接支撑本卡片对三类核心诉求的
归纳。
- 原始内容:一致性哈希均衡:将请求中的某些数据……作为特征值来计算需要
落在的节点,算法一般会保证同一个特征值每次都一定落在相同的服务器
上……保证当服务集群某个真实服务器出现故障时,只影响该服务器的哈希值,
而不会导致整个服务器集群的哈希键值重新分布。