负载均衡算法(java)
来源:互联网 发布:网络设计方案图 编辑:程序博客网 时间:2024/04/30 15:58
package com.test.junit;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Random;import java.util.Set;/** * 模拟负载均衡算法 * @author cwm * */public class LoadBalance { private static Integer pos = 0; public static Map<String,Integer> getServerIps(){ Map<String,Integer> serverIps = new HashMap<String,Integer>(); //权重为1 serverIps.put("192.168.1.100", 1); serverIps.put("192.168.1.101", 1); //权重为4 serverIps.put("192.168.1.102", 4); serverIps.put("192.168.1.103", 1); serverIps.put("192.168.1.104", 1); //权重为3 serverIps.put("192.168.1.105", 3); serverIps.put("192.168.1.106", 1); serverIps.put("192.168.1.107", 1); //权重为2 serverIps.put("192.168.1.108", 2); serverIps.put("192.168.1.109", 1); serverIps.put("192.168.1.110", 1); return serverIps; } /** * 源地址法 * 思路:获取客户端Ip的hashCode值 * 将该hashCode值与服务器列表大小取模,得到目标服务器Ip的序号 * @param remoteIp * @return */ public static String consumerHash(String remoteIp){ String serverIp = null; Map<String,Integer> serverIps = new HashMap<String,Integer>(); serverIps.putAll(getServerIps()); Set<String> keySet = serverIps.keySet(); List<String> keyList = new ArrayList<String>(); keyList.addAll(keySet); int hashCode = remoteIp.hashCode(); int serverTableSize = keyList.size(); int pos = hashCode % serverTableSize; serverIp = keyList.get(pos); return serverIp; } /** * 随机法 * @return */ public static String random(){ String serverIp = null; Map<String,Integer> serverIps = new HashMap<String,Integer>(); serverIps.putAll(getServerIps()); List<String> keyList = new ArrayList<String>(); Set<String> keySet = serverIps.keySet(); keyList.addAll(keySet); Random random = new Random(); int index = random.nextInt(keyList.size()); serverIp = keyList.get(index); return serverIp; } /** * 权重随机法 * @return */ public static String weightRandom(){ String serverIp = null; Map<String,Integer> serverIps = new HashMap<String,Integer>(); serverIps.putAll(getServerIps()); Set<String> keySet = serverIps.keySet(); Iterator<String> it = keySet.iterator(); List<String> keyList = new ArrayList<String>(); while(it.hasNext()){ String key = it.next(); int weight = serverIps.get(key); for(int i=0;i<weight;i++){ keyList.add(key); } } Random random = new Random(); int index = random.nextInt(keyList.size()); serverIp = keyList.get(index); return serverIp; } /** * 轮询法 */ public static String roundRobin(){ String serverIp = null; //重新创建一个Map,避免出现由于服务器上线和下线导致的并发问题 Map<String,Integer> serverIps = new HashMap<String,Integer>(); serverIps.putAll(getServerIps()); Set<String> keySet = serverIps.keySet(); List<String> keyList = new ArrayList<String>(); keyList.addAll(keySet); synchronized (pos) { if(pos >= keyList.size()){ pos = 0; } serverIp = keyList.get(pos); pos ++; } return serverIp; } /** * 加权轮询法 * @return */ public static String weightRoundRobin(){ String serverIp = null; //重新创建一个Map,避免出现由于服务器上线和下线导致的并发问题 Map<String,Integer> serverIps = new HashMap<String,Integer>(); serverIps.putAll(getServerIps()); Set<String> keySet = serverIps.keySet(); Iterator<String> it = keySet.iterator(); List<String> keyList = new ArrayList<String>(); while(it.hasNext()){ String key = it.next(); Integer weight = serverIps.get(key); for(int i=0;i<weight;i++){ keyList.add(key); } } synchronized (pos) { if(pos >= keyList.size()){ pos = 0; } serverIp = keyList.get(pos); pos ++; } return serverIp; } public static void main(String[] args){ //测试权重随机法 System.out.println("***************测试权重随机法***************"); System.out.println(LoadBalance.weightRandom()); System.out.println(LoadBalance.weightRandom()); System.out.println(LoadBalance.weightRandom()); System.out.println(LoadBalance.weightRandom()); System.out.println(LoadBalance.weightRandom()); System.out.println(LoadBalance.weightRandom()); System.out.println(LoadBalance.weightRandom()); System.out.println(LoadBalance.weightRandom()); System.out.println(LoadBalance.weightRandom()); System.out.println(LoadBalance.weightRandom()); System.out.println(LoadBalance.weightRandom()); System.out.println("***************测试权重随机法***************"); //测试权重轮询法 System.out.println("***************测试权重轮询法***************"); System.out.println(LoadBalance.weightRoundRobin()); System.out.println(LoadBalance.weightRoundRobin()); System.out.println(LoadBalance.weightRoundRobin()); System.out.println(LoadBalance.weightRoundRobin()); System.out.println(LoadBalance.weightRoundRobin()); System.out.println(LoadBalance.weightRoundRobin()); System.out.println(LoadBalance.weightRoundRobin()); System.out.println(LoadBalance.weightRoundRobin()); System.out.println(LoadBalance.weightRoundRobin()); System.out.println(LoadBalance.weightRoundRobin()); System.out.println(LoadBalance.weightRoundRobin()); System.out.println("***************测试权重轮询法***************"); //测试源地址法 System.out.println("***************测试源地址法***************"); System.out.println(LoadBalance.consumerHash("192.168.0.1")); System.out.println(LoadBalance.consumerHash("192.168.0.2")); System.out.println(LoadBalance.consumerHash("192.168.0.3")); System.out.println(LoadBalance.consumerHash("192.168.0.4")); System.out.println(LoadBalance.consumerHash("192.168.0.5")); System.out.println(LoadBalance.consumerHash("192.168.0.6")); System.out.println(LoadBalance.consumerHash("192.168.0.7")); System.out.println(LoadBalance.consumerHash("192.168.0.8")); System.out.println(LoadBalance.consumerHash("192.168.0.9")); System.out.println(LoadBalance.consumerHash("192.168.0.10")); System.out.println("***************测试源地址法***************"); System.out.println("***************测试轮询法***************"); //测试轮询法 System.out.println(LoadBalance.roundRobin()); System.out.println(LoadBalance.roundRobin()); System.out.println(LoadBalance.roundRobin()); System.out.println(LoadBalance.roundRobin()); System.out.println(LoadBalance.roundRobin()); System.out.println(LoadBalance.roundRobin()); System.out.println(LoadBalance.roundRobin()); System.out.println(LoadBalance.roundRobin()); System.out.println(LoadBalance.roundRobin()); System.out.println(LoadBalance.roundRobin()); System.out.println(LoadBalance.roundRobin()); System.out.println("***************测试轮询法***************"); //测试随机法 System.out.println("***************测试随机法***************"); System.out.println(LoadBalance.random()); System.out.println(LoadBalance.random()); System.out.println(LoadBalance.random()); System.out.println(LoadBalance.random()); System.out.println(LoadBalance.random()); System.out.println(LoadBalance.random()); System.out.println(LoadBalance.random()); System.out.println(LoadBalance.random()); System.out.println(LoadBalance.random()); System.out.println(LoadBalance.random()); System.out.println(LoadBalance.random()); System.out.println("***************测试随机法***************"); }}
输出:
0 0
- 负载均衡算法(java)
- 负载均衡算法及其Java代码实现
- 常见负载均衡算法及java实现
- 负载均衡算法及其Java代码实现
- 负载均衡算法及其Java代码实现
- 负载均衡--服务器集群负载均衡算法
- 负载均衡算法
- 负载均衡算法小结
- 负载均衡算法大全
- 负载均衡算法随笔
- 负载均衡算法随笔
- 负载均衡算法
- 负载均衡算法
- 负载均衡算法
- LVS 负载均衡算法
- 负载均衡算法小结
- 负载均衡算法小结
- 负载均衡算法
- 支持全平台的服务器监控报警系统 Shinken
- c++的日志库
- linux input系列------input的初始化
- Android弹幕功能实现,模仿斗鱼直播的弹幕效果
- 深度学习与自然语言处理Lecture-1笔记
- 负载均衡算法(java)
- 颜色配表
- springMVC开发过程中遇到的404错误的两种情况总结
- 最近做的一道交互题
- VS调试的一些基本的技巧
- 织梦列表页当前位置修改
- eclipse快捷键汇总
- 伪元素 :before 与 :after(10.19)
- jquery解密