负载均衡策略之AbstractLoadBalancerRule和RandomRule源码解读

一 负载均衡类图

二 AbstractLoadBalancerRule解读

//负载均衡策略的抽象类
public abstract class AbstractLoadBalancerRule implements IRule, IClientConfigAware {

    //该对象能够在具体实现选择服务策略时,获取一些负载均衡器中维护的信息来作为分配依据
    private ILoadBalancer lb;
        
    @Override
    public void setLoadBalancer(ILoadBalancer lb){
        this.lb = lb;
    }
    
    @Override
    public ILoadBalancer getLoadBalancer(){
        return lb;
    }      
}

三 RandomRule解读

public class RandomRule extends AbstractLoadBalancerRule {

    //从服务清单中随机选择一个服务实例
    @edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "RCN_REDUNDANT_NULLCHECK_OF_NULL_VALUE")
    public Server choose(ILoadBalancer lb, Object key) {
        if (lb == null) {
            return null;
        }
        Server server = null;

        while (server == null) {
            if (Thread.interrupted()) {
                return null;
            }
            //负载均衡来获得可用实例列表upList和allList
            List<Server> upList = lb.getReachableServers();
            List<Server> allList = lb.getAllServers();

            int serverCount = allList.size();
            if (serverCount == 0) {
                return null;
            }

            //随机来获取一个随机数
            int index = chooseRandomInt(serverCount);
            //随机数作为upList的索引值来返回具体实例
            server = upList.get(index);

            if (server == null) {
                /*
                 * The only time this should happen is if the server list were
                 * somehow trimmed. This is a transient condition. Retry after
                 * yielding.
                 */
                Thread.yield();
                continue;
            }

            if (server.isAlive()) {
                return (server);
            }

            // Shouldn't actually happen.. but must be transient or a bug.
            server = null;
            Thread.yield();
        }
        //正常情况下,每次都应该可以选择一个服务实例
        return server;

    }

    protected int chooseRandomInt(int serverCount) {
        return ThreadLocalRandom.current().nextInt(serverCount);
    }

    //接口中的choose委托给该类中的choose(getLoadBalancer(), key)方法
    @Override
    public Server choose(Object key) {
        return choose(getLoadBalancer(), key);
    }

    @Override
    public void initWithNiwsConfig(IClientConfig clientConfig) {
        // TODO Auto-generated method stub
        
    }
}

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟 可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟 可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟 可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟 可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟 可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟 可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟 可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟 可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟 可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟 可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟 可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟 可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟 可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟 可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟 可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟 可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟 可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟 可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟
可以工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端源码 基于muduo库实现 redis用于服务器中间件即消息队列 mysql用于保存用户数据 可以工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端源码 基于muduo库实现 redis用于服务器中间件即消息队列 mysql用于保存用户数据 可以工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端源码 基于muduo库实现 redis用于服务器中间件即消息队列 mysql用于保存用户数据 可以工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端源码 基于muduo库实现 redis用于服务器中间件即消息队列 mysql用于保存用户数据 可以工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端源码 基于muduo库实现 redis用于服务器中间件即消息队列 mysql用于保存用户数据 可以工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端源码 基于muduo库实现 redis用于服务器中间件即消息队列 mysql用于保存用户数据 可以工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端源码 基于muduo库实现 redis用于服务器中间件即消息队列 mysql用于保存用户数据 可以工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端源码 基于muduo库实现 redis用于服务器中间件即消息队列 mysql用于保存用户数据 可以工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端源码 基于muduo库实现 redis用于服务器中间件即消息队列 mysql用于保存用户数据 可以工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端源码 基于muduo库实现 redis用于服务器中间件即消息队列 mysql用于保存用户数据 可以工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端源码 基于muduo库实现 redis用于服务器中间件即消息队列 mysql用于保存用户数据 可以工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端源码 基于muduo库实现 redis用于服务器中间件即消息队列 mysql用于保存用户数据 可以工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端源码 基于muduo库实现 redis用于服务器中间件即消息队列 mysql用于保存用户数据 可以工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端源码 基于muduo库实现 redis用于服务器中间件即消息队列 mysql用于保存用户数据 可以工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端源码 基于muduo库实现 redis用于服务器中间件即消息队列 mysql用于保存用户数据 可以工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端源码 基于muduo库实现 redis用于服务器中间件即消息队列 mysql用于保存用户数据 可以工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端源码 基于muduo库实现 redis用于服务器中间件即消息队列 mysql用于保存用户数据 可以工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端源码 基于muduo库实现 redis用于服务器中间件即消息队列 mysql用于保存用户数据 可以工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端源码 基于muduo库实现 redis用于服务器中间件即消息队列 mysql用于保存用户数据 可以工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端源码 基于muduo库实现 redis用于服务器中间件即消息队列 mysql用于保存用户数据 可以工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端源码 基于muduo库实现 redis用于服务器中间件即消息队列 mysql用于保存用户数据 可以工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端源码 基于muduo库实现 redis用于服务器中间件即消息队列 mysql用于保存用户数据 可以工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端源码 基于muduo库实现 redis用于服务器中间件即消息队列 mysql用于保存用户数据 可以工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端源码 基于muduo库实现 redis用于服务器中间件即消息队列 mysql用于保存用户数据 可以工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端源码 基于muduo库实现 redis用于服务器中间件即消息队列 mysql用于保存用户数据
### 回答1: AbstractLoadBalancerRuleRibbon负载均衡规则的抽象基类。这个类主要定义了负载均衡的基本逻辑,包括选择一个可用的服务器,忽略不可用的服务器,以及根据负载均衡算法选择一个服务器来处理请求。具体来说,该类具有以下特征: 1. 构造函数:该类有两个构造函数,其中一个是空的,另一个可以接受一个IRule对象作为参数。 2. choose方法:该方法是选择服务器的核心方法,返回一个可用的服务器实例。该方法包含基本的逻辑,如忽略禁用的服务器、根据权重值选择服务器等。 3. getRuleDefinition和setRuleDefinition方法:这两个方法用于获取和设置规则定义,后者用于将规则配置文件中的规则定义传递给负载均衡规则。 4. getLoadBalancer和setLoadBalancer方法:这两个方法分别用于获取和设置负载平衡器实例,该实例用于在选择服务器时使用。 总的来说,AbstractLoadBalancerRuleRibbon中的负载均衡提供了基础的实现类,具有良好的可扩展性和可定制性,用户可以通过继承该类,并覆盖choose方法,实现自己的负载均衡规则。 ### 回答2: abstractloadbalancerrule负载均衡算法的抽象类,它是AWS负载均衡服务中LoadBalancerRule接口的实现类。主要负责定义负载均衡规则的基本属性和行为。 该类具有以下主要方法和属性: 1. name:规则的名称,用来标识该规则。 2. priority:规则的优先级,用来指定规则的执行顺序。 3. abstractLoadBalancer负载均衡器对象,表示该规则所属的负载均衡器。 4. loadBalancerAttribute:负载均衡器的属性,包括访问日志配置、连接超时等等。 5. listeners:监听器对象列表,表示该规则所属的监听器。 主要方法包括: 1. apply:将负载均衡规则应用到指定的负载均衡器实例上。该方法会将规则添加到负载均衡器的规则列表中。 2. isUseDataFeed:判断该规则是否启用了数据供应。若启用,则返回true,否则返回false。 3. ensureAttributes:确保负载均衡器的属性已经初始化,如果没有则进行初始化。 4. modifyAttribute:修改负载均衡器的属性值,包括磁盘容量、访问日志配置等。 该类还可以通过继承来拓展更多负载均衡规则,例如实现基于时间片的负载均衡、基于请求路径的负载均衡等等。 abstractLoadBalancerRule类的设计符合面向对象的思想,通过将通用的负载均衡规则逻辑封装在抽象类中,具体的负载均衡规则可以通过继承和重写方法来实现。这样设计能够提高代码的复用性和可扩展性,使得负载均衡规则的管理更加灵活和可定制化。 ### 回答3: abstractloadbalancerrule(抽象负载均衡规则)是负载均衡器的一个抽象类,是负责实现负载均衡算法的核心部分。它提供了许多抽象方法和属性,用于定义不同负载均衡规则的具体实现。 该类的源码主要包括以下几个方面的内容: 1. 抽象方法:abstractloadbalancerrule定义了一系列抽象方法,如choose()、getMaxServerCount()、getName()等。这些方法是具体负载均衡规则类必须实现的,用于选择目标服务器、获取最大服务器数量和获取规则名字等功能。 2. 属性:该类定义了一些属性,如ruleConfig(规则配置)、loadBalancer负载均衡器)等。这些属性用于保存规则的配置信息和负载均衡器的实例,以便在具体规则类中使用。 3. 辅助方法:abstractloadbalancerrule中也包含了一些辅助方法,如validateRuleConfig(验证规则配置)和getLoadBalancer(获取负载均衡器)等。这些方法用于辅助具体规则类的实现,进行规则配置的验证和获取负载均衡器的操作。 通过在具体负载均衡规则类中继承和实现abstractloadbalancerrule,我们可以根据具体业务需求来定义不同的负载均衡算法。例如,可以基于轮询、随机、加权轮询或一致性哈希等算法来实现choose()方法,用于选择目标服务器。同时,也可以通过在具体规则类中覆盖validateRuleConfig()方法,对规则的配置进行验证,确保规则的有效性。 总之,abstractloadbalancerrule是一个抽象类,提供了负载均衡规则的基本实现,通过继承和实现该类,可以实现各种不同的负载均衡算法,并根据具体业务需求进行定制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值