随机(Random)算法
通过系统随机函数,根据后端服务器列表的大小值来随机选取其中一台进行访问。由概率统计理论可以得知,随着调用量的增大,其实际效果越来越接近于平均分配流量到每一台后端服务器,也就是轮询的效果
public class RandomTest {
static List<String> list = Arrays.asList("192.168.0.101","192.168.0.102", "192.168.0.103", "192.168.0.104");
public static void main(String[] args) throws InterruptedException {
while (true){
System.err.println(get());
TimeUnit.SECONDS.sleep(1);
}
}
private static synchronized String get(){
// 拷贝服务列表避免出现由于服务器上线和下线导致的并发问题
List<String> result = new ArrayList<>();
result.addAll(list);
Random random = new Random();
int randomPos = random.nextInt(result.size());
return result.get(randomPos);
}
}
基于概率统计的理论,吞吐量越大,随机算法的效果越接近于轮询算法的效果。因此基本可以替代轮询算法