1、简介
实现
2、专注app软件定制开发负载均衡策略
专注app软件定制开发负载均衡的权重策略较为特殊,可重点查看:
- 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、其他的例如判断服务器可用性等于随机、轮询一致
- 实现原理: