书中代码-自己写写测试
2016-11-12 12:07
134 查看
package com.fenghao.loadbalancing; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Random; import java.util.Set; import org.junit.Test; /** * * <P>负载均衡算法简单写</P> * @ClassName: loadTest * @author 冯浩 2016年11月9日 上午9:12:49 * @see TODO */ public class loadTest { private final Map<String,Integer> serverWeightMap=new HashMap<String,Integer>(); public loadTest(){ serverWeightMap.put("192.168.1.100", 1); serverWeightMap.put("192.168.1.101", 1); serverWeightMap.put("192.168.1.102", 4); serverWeightMap.put("192.168.1.103", 1); serverWeightMap.put("192.168.1.104", 1); serverWeightMap.put("192.168.1.105", 3); serverWeightMap.put("192.168.1.106", 1); serverWeightMap.put("192.168.1.107", 2); serverWeightMap.put("192.168.1.108", 1); serverWeightMap.put("192.168.1.109", 1); serverWeightMap.put("192.168.1.110", 1); } @Test public void Test(){ int le=4; // roundRobinTest(le); RandomTest(); } /** * * <p>Title: roundRobinTest</p> * <p>轮询</p> * @param pos * @return * @author 冯浩 2016年11月9日 下午7:41:52 */ public String roundRobinTest(Integer pos){ Map<String,Integer> serverMap=new HashMap<String,Integer>(); serverMap.putAll(serverWeightMap); Set<String> keySet = serverMap.keySet(); ArrayList<String> keylist=new ArrayList<String>(); keylist.addAll(keySet); String server=null; synchronized (pos) { if(pos>=keySet.size()){ pos=0; } server=keylist.get(pos); pos++; System.out.println("\npos is "+pos); } System.out.println("\nserver is "+server); return server; } /** * * <p>Title: RandomTest</p> * <p>随机法</p> * @return * @author 冯浩 2016年11月9日 下午7:49:24 */ public String RandomTest(){ Map<String,Integer> serverMap=new HashMap<String,Integer>(); serverMap.putAll(serverWeightMap); Set<String> keySet = serverMap.keySet(); ArrayList<String> keyList=new ArrayList<String>(); keyList.addAll(keySet); Random random=new Random(); int pos = random.nextInt(keyList.size()); System.out.println("\npos is "+pos); String server = keyList.get(pos); System.out.println("\nserver is "+server); return server; } /** * * <p>Title: HashTest</p> * <p>源地址Hash法</p> * @author 冯浩 2016年11月10日 上午8:46:43 */ public String HashTest(String remoteip){ Map<String,Integer> serverMap=new HashMap<String,Integer>(); serverMap.putAll(serverWeightMap); Set<String> keySet = serverMap.keySet(); ArrayList<String> keyList=new ArrayList<String>(); keyList.addAll(keySet); int hashCode = remoteip.hashCode(); int size = keyList.size(); int pos=hashCode % size; System.out.println("\npos is "+pos); return keyList.get(pos); } /** * * <p>Title: weightRoundRobin</p> * <p>加权轮询法</p> * @return * @author 冯浩 2016年11月10日 上午8:57:32 */ public String weightRoundRobin(Integer pos){ Map<String,Integer> serverMap=new HashMap<String,Integer>(); serverMap.putAll(serverWeightMap); Set<String> keySet = serverMap.keySet(); Iterator<String> it = keySet.iterator(); List<String> serverList=new ArrayList<String>(); while(it.hasNext()){ String server=it.next(); Integer weight = serverMap.get(server); for (int i = 0; i <weight ; i++) { serverList.add(server); } } String server=null; synchronized (pos) { if(pos>=serverList.size()){ pos=0; } server=serverList.get(pos); pos++; } return server; } /** * * <p>Title: WeightRandom</p> * <p>加权随机法</p> * @return * @author 冯浩 2016年11月11日 上午8:43:33 */ public String WeightRandom(){ Map<String,Integer> serverMap=new HashMap<String,Integer>(); serverMap.putAll(serverWeightMap); Set<String> keySet = serverMap.keySet(); Iterator<String> it = keySet.iterator(); List<String> serverList=new ArrayList<String>(); while(it.hasNext()){ String server = it.next(); Integer weight = serverMap.get(server); for (int i = 0; i < weight; i++) { serverList.add(server); } } Random random=new Random(); int randomPos = random.nextInt(serverList.size()); String server = serverList.get(randomPos); return server; } }
相关文章推荐
- 由成幻OnlineJudge学习如何做自己的Acm-Icpc在线评判系统-5.在线编译与测试系统代码粗解
- C#基础系列:实现自己的ORM(MiniORM的测试代码)
- 自己测试的c3p0的代码demo
- 使用测试用例来约束自己的代码
- Delphi 里的接口聚合的写法。俺自己写的测试例子代码
- 自己Swap自己,Ring0下做测试器时用的代码
- 自己无意中测试出的一段很有意思的代码!
- jmeter java sampler测试java接口(二)测试自己的代码
- 自己的服务器通过微信公众号Token验证测试的代码(Python版)
- 目标跟踪 benchmark用法 添加、测试自己的代码
- 为了给自己开发一个支持 fastcgi 的 http server 做准备。剥离了 nanoweb 的 fastcgi 接口部分代码。测试了下。 成功了
- C++线程同步 CCRITICALSECTION(临界区类)附自己写的测试代码
- 用随机数据测试自己的代码找出错误
- 为什么软件开发者不能测试自己编写的代码?
- 自己调试通过的libsvm测试代码
- C#基础系列:实现自己的ORM(MiniORM的测试代码)
- C#基础系列:实现自己的ORM(MiniORM的测试代码)
- 自己搭建freemarker环境和测试代码
- 优化,测试自己的代码
- 【C语言】【unix c】编写代码测试自己电脑的字节序