Java加权负载均衡策略实现过程解析
加权轮询
后端集群每台机器都分配一个权重,权重高得会承担更多的流量,相反权重低的分配的流量也会少,这种策略允许后端集群机器配置差异化
java实现
importjava.util.ArrayList;
importjava.util.HashMap;
importjava.util.Iterator;
importjava.util.List;
importjava.util.Map;
importjava.util.Set;
importorg.springframework.stereotype.Controller;
@Controller
publicclassIpMapControllerextendsLogBaseControllerimplementsRunnable{
privatestaticIntegerpos=0;
//待scp的Ip列表,Key代表Ip,Value代表该Ip的权重
publicstaticHashMapserverWeightMap=newHashMap();
static{
serverWeightMap.put("127.0.0.1",1);
serverWeightMap.put("127.0.0.2",1);
serverWeightMap.put("127.0.0.3",1);
serverWeightMap.put("127.0.0.4",1);
}
publicvoidrun(){
//重建一个Map,避免服务器的上下线导致的并发问题
MapserverMap=newHashMap();
serverMap.putAll(serverWeightMap);
//取得Ip地址List
SetkeySet=serverMap.keySet();
Iteratoriterator=keySet.iterator();
//根据权重组成iplist
ListserverList=newArrayList();
while(iterator.hasNext()){
Stringserver=iterator.next();
intweight=serverMap.get(server);
for(inti=0;i=keySet.size()){
pos=0;
}
server=serverList.get(pos);
System.out.println("server:"+server+",pos="+pos);
pos++;
}
}
publicstaticvoidmain(String[]args){
IpMapControlleripRunnable=newIpMapController();
for(inti=0;i<=10;i++){
System.out.println("t"+i);
newThread(ipRunnable).start();
}
}
}
多线程输出结果
t0
t1
t2
t3
t4
t5
t6
server:127.0.0.4,pos=0
server:127.0.0.3,pos=1
server:127.0.0.2,pos=2
server:127.0.0.2,pos=2
t7
server:127.0.0.4,pos=0
server:127.0.0.3,pos=1
t8
server:127.0.0.2,pos=2
server:127.0.0.2,pos=2
t9
server:127.0.0.4,pos=0
t10
server:127.0.0.3,pos=1
server:127.0.0.2,pos=2
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。