算法设计思路如下:
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、总结
算法的可靠性取决于随机算法的随机性,按测试结论基本实现了按权重的均衡
相关推荐
负载均衡是Web应用领域中一项关键的技术,它通过将接入的网络流量分摊到...无论是采用开源的负载均衡器,还是自行实现负载均衡算法,最终的目的都是为了提高应用的性能和可用性,确保用户能够获得稳定快速的访问体验。
1. **Random LoadBalance(随机均衡算法)**:这是Dubbo的默认策略,每次请求随机选择一个服务提供者进行调用。这种策略简单高效,但无法确保负载的均匀分布。 2. **RoundRobin LoadBalance(权重轮循均衡算法)**...
Dubbo内置了多种负载均衡算法: 1. **Random LoadBalance**:随机策略,每个服务器被选中的概率是相等的,简单且快速。 2. **RoundRobin LoadBalance**:轮询策略,按照服务提供者的列表顺序依次选择,保证了请求的...
在编程中,可以使用语言内置的随机数生成函数,如Python的`random`模块或Java的`Random`类,但要注意避免简单的序列生成导致的可预测性问题。 4. **算法设计**:抽奖算法应确保每个符合资格的用户有相等的机会被...