负载均衡

Dubbo的负载均衡

  1. Registry 注册中心
  2. Provider 服务提供者 / Client端
  3. Consumer 消费者 / Server 端

    负载均衡定义

    :::info 负载均衡功能:Consumer通过服务发现从注册中心拉取服务列表(Dubbo消费端将服务封装Invoker对象),Consumer在RPC调用服务之前,通过负载均衡从服务列表中选择一台服务器。 :::

负载均衡算法

  1. 随机算法
    1. 如果各台服务器权重一样,使用随机算法选择一台服务器;否则,按照权重比率选择服务器。适应于服务器参数一致场景。
  2. 加权随机(WR)
    1. WeightRandom,机器随机被筛选,但是做一组加权值,根据权值不同,选中的概率不同。在这个概念上,可以认为随机是一种等权值的特殊情况。
  3. 一致性哈希算法
    1. 相同参数的请求总是发到同一提供者,当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。缺省用 160 份虚拟节点。适应于服务器参数一致场景。
  4. 轮询(RoundRobin)
    1. 实现:链表
  5. 加权轮询算法(WRR):
    1. 如果各台服务器权重一致,按照轮询选择服务器,否则,按照权重加权选择。适应于服务器参数不一致场景。
    2. 维护一个链表,每个机器根据权重不同,占据的个数不同。轮询时权重大的,个数多,自然取到的次数变大。
      1. 举个例子:a,b,c 三台机器,权重分别为4,2,1,排位后会是a,a,a,a,b,b,c,每次请求时,从列表中依次取节点,下次请求再取下一个。到末尾时,再从头开始。
  6. 最小连接数算法 LeastConnections
    1. 获取各台服务的活跃数(未处理的请求数),如果都不相等,选择最小活跃数对应的服务器,否则,判断各台服务器的权重是否相同,如果不同,按照权重加权随机选择,否则,随机选择。适应于服务器参数一致场景。
    2. LeastConnections,即统计当前机器的连接数,选最少的去响应新的请求。前面的算法是站在请求维度,而最小连接数是站在机器的维度。

消息队列的基本知识

应用场景

在微服务架构中,RPC是简历实时连接
RPC链接

  1. 耗时
  2. 占用资源

所以一些链路用消息中间件用来做解耦

  1. 通知链路
    1. 不需要回执信息

基本构成

和RPC组件一样

  1. 注册中心
    1. TOPIC
      1. 大类:按照系统分类
    2. EventCode
      1. 小类:按照功能分类
  2. 消息发送者
  3. 消息订阅者
  4. 可靠消息组件

    1. 可靠存储

      消息的推拉

      主语不同
  5. 推是Broker来推

    1. 优点:Broker 天然感知所有的订阅关系
    2. 缺点:不感知Consumer的消息处理能力、是否有消息积压
  6. 拉是订阅端来拉
    1. 优点:Consumer可自助控制消息消费的速率
    2. 缺点:订阅端就要感知消息的订阅关系,可能存在延迟

消息队列or消息管理器

  1. 队列的特点:FIFO
  2. 管理器:不关心时序,实时推送消息