负载均衡算法

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);
    

 

以上是关于负载均衡算法的主要内容,如果未能解决你的问题,请参考以下文章

快速理解负载均衡

手写负载均衡算法

Nginx的负载均衡

手写分布式负载均衡算法

华为云服务-运维篇-负载均衡介绍与平台算法使用

分布式 | 常见的负载均衡算法