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; } }
时间: 2024-10-10 01:16:08