负载均衡算法
Posted chentop
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了负载均衡算法相关的知识,希望对你有一定的参考价值。
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);
以上是关于负载均衡算法的主要内容,如果未能解决你的问题,请参考以下文章