负载均衡算法---Java简单实现(2)

上一篇介绍了负载均衡的轮询,随机,跟hash算法,这边我们一起了解下,加权的轮询以及加权的随机。其实理解好了轮询跟随机算法,再加权的话其实是差不多的。

看面通过代码来了解:

(1)为了不重复创建一个server列表,我们先建立一个共有的server列表,如下:


	public static Map<String,Integer> ipMapList = new HashMap<String,Integer>();
	
	static{
		ipMapList.put("102.33.22.34", 3);
		ipMapList.put("102.33.21.35", 1); 
		ipMapList.put("102.33.23.36", 7); 
		ipMapList.put("102.33.24.37", 6); 
		ipMapList.put("102.33.25.38", 2);
		ipMapList.put("102.33.26.39", 2);
		ipMapList.put("102.33.27.11", 4);
		ipMapList.put("102.33.28.56", 8);
		ipMapList.put("102.33.29.56", 4);
		ipMapList.put("102.33.30.37", 9);
	}

(2)我们先来认识下加权轮询:

private static volatile int pos = 0;
	
	public static String getServerIP(){
		String ip = null;
		Map<String,Integer> map = new HashMap<String,Integer>();
		map.putAll(IPMapList.ipMapList);
		Set<String> keySet = map.keySet();
		Iterator<String> iterator = keySet.iterator();
		List<String> list = new ArrayList<>();
		while(iterator.hasNext()){
			String server = iterator.next();
			int weight = map.get(server);
			for(int i=0;i<weight;i++){
				list.add(server);
			}
					
		}
		if(pos>list.size()) pos = 0;
		ip = list.get(pos);
		pos++;
		return ip;
	}
	public static void main(String[] args) {
		System.out.println(getServerIP());
	}
看完之后是不是觉得没什么变化,只是添加了红色的部分,当然了,加权也不一定这样加,这里可以自己想适合的加权算法。

(3)加权随机

	public static String getServerIp(){
		String ip = null;
		Map<String,Integer> map = new HashMap<String,Integer>();
		map.putAll(IPMapList.ipMapList);
		Set<String> keySet = map.keySet();
		Iterator<String> iterator = keySet.iterator();
		List<String> list = new ArrayList<>();
		
		while(iterator.hasNext()){
			String server = iterator.next();
			int weight = map.get(server);
			for(int i=0;i<weight;i++){
				list.add(server);
			}
		}
		Random random = new Random();
		int pos = random.nextInt(list.size());
		ip = list.get(pos);
		return ip;
	}
	public static void main(String[] args) {
		System.out.println(getServerIp());
	}

对比一下,其实加权轮询和随机跟不加权只是单单添加了一个参数,来限制获取服务器的地址,这个根据适合场景,随机应变就好。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值