负载均衡和一致性哈希

负载均衡和一致性哈希 反向代理 reverse proxy 是指以代理服务器来接收由客户端发送来的请求,并通过一定的策略将其转变发给实际处理请求的后端服务器;主要应用于负载均衡、动态缓存、安全认证、内网穿透、SSL 加密等;而负载均衡 load balancing 是指在多个 slot(槽,一般是某种计算资源)中分配负载,以优化资源利用率和避免单点故障问题的方法,是高可用性分布式系统的必备中间件;常用的开源 load balancer 有 nginx,LVS,Haproxy 等;负载均衡可以视为反向代理的一种应用,负载均衡的方法大致可以分为传统负载均衡算法和哈希算法两种,本文简单地总结了这些算法的原理。 1 传统负载均衡算法 随机 random:将 key 随机分配到某一个 slot 上,根据概率论可知,吞吐量越大,随机算法的效果越好; 加权随机 weighted random:为每一个 slot 分配一个权重,在随机的时候考虑权重的影响;可以通过在所有 slot 的权重总和中随机出一个数字 k,找到 k 所在的 slot 位置来实现; 轮询 round robin:按顺序依次将 key 分配给每一个 slot; 加权轮询 weighted round robin:为每一个 slot 分配一个权重,在按序分配时为权重更高的 slot 分配更多的 key; 平滑加权轮询 smooth weighted round robin:一种能够均匀地分散调度序列的加权轮询方法,分为以下几个步骤: 选出当前权重最高的 slot,将 key 分配给它; 将选出的 slot 的权重数值减去其初始权重; 将所有 slot 的权重数值都加上它们的原始权重; 重复以上步骤; 最少连接数 least connections:将 key 分配给当前具有最少连接数量的 slot; 2 Mod-N 哈希 在有些场景下,传统负载均衡算法无法满足我们的需求,例如: ...

October 25, 2020 · 4 min