负载均衡


负载均衡

概念:LB (Load Balance,负载均衡)是一种集群技术,它将特定的业务(网络服务、网络流量等)分担给多台网络设备(包括服务器、防火墙等)或多条链路,从而提高了业务处理能力,保证了业务的高可靠性。

负载均衡计数具有以下优势:

  1. 高性能:负载均衡技术将业务较均衡地分担到多台设备或链路上,从而提高了整个系统的性能。
  2. 可扩展性:负载均衡技术可以方便的增加集群中设备或链路的数量,在不降低业务质量的前提下满足不断增长的业务需求。
  3. 高可靠性:单个设置多个设备或链路故障也不会导致业务中断,提高了系统的可靠性。
  4. 可管理性:大量的管理共组都集中在使用负载均衡技术的设备上,设备集群或链路集群只需要维护通过的配置即可。
  5. 透明性:对用户而言,集群等于一个或多个高可靠性、高性能的设备或链路,用户感知不到,也不关心具体的网络结构,增加或减少设备或链路数量都不会影响正常的业务。

负载均衡技术分类:

  1. 服务器负载均衡:在数据中心等组网环境中,可以采用服务器负载均衡,将网络服务分担给多台服务器进行处理,提高数据中心的业务处理能力。
  2. 链路负载均衡:在有多个运营商出接口的组网环境中,可以采用出方向多链路动态负载均衡,实现链路的动态选择,提高服务的可靠性。
  3. 防火墙负载均衡:在防火墙处理能力成为瓶颈的组网环境中,可以采用防火墙负载均衡,将网络流量分担给多态防火墙设备,提高防火墙的处理能力。

负载均衡算法

最简单的负载均衡算法是随机算法和轮询算法。

模拟加权随机算法

List<String> deviceList = 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"
    );

Map<String, Integer> weightMap = new HashMap<>();

public String getServer() {

    ArrayList<String> list = new ArrayList<>();
    for (String ip : weightMap.keySet()) {
        Integer integer = weightMap.get(ip);
        for (int i = 0; i < integer; i++) {
            list.add(ip);
        }
    }
    Random random = new Random();
    return list.get(random.nextInt(list.size()));
}

@Test
public void runTest() {

    Random random = new Random();
    deviceList.forEach( (a) -> {weightMap.put(a, random.nextInt(10));});
    for (int i = 0; i < 10; i++) {
        System.out.println(getServer());
    }

}

简单的轮询就是依次遍历每台机子,把业务放在当前遍历的机子上就行。

模拟轮询:


文章作者: 小灰灰
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小灰灰 !
评论
  目录