`

利用 java random实现加权均衡算法

    博客分类:
  • java
 
阅读更多

算法设计思路如下:

1、将一组加权值在数轴上分布每个加权值表示数轴上的一段如权值(10,20,30,40)

      如下图所示,表示了4个权值在数轴上的分布,分布顺序任意

      

 

2、所有权值的总和表示随机的范围,采用JAVA RANDOM 计算随机值 ,本例中范围为100

      Random random = new Random(); int point = random.nextInt(100);

 

3、获取随机值所对应的权值标签

     按照区间 [lower,upper) 分段检查 随机值落在哪个区间内,随机值所落的区间即为命中的权重标签

     如本例中随机值为 80 则 命中 权重 【40】

 

4、算法代码

private Long getVersion(TreeMap<Long,Integer> gammaMap){
        Long version = null;
        Random random = new Random();
        //get a point in [0,100)
        int randomPoint = random.nextInt(100);
        int lower = 0,upper = 0;
        for(Map.Entry<Long, Integer> entry : gammaMap.entrySet()){
            Long entryVersion  = entry.getKey();
            int gamma = entry.getValue() == null ? 0 : entry.getValue().intValue();
            lower = upper;
            upper += gamma;
            if(randomPoint >= lower && randomPoint < upper){
                version = entryVersion;
                break;
            }
        }
        logger.info("==>random:{},version:{}",randomPoint,version);
        return version;
    }

 

5、算法测试

1000次调用 权重分布

[101,184,280,435]

 

6、总结

算法的可靠性取决于随机算法的随机性,按测试结论基本实现了按权重的均衡

 

 

  • 大小: 25.3 KB
分享到:
评论

相关推荐

    Java Web应用中的负载均衡实现策略与代码示例

    负载均衡是Web应用领域中一项关键的技术,它通过将接入的网络流量分摊到...无论是采用开源的负载均衡器,还是自行实现负载均衡算法,最终的目的都是为了提高应用的性能和可用性,确保用户能够获得稳定快速的访问体验。

    Dubbo服务集群的负载均衡算法

    1. **Random LoadBalance(随机均衡算法)**:这是Dubbo的默认策略,每次请求随机选择一个服务提供者进行调用。这种策略简单高效,但无法确保负载的均匀分布。 2. **RoundRobin LoadBalance(权重轮循均衡算法)**...

    35_dubbo支持哪些负载均衡、高可用以及动态代理的策略?.zip

    Dubbo内置了多种负载均衡算法: 1. **Random LoadBalance**:随机策略,每个服务器被选中的概率是相等的,简单且快速。 2. **RoundRobin LoadBalance**:轮询策略,按照服务提供者的列表顺序依次选择,保证了请求的...

    一般的抽奖系统

    在编程中,可以使用语言内置的随机数生成函数,如Python的`random`模块或Java的`Random`类,但要注意避免简单的序列生成导致的可预测性问题。 4. **算法设计**:抽奖算法应确保每个符合资格的用户有相等的机会被...

Global site tag (gtag.js) - Google Analytics