我是靠谱客的博主 壮观洋葱,最近开发中收集的这篇文章主要介绍负载均衡策略(二.随机策略),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

随机策略

从服务器列表中随机选择一个服务,然后该将请求转发到随机选择的服务上。

 

随机策略思路如下:

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;
    }
}

 

最后

以上就是壮观洋葱为你收集整理的负载均衡策略(二.随机策略)的全部内容,希望文章能够帮你解决负载均衡策略(二.随机策略)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部