概述
随机策略
从服务器列表中随机选择一个服务,然后该将请求转发到随机选择的服务上。
随机策略思路如下:
1.获取注册到注册中心的总服务列表,服务状态为UP的服务列表
2.判断总服务列表和服务状态为UP的服务列表是否为null或者数量为0,若是,则返回null
3.根据服务的总数量,或者随机服务
4.若服务为null,则重复1,2,3步骤
5.若服务不为null,判断服务是否是存活状态,若是,则返回该服务信息,若不是,重复1,2,3,4步骤
程序流程图如下:
负载均衡算法随机策略
public class RandomRuleTest {
private Random random;
/**
* 负载均衡随机策略
* 1.获取注册到注册中心的服务的总列表,服务状态为UP的服务列表
* 2.判断服务总列表,服务状态为UP的服务列表,若为空或者数量为0,则返回null
* 3.根据总服务的数量,获取随机数
* 4.根据随机数获取服务器
* 5.判断服务器是否为null,若为null,则重新1,2,3,4步骤
* 6.若服务器不为空,判断服务器是否为存活状态,若为存活状态,为返回服务器信息;若不为存活状态,重新1,2,3,4,5步骤
* @param loadBalancer
* @return
*/
public Server chooseServer(ILoadBalancer loadBalancer) {
if(null == loadBalancer) {
return null;
}
Server server = null;
while (server == null) {
// 当前线程被打断时,返回null
if(Thread.interrupted()) {
return null;
}
// 获取此时此刻可以访问的服务列表和全部服务器列表
List<Server> reachableServers = loadBalancer.getReachableServers();
List<Server> allServers = loadBalancer.getAllServers();
// 此时此刻总服务器列表为null,则返回null
if(allServers == null || allServers.isEmpty() || reachableServers == null || reachableServers.isEmpty()) {
return null;
}
// 服务器总数量
int serverCount = allServers.size();
// 随机获取一个索引
int index = random.nextInt(serverCount);
// 根据随机索引,获取服务器
// 这里源码有一个bug,应该通过allServers来获取服务器
server = allServers.get(index);
// 判断server是否为null,若为null,则需要再次获取,直到获取能够使用的服务器
if(null == server) {
// 当server为null时,将当前线程设置成挂起状态,然后和其他线程重新争抢CPU资源
Thread.yield();
continue;
}
if(server.isAlive()) {
return server;
}
server = null;
Thread.yield();
}
return server;
}
}
最后
以上就是壮观洋葱为你收集整理的负载均衡策略(二.随机策略)的全部内容,希望文章能够帮你解决负载均衡策略(二.随机策略)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复