高频面试之Ribbon

1、简介

实现负载均衡

2、负载均衡策略

负载均衡的权重策略较为特殊,可重点查看:

  • RandomRule,随机策略,通过 ThreadLocalRandom.current().nextInt(serverCount) 实现,保证随机性和线程隔离性
  • RoundRobinRule,轮询策略,通过 int next = (current + 1) % modulo(所有服务器数) 实现
  • BestAvailableRule,最小并发请求策略,通过 getActiveRequestsCount() 函数选择一个最小的并发请求的server
  • AvailabilityFilteringRule,过滤掉那些因为一直连接失败的被标记为circuit tripped的后端server,并过滤掉那些高并发的的后端
  • WeightedResponseTimeRule,权重策略:
    • 实现原理:
      • 1、假设有4台服务器:A(wt=10), B(wt=30), C(wt=40), D(wt=20)
      • 2、那么4台服务器的权重值区间依次为[1,10],[11,40],[41,80],[81-100]
      • 3、生成[1,权重和]的一个随机数,随机数落在哪个区间则调用哪台服务器
    • 实现依赖:权重会通过动态计算响应时间得出
      • 1、通过DynamicServerWeightTask以定时任务的方式计算响应时间,调度的时间间隔为30秒,
      • 2、首先计算所有服务器的平均响应时间之和,记为totalResponseTime
      • 3、计算单个服务器权重,weight = totalResponseTime - 服务器平均响应时间,计算完后,更新权重列表
    • 调用过程:
      • 1、判断权重列表是否已初始化,如果没有,则暂时使用轮询策略
      • 2、生成随机数,并判断随机并判断随机数落在哪个权重区间,返回对应的服务器即可
      • 3、其他的例如判断服务器可用性等于随机、轮询一致
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闲来也无事

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值