负载均衡
概念:LB (Load Balance,负载均衡)是一种集群技术,它将特定的业务(网络服务、网络流量等)分担给多台网络设备(包括服务器、防火墙等)或多条链路,从而提高了业务处理能力,保证了业务的高可靠性。
负载均衡计数具有以下优势:
- 高性能:负载均衡技术将业务较均衡地分担到多台设备或链路上,从而提高了整个系统的性能。
- 可扩展性:负载均衡技术可以方便的增加集群中设备或链路的数量,在不降低业务质量的前提下满足不断增长的业务需求。
- 高可靠性:单个设置多个设备或链路故障也不会导致业务中断,提高了系统的可靠性。
- 可管理性:大量的管理共组都集中在使用负载均衡技术的设备上,设备集群或链路集群只需要维护通过的配置即可。
- 透明性:对用户而言,集群等于一个或多个高可靠性、高性能的设备或链路,用户感知不到,也不关心具体的网络结构,增加或减少设备或链路数量都不会影响正常的业务。
负载均衡技术分类:
- 服务器负载均衡:在数据中心等组网环境中,可以采用服务器负载均衡,将网络服务分担给多台服务器进行处理,提高数据中心的业务处理能力。
- 链路负载均衡:在有多个运营商出接口的组网环境中,可以采用出方向多链路动态负载均衡,实现链路的动态选择,提高服务的可靠性。
- 防火墙负载均衡:在防火墙处理能力成为瓶颈的组网环境中,可以采用防火墙负载均衡,将网络流量分担给多态防火墙设备,提高防火墙的处理能力。
负载均衡算法
最简单的负载均衡算法是随机算法和轮询算法。
模拟加权随机算法
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());
}
}
简单的轮询就是依次遍历每台机子,把业务放在当前遍历的机子上就行。
模拟轮询: