Java加权负载均衡策略实现过程解析
2020-04-01 07:07
826 查看
加权轮询
后端集群每台机器都分配一个权重,权重高得会承担更多的流量,相反权重低的分配的流量也会少,这种策略允许后端集群机器配置差异化
java实现
import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import org.springframework.stereotype.Controller; @Controller public class IpMapController extends LogBaseController implements Runnable { private static Integer pos = 0; // 待scp的Ip列表,Key代表Ip,Value代表该Ip的权重 public static HashMap<String, Integer> serverWeightMap = new HashMap<String, Integer>(); 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); } public void run() { // 重建一个Map,避免服务器的上下线导致的并发问题 Map<String, Integer> serverMap = new HashMap<String, Integer>(); serverMap.putAll(serverWeightMap); // 取得Ip地址List Set<String> keySet = serverMap.keySet(); Iterator<String> iterator = keySet.iterator(); // 根据权重组成iplist 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); } String server = null; synchronized (pos) { if (pos >= keySet.size()){ pos = 0; } server = serverList.get(pos); System.out.println("server:" + server + ",pos=" + pos); pos++; } } public static void main(String[] args) { IpMapController ipRunnable = new IpMapController(); for (int i = 0; i <= 10; i++) { System.out.println("t" + i); new Thread(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
以上就是本文的全部内容,希望对大家的学习有所帮助
您可能感兴趣的文章:
相关文章推荐
- 【SpringCloud】Netflix源码解析之Ribbon:负载均衡策略的定义和实现
- Linux中Apache+Tomcat+JK实现负载均衡和群集的完整过程
- Linux中Apache+Tomcat+JK实现负载均衡和群集的完整过程
- Java Volatile关键字实现原理过程解析
- Linux中Apache+Tomcat+JK实现负载均衡和群集的完整过程
- 关于linux下用lvs实现负载均衡的配置过程
- Linux中Apache+Tomcat+JK实现负载均衡和群集的完整过程(转载)
- 应用于负载均衡的一致性哈希及java实现
- Centos7教你玩转利用nginx实现Tomcat负载均衡策略
- Java 图片复制功能实现过程解析
- java 实现百度地图的地址解析及在数据库的读取存储过程
- 路由器实现负载均衡的三种模式解析
- Java lambda表达式实现Flink WordCount过程解析
- Linux中Apache+Tomcat+JK实现负载均衡和群集的完整过程
- Linux中Apache+Tomcat+JK实现负载均衡和群集的完整过程
- 详解Java实现负载均衡的几种算法代码
- [java]微服务架构连载No3 Ribbon+Retry服务实现负载均衡和服务请求重试
- [分布式会话]zuul通过Ribbon配置负载均衡策略实现粘性会话(sticky session)
- Java实现文件读取和写入过程解析
- Java实现简单双色球摇奖功能过程解析