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,避免服务器的上下线导致的并发问题 Map serverMap=newHashMap (); serverMap.putAll(serverWeightMap); //取得Ip地址List Set keySet=serverMap.keySet(); Iterator iterator=keySet.iterator(); //根据权重组成iplist List serverList=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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。