基于权重的随机负载均衡路由算法
2017-05-29 00:00
225 查看
##样例
##实现一
##实现二
##doc
dubbo-RandomLoadBalance
想获取最新资讯,请关注微信公众号
private Map<String,Integer> serverMap = new HashMap<String,Integer>(){{ put("192.168.1.100",1); put("192.168.1.101",1); put("192.168.1.102",4); put("192.168.1.103",1); put("192.168.1.104",1); put("192.168.1.105",3); put("192.168.1.106",1); put("192.168.1.107",2); put("192.168.1.108",1); put("192.168.1.109",1); put("192.168.1.110",1); }}; private List<String> servers = new ArrayList<>(serverMap.keySet());
##实现一
public void weightRandom(){ Set<String> keySet = serverMap.keySet(); List<String> servers = new ArrayList<String>(); for(Iterator<String> it = keySet.iterator();it.hasNext();){ String server = it.next(); int weight = serverMap.get(server); for(int i=0;i<weight;i++){ servers.add(server); } } String server = null; Random random = new Random(); int idx = random.nextInt(servers.size()); server = servers.get(idx); System.out.println(server); }
##实现二
public String randomWeight(){ int length = serverMap.size(); // 总个数 int totalWeight = 0; // 总权重 boolean sameWeight = true; // 权重是否都一样 for (int i = 0; i < length; i++) { int weight = serverMap.get(servers.get(i)); totalWeight += weight; // 累计总权重 if (sameWeight && i > 0 && weight != serverMap.get(servers.get(i-1))) { sameWeight = false; // 计算所有权重是否一样 } } if (totalWeight > 0 && ! sameWeight) { // 如果权重不相同且权重大于0则按总权重数随机 int offset = ThreadLocalRandom.current().nextInt(totalWeight); // 并确定随机值落在哪个片断上 for (int i = 0; i < length; i++) { offset -= serverMap.get(servers.get(i)); if (offset < 0) { return servers.get(i); } } } // 如果权重相同或权重为0则均等随机 return servers.get(ThreadLocalRandom.current().nextInt(length)); }
##doc
dubbo-RandomLoadBalance
想获取最新资讯,请关注微信公众号
![](https://static.oschina.net/uploads/img/201705/21223324_eDKA.jpg)
相关文章推荐
- 基于qt5的“依据权重随机选择吃什么”的界面程序
- 随机选取算法 (有权重的记录中选取)
- LAMT基于mod_proxy方式的负载均衡集群
- c#随机抽人(随机抽组,抽奖,搜索匹配)程序(基于.net窗口)
- 排序大集锦(三):基于随机访问下标的排序
- 基于nginx的tomcat负载均衡和集群
- 基于nginx的tomcat负载均衡和集群
- 使用nginx sticky模块实现基于cookie的负载均衡
- apache基于mod_jk模块实现代理、负载均衡及Tomcat session cluster
- 基于权重的动画混和
- Oracle 12.2新特性 | 基于权重的节点驱逐
- 根据权重分配随机抽取纸牌
- 基于php的随机生成密码的源代码
- 基于apache的tomcat负载均衡和集群配置(基于mod_jk.so)
- 基于Nginx的软件负载均衡实现解读
- [Python]基于权重的随机数2种实现方式
- 根据权重随机选取指定条数记录的简单算法实现(C#)【含源代码】
- 随机从数组或集合中抽取一个值或 从list集合中随机抽几个值 或算权重
- 基于apache的tomcat负载均衡和集群配置