大家好,又见面了,我是你们的朋友全栈君。
Dubbo 框架 的负载均衡策略 有以下几种:
1、Random 随机策略:
该策略比较均匀,可以动态的调节 权重;
2、RoundRobin 轮询策略:
可以按照权重 设置轮询的的比率;
3、LeastActive 最小活跃数 策略:
该策略是按照服务提供者的并发数目,该数目越小那么落在该 服务提供者的身上越大的概率;
4、ConsistentHash 一致性策略:
hash一致性算法 ,请求分发到同一台服务上去,当该服务宕机 ,通过虚拟节点 把该机器的请求 均匀的分发到其他服务上去;
hash 一致性策略:
说到这个,就会说到 hash 环,这里我粗略的画下 hash 环;
就是 根据请求的 uid 计算 hash(uid) ,计算的hash 值 在hash 环 上,找出 hash(uid)顺时针方向 距离哪一个 hash(IP) 最近,将最近的这个IP 作为路由 IP;
1、若 p1 宕机,该请求 就会分发到 p3 机器上去;
2、若在p1 和 hash(uid ) 之间增 p4 机器,那么该请求就会被 p4 机器处理;
2、虚拟节点
2.1、 虚拟节点的出现,就为了解决一件事:
解决hash一致性倾斜问题。
hash一致性 倾斜问题是什么? 就是机器在 hash 环上分布不均匀,导致 服务提供者 处理的请求数目差异过大 问题;
如下图:
大部分请求都被 hash(p1) 这台机器处理,这样的分布式有设么意义呢,是吧;
这个问题,需要通过增加虚拟节点的方式来解决【当然有人说加 机器,这不成本较高么】,虚拟节点的位置也尤为关键,若虚拟节点分布均匀的话,这样看以均匀的处理 hash 环上的请求,当分部不均匀的时候,很容易造成 上图一样 的弊端;
均匀一致性 Hash 的目标是如果服务器有 N 台,客户端的 Hash 值有 M 个,那么每个服务器应该处理大概 M/N 个用户的请求;
但Dubbo 提供的 hash 一致性就是 非均匀的;
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/157344.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...