标签:随机 shm pos public array 算法 load slist list
1、随机算法
随机算法的实现很简单,我们可以直接通过Random的nextInt()方法实现一个加权随机算法,这种方式在日常的开发工作中还是很常用到的。
我们首先定义一个ServerIps类,用来存放所有服务IP值
public class ServerIps { public static final List<String> LIST = Arrays.asList( "192.168.0.1", "192.168.0.2", "192.168.0.3", "192.168.0.4", "192.168.0.5", "192.168.0.6", "192.168.0.7", "192.168.0.8", "192.168.0.9", "192.168.0.10" ); }
然后我们创建类LoadBalance来实现随机算法
public class LoadBalance { public static String getServer(){ Random random = new Random(); int randomPos = random.nextInt(ServerIps.LIST.size()); return ServerIps.LIST.get(randomPos); } }
2、加权随机算法
我们生产环境上部署多台服务,可能有的机器性能好,有道机器性能较差,这个时候我们希望更多的请求能够落在性能好的机器上,而性能差的机器处理更少的请求
这个时候我们就需要使用加权随机算法来实现负载均衡,可以通过Map来实现加权
public class ServerIps { public static final Map<String, Integer> WEIGHT_LIST = new HashMap<>(); static { WEIGHT_LIST.put("192.168.0.1",5); WEIGHT_LIST.put("192.168.0.2",3); WEIGHT_LIST.put("192.168.0.3",1); WEIGHT_LIST.put("192.168.0.4",6); WEIGHT_LIST.put("192.168.0.5",2); WEIGHT_LIST.put("192.168.0.6",1); WEIGHT_LIST.put("192.168.0.7",7); WEIGHT_LIST.put("192.168.0.8",1); WEIGHT_LIST.put("192.168.0.9",1); WEIGHT_LIST.put("192.168.0.10",1); } }
public class LoadBalance { public static String getServer(){ List<String> ips = new ArrayList<>(); ServerIps.WEIGHT_LIST.forEach((k, v) ->{ String ip = k; Integer weight = v; for (int i = 0;i < weight; i++){ ips.add(ip); } }); Random random = new Random(); int randomPos = random.nextInt(ips.size()); return ips.get(randomPos); } }
标签:随机 shm pos public array 算法 load slist list
原文地址:https://www.cnblogs.com/chentop/p/11247766.html