本文使用java代码实现简单的负载均衡
服务器负载均衡选择
- 随机法
- 加权随机法
- 轮训法
- 加权轮训法
废话不多说,直接撸代码:
模拟的服务器地址池:
static class IpMap {
public static HashMap<String, Integer> serverWeightMap = new HashMap<String, Integer>();
static {
serverWeightMap.put("192.168.30.201", 1);
serverWeightMap.put("192.168.30.202", 2);
serverWeightMap.put("192.168.30.203", 3);
serverWeightMap.put("192.168.30.204", 4);
serverWeightMap.put("192.168.30.205", 2);
serverWeightMap.put("192.168.30.206", 1);
serverWeightMap.put("192.168.30.207", 5);
}
}
1、轮训法
static class RoundRobin {
private static Integer pos = 0;
public static String getServer() {
Map<String, Integer> serverMap = new HashMap<String, Integer>();
serverMap.putAll(IpMap.serverWeightMap);
Set<String> keySet = serverMap.keySet();
List<String> keyList = new ArrayList<String>();
keyList.addAll(keySet);
String server;
synchronized (pos) {
if (pos > keySet.size()) {
pos = 0;
}
server = keyList.get(pos);
pos++;
}
return server;
}
}
2、随机法
static class Random {
public static String getServer() {
Map<String, Integer> serverMap = new HashMap<String, Integer>();
serverMap.putAll(IpMap.serverWeightMap);
Set<String> keySet = serverMap.keySet();
List<String> keyList = new ArrayList<String>();
keyList.addAll(keySet);
java.util.Random random = new java.util.Random();
int pos = random.nextInt(keyList.size());
return keyList.get(pos);
}
}
3、加权轮训法
static class WeightRounRabin {
private static Integer pos = 0;
public static String getServer() {
Map<String, Integer> serverMap = new HashMap<String, Integer>();
serverMap.putAll(IpMap.serverWeightMap);
Set<String> keySet = serverMap.keySet();
List<String> keyList = new ArrayList<String>();
Iterator<String> iterator = keySet.iterator();
while (iterator.hasNext()) {
String server = iterator.next();
int weight = serverMap.get(server);
for (int i = 0; i < weight; i++) {
keyList.add(server);
}
}
String server;
synchronized (pos) {
if (pos > keySet.size()) {
pos = 0;
}
server = keyList.get(pos);
pos++;
}
return server;
}
}
4、加权随机法
static class WeightRandom {
public static String getServer() {
Map<String, Integer> serverMap = new HashMap<String, Integer>();
serverMap.putAll(IpMap.serverWeightMap);
Set<String> keySet = serverMap.keySet();
List<String> keyList = new ArrayList<String>();
Iterator<String> iterator = keySet.iterator();
while (iterator.hasNext()) {
String server = iterator.next();
int weight = serverMap.get(server);
for (int i = 0; i < weight; i++) {
keyList.add(server);
}
}
java.util.Random random = new java.util.Random();
int pos = random.nextInt(keyList.size());
return keyList.get(pos);
}
}
相信聪明的你早已看懂....
网友评论