rpcx服务框架浅析7-负载均衡策略

RPCX分布式服务框架主要致力于提供高性能和透明化的RPC远程服务调用。

负载均衡

      RPCX的负载均衡策略是在消费端进行的,也可以理解为“进程内负载均衡”。

rpcx服务框架浅析7-负载均衡策略_第1张图片

RPCX负载均衡策略

Random LoadBalance

  • 随机,按权重设置随机概率。
  • 在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重。

RoundRobin LoadBalance

  • 轮循,按公约后的权重设置轮循比率。
  • 存在慢的提供者累积请求问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上。

Weighted RoundRobin LoadBalance

  • 加权轮询。
  • 根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请求。

RPCX中加权轮询也可称为是平滑的加权轮询,它生成的序列更加均匀

RPCX相关代码:

type Weighted struct {
	Server          string
	Weight          int
	CurrentWeight   int
	EffectiveWeight int
}

func NextWeighted(servers []*Weighted) (best *Weighted) {
    total := 0
    for i := 0; i < len(servers); i++ {
        w := servers[i]
        if w == nil {
            continue
        }
        w.CurrentWeight += w.EffectiveWeight
        total += w.EffectiveWeight
        if w.EffectiveWeight < w.Weight {
            w.EffectiveWeight++
        }

        if best == nil || w.CurrentWeight > best.CurrentWeight {
            best = w
        }
    }
    if best == nil {
        return nil
    }
    best.CurrentWeight -= total
    return best
}

ConsistentHash LoadBalance

  • 一致性Hash,相同参数的请求总是发到同一提供者。
  • 当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。

系列文章

  • rpcx服务框架浅析1-角色说明
  • rpcx服务框架浅析2-服务发布(以zookeeper作为注册中心的Provider例子)
  • rpcx服务框架浅析3-服务发布流程
  • rpcx服务框架浅析4-消费方服务引用
  • rpcx服务框架浅析5-消费方(以zookeeper作为注册中心的Consumer例子)
  • rpcx服务框架浅析6-注册中心
  • rpcx服务框架浅析7-负载均衡策略
  • rpcx服务框架浅析8-群集容错机制
  • rpcx服务框架浅析9-序列化
  • rpcx服务框架浅析10-扩展Plugin
  • rpcx服务框架浅析11-调用拦截链
  • rpcx服务框架浅析12-断路器
  • rpcx服务框架浅析13-远程调用

 

你可能感兴趣的:(rpcx,分布式服务框架,RPCX浅析)