负载均衡常见算法( 二 )

 
hash法的好处是,在服务器列表不变的情况下,每次客户端访问的服务器都是同一个服务器.利用这个特性可以有状态的session会话.无需额外的操作就可以实现粘性会话.
4.加权轮询法
刚刚有说道过,不同的服务器性能不同,所以不能一概而论,需要给性能低的服务器给比较低的权重,性能高的给跟高的权重,代码如下:
【负载均衡常见算法】 1public class BalanceServer { 2 public static Map<String, Integer> serverMap = new HashMap<String, Integer>(); 3 public static int pos = 0; 4 static { 5 serverMap.put("192.168.0.1", 1); 6 serverMap.put("192.168.0.2", 1); 7 serverMap.put("192.168.0.3", 4); 8 serverMap.put("192.168.0.4", 3); 9 serverMap.put("192.168.0.5", 3);10 serverMap.put("192.168.0.6", 2);11 }12 public static String getServer() {13 Set<String> keySet = serverMap.keySet();14 Iterator<String> it = keySet.iterator();15 List<String> servers = new ArrayList<String>();16 while (it.hasNext()) {17 String server = it.next();18 Integer weight = serverMap.get(server);19 for (int i = 0; i < weight; i++) {20 servers.add(server);21 }22 }23 String server = null;24 if (pos >= servers.size()) {25 pos = 0;26 }27 server = servers.get(pos);28 pos++;29 return server;30 }31 public static void main(String[] args) {32 for(int i=0;i<14;i++){33 System.out.println(BalanceServer.getServer());34 }35 }36} 
5.加权随机法
 
与加权轮询法类似,加权随机法也是根据后端服务器不同的配置和负载情况来配置不同的权重 。不同的是,它是按照权重来随机选择服务器的,而不是顺序 。加权随机法的代码实现如下:
1public class WeightRandom 2{ 3 public static String getServer() 4 { 5 // 重建一个Map,避免服务器的上下线导致的并发问题 6 Map<String, Integer> serverMap =7 new HashMap<String, Integer>(); 8 serverMap.putAll(IpMap.serverWeightMap); 9 // 取得Ip地址List10 Set<String> keySet = serverMap.keySet();11 Iterator<String> iterator = keySet.iterator();12 List<String> serverList = new ArrayList<String>();13 while (iterator.hasNext())14 {15 String server = iterator.next();16 int weight = serverMap.get(server);17 for (int i = 0; i < weight; i++)18 serverList.add(server);19 }20 JAVA.util.Random random = new java.util.Random();21 int randomPos = random.nextInt(serverList.size());22 return serverList.get(randomPos);23 }24}



推荐阅读