随机负载
随机从服务列表中挑选一个服务
// 基于Java的随机负载均衡算法
public class RandomLoadBalancer {
// 传入服务器列表,返回随机选择的服务器
public Server selectServer(List<Server> serverList) {
// 获取服务器列表大小
int size = serverList.size();
// 生成随机数
int randomIndex = new Random().nextInt(size);
// 返回随机选择的服务器
return serverList.get(randomIndex);
}
// 服务器类
public static class Server {
private String ip;
private int port;
public Server(String ip, int port) {
this.ip = ip;
this.port = port;
}
// getter和setter方法省略
}
}
轮询负载
遍历服务列表(排好队一个一个来)
public class RoundRobinLoadBalancer {
// 记录上一次选择的服务器下标
private int lastIndex = -1;
// 传入服务器列表,返回轮询选择的服务器
public Server selectServer(List<Server> serverList) {
// 获取服务器列表大小
int size = serverList.size();
// 如果服务器列表为空,返回null
if (size == 0) {
return null;
}
// 如果只有一个服务器,直接返回该服务器
if (size == 1) {
return serverList.get(0);
}
// 上锁,保证线程安全
synchronized (this) {
// 如果上一次选择的服务器下标超出了服务器列表大小,重置为-1
if (lastIndex >= size) {
lastIndex = -1;
}
// 选择