java轮训算法_负载均衡轮询算法实现疑问

import java.util.ArrayList;

import java.util.HashMap;

import java.util.Map;

import java.util.Set;

/* 模拟实现:负载均衡的轮询算法 */

public class RoundRobin {

public static void main(String[] args) {

Map serverWeightMap = new HashMap();

serverWeightMap.put("192.168.0.1", 1);

serverWeightMap.put("192.168.0.2", 2);

serverWeightMap.put("192.168.0.3", 1);

serverWeightMap.put("192.168.0.4", 4);

serverWeightMap.put("192.168.0.5", 3);

serverWeightMap.put("192.168.0.6", 1);

/* 重新创建一个Map,避免由于服务器上线和下线导致的并发问题 */

Map serverMap = new HashMap();

serverMap.putAll(serverWeightMap);

Set keySet = serverMap.keySet();

ArrayList keyList = new ArrayList();

keyList.addAll(keySet);

/* 定义了轮询位置 */

Integer POS = 2;

String currentServer;

synchronized (POS) {

if (POS > keyList.size()) {

POS = 0;

}

currentServer = keyList.get(POS++);

}

System.out.println("current server is : " + currentServer);

}

}

上述代码模拟实现了负载均衡中的轮询算法,但是代码中有这么一段不是很懂。为什么另外还要搞一个map呢?而且就算这样,假如serverWeightMap中有服务器宕机,虽然采用了putAll的复制措施,但是这样可能导致的情况就是,轮询后的server可能是不可用的,因为服务器宕机更新的map,并不是现在的map结构。

/* 重新创建一个Map,避免由于服务器上线和下线导致的并发问题 */

Map serverMap = new HashMap();

serverMap.putAll(serverWeightMap);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值