刚刚有说道过,不同的服务器性能不同,所以不能一概而论,需要给性能低的服务器给比较低的权重,性能高的给跟高的权重,代码如下:
- public class BalanceServer {
- public static Map<String, Integer> serverMap = new HashMap<String, Integer>();
- public static int pos = 0;
- static {
- serverMap.put("192.168.0.1", 1);
- serverMap.put("192.168.0.2", 1);
- serverMap.put("192.168.0.3", 4);
- serverMap.put("192.168.0.4", 3);
- serverMap.put("192.168.0.5", 3);
- serverMap.put("192.168.0.6", 2);
- }
- public static String getServer() {
- Set<String> keySet = serverMap.keySet();
- Iterator<String> it = keySet.iterator();
- List<String> servers = new ArrayList<String>();
- while (it.hasNext()) {
- String server = it.next();
- Integer weight = serverMap.get(server);
- for (int i = 0; i < weight; i++) {
- servers.add(server);
- }
- }
- String server = null;
- if (pos >= servers.size()) {
- pos = 0;
- }
- server = servers.get(pos);
- pos++;
- return server;
- }
- public static void main(String[] args) {
- for(int i=0;i<14;i++){
- System.out.println(BalanceServer.getServer());
- }
- 35 }
- 36}
5.加权随机法
与加权轮询法类似,加权随机法也是根据后端服务器不同的配置和负载情况来配置不同的权重。不同的是,它是按照权重来随机选择服务器的,而不是顺序。加权随机法的代码实现如下:
- public class WeightRandom
- {
- public static String getServer()
- {
- // 重建一个Map,避免服务器的上下线导致的并发问题
- Map<String, Integer> serverMap =
- new HashMap<String, Integer>();
- serverMap.putAll(IpMap.serverWeightMap);
- // 取得Ip地址List
- Set<String> keySet = serverMap.keySet();
- Iterator<String> iterator = keySet.iterator();
- List<String> serverList = new ArrayList<String>();
- while (iterator.hasNext())
- {
- String server = iterator.next();
- int weight = serverMap.get(server);
- for (int i = 0; i < weight; i++)
- serverList.add(server);
- }
- java.util.Random random = new java.util.Random();
- int randomPos = random.nextInt(serverList.size());
- return serverList.get(randomPos);
- }
- }
(编辑:晋中站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|