负载均衡
Dubbo的负载均衡
- Registry 注册中心
- Provider 服务提供者 / Client端
- Consumer 消费者 / Server 端
负载均衡定义
:::info 负载均衡功能:Consumer通过服务发现从注册中心拉取服务列表(Dubbo消费端将服务封装Invoker对象),Consumer在RPC调用服务之前,通过负载均衡从服务列表中选择一台服务器。 :::
负载均衡算法
- 随机算法
- 如果各台服务器权重一样,使用随机算法选择一台服务器;否则,按照权重比率选择服务器。适应于服务器参数一致场景。
- 加权随机(WR)
- WeightRandom,机器随机被筛选,但是做一组加权值,根据权值不同,选中的概率不同。在这个概念上,可以认为随机是一种等权值的特殊情况。
- 一致性哈希算法
- 相同参数的请求总是发到同一提供者,当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。缺省用 160 份虚拟节点。适应于服务器参数一致场景。
- 轮询(RoundRobin)
- 实现:链表
- 加权轮询算法(WRR):
- 如果各台服务器权重一致,按照轮询选择服务器,否则,按照权重加权选择。适应于服务器参数不一致场景。
- 维护一个链表,每个机器根据权重不同,占据的个数不同。轮询时权重大的,个数多,自然取到的次数变大。
- 举个例子:a,b,c 三台机器,权重分别为4,2,1,排位后会是a,a,a,a,b,b,c,每次请求时,从列表中依次取节点,下次请求再取下一个。到末尾时,再从头开始。
- 最小连接数算法 LeastConnections
- 获取各台服务的活跃数(未处理的请求数),如果都不相等,选择最小活跃数对应的服务器,否则,判断各台服务器的权重是否相同,如果不同,按照权重加权随机选择,否则,随机选择。适应于服务器参数一致场景。
- LeastConnections,即统计当前机器的连接数,选最少的去响应新的请求。前面的算法是站在请求维度,而最小连接数是站在机器的维度。
消息队列的基本知识
应用场景
在微服务架构中,RPC是简历实时连接
RPC链接
- 耗时
- 占用资源
所以一些链路用消息中间件用来做解耦
- 通知链路
- 不需要回执信息
基本构成
和RPC组件一样
- 注册中心
- TOPIC
- 大类:按照系统分类
- EventCode
- 小类:按照功能分类
- TOPIC
- 消息发送者
- 消息订阅者
可靠消息组件
推是Broker来推
- 优点:Broker 天然感知所有的订阅关系
- 缺点:不感知Consumer的消息处理能力、是否有消息积压
- 拉是订阅端来拉
- 优点:Consumer可自助控制消息消费的速率
- 缺点:订阅端就要感知消息的订阅关系,可能存在延迟
消息队列or消息管理器
- 队列的特点:FIFO
- 管理器:不关心时序,实时推送消息