im icon indicating copy to clipboard operation
im copied to clipboard

关于随机的方式选择服务器节点的疑问

Open YeFei572 opened this issue 2 years ago • 3 comments

hi,master分支下面的随机选择节点有点疑问请教一下:

protected ServerNode doSelect(List<ServerNode> serverNodes) {
    int size = serverNodes.size();
    int[] weights = new int[size];
    int total = 0 ;
    for(int i=0;i<size;i++){
	    Integer weight = serverNodes.get(i).getWeight();
	    total+=weight;
	    weights[i] = total;
    }
    //类似于抽奖算法
    int randomIndex = ThreadLocalRandom.current().nextInt(weights[size - 1]);
    for(int index = 0;index<size;index++){
	    if(randomIndex < weights[index]){
		    return serverNodes.get(index);
	    }
    }
    return serverNodes.get(ThreadLocalRandom.current().nextInt(serverNodes.size()));
}

0客户端的时候启动2个服务节点,此时2个服务节点的权重weight是不是都是0? 如果是的话

    int randomIndex = ThreadLocalRandom.current().nextInt(weights[size - 1]);

这个里面的nextInt一直时0,会报错吧?

YeFei572 avatar Sep 15 '22 14:09 YeFei572