引言
- 负载均衡的定义;
- 负载均衡算法;
- 负载均衡的应用场景;
负载均衡的定义
负载均衡(Load Balance)是一种集群技术,它将特定的业务(网络服务、网络流量等)分担给多台网络设备(包括服务器、防火墙等)或多条链路,从而提高了业务处理能力,保证了业务的高可靠性。负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
负载均衡有两方面的含义:首先,大量的并发访问或数据流量分担到多台节点设备上分别处理,减少用户等待响应的时间;其次,单个重负载的运算分担到多台节点设备上做并行处理,每个节点设备处理结束后,将结果汇总,返回给用户,系统处理能力得到大幅度提高。目前负载均衡技术大多数是用于提高诸如在Web服务器、FTP服务器和其它关键任务服务器上的Internet服务器程序的可用性和可伸缩性。
技术特点
-
高性能:负载均衡技术将业务较均衡地分配到多台设备或多条链路上,提高了整个系统的性能,提升用户请求的响应性。
-
可扩展性:负载均衡技术可以方便地增加集群中设备或链路的数量,在不降低业务质量的前提下满足不断增长的业务需求。
-
高可靠性:单个甚至多个设备或链路发生故障也不会导致业务中断,提高了整个系统的可靠性。
-
可管理性:大量的管理工作都集中在应用负载均衡技术的设备上,设备群或链路群只需要通常的配置和维护即可。
-
透明性:对用户而言,集群等同于一个可靠性高、性能好的设备或链路,用户感知不到也不必关心具体的网络结构。增加和减少设备或链路均不会影响正常的业务。
负载均衡算法
- 轮询法(Round Robin,RR)
- 加权轮询法(Weighted Round Robin,WRR)
- 源地址散列法(Source Hash)
- 最小连接数法(Least Connections)
(平均)轮询法
算法特点:轮询法均衡的对待每一台服务器,将请求按顺序轮流分配到后台服务器上,而不关心服务器实际的连接数、不同服务器的性能高低和当前的系统负载。
适用场景:每台服务器需要处理的请求数据都是相同,适合于所有服务器硬件都相同的场景;
import java.util.ArrayList;
class RoundRobinTest {
// 创建服务器集群数组
private static ArrayList<String> serverIpArray = new ArrayList<String>();
static {
serverIpArray.add("192.168.1.101");
serverIpArray.add("192.168.1.102");
serverIpArray.add("192.168.1.103");
serverIpArray.add("192.168.1.104");
serverIpArray.add("192.168.1.105");
}
// 轮询法是将请求按顺序轮流分配到后台服务器上,均衡对待每一个服务器
// currentIndex记录当前轮询的序号
private static Integer currentIndex = 0;
public static String getServerIp(){
synchronized (currentIndex){
// 轮询一轮后,计数序号清零
if (currentIndex >= serverIpArray.size()){
currentIndex = 0;
}
// 按序号获取服务器IP后,计数自加操作
return serverIpArray.get(currentIndex++);
}
}
public static void main(String[] args) {
// 用户请求次数
int requestTimes = 100;
// 模拟用户请求,并按轮询返回即将服务用户的服务器IP
for (int i =0; i<requestTimes; i++){
String serverIp = getServerIp();
System.out.println("Server: " + serverIp + " is servicing for your request...");
}
}
}
// 输出结果
Server: 192.168.1.101 is servicing for your request...
Server: 192.168.1.102 is servicing for your request...
Server: 192.168.1.103 is servicing for your request...
Server: 192.168.1.104 is servicing for your request...
Server: 192.168.1.105 is servicing for your request...
Server: 192.168.1.101 is servicing for your request...
Server: 192.168.1.102 is servicing for your request...
Server: 192.168.1.103 is servicing for your request...
Server: 192.168.1.104 is servicing for your request...
Server: 192.168.1.105 is servicing for your request...
(平滑)加权轮询
根据应用服务器硬件的性能的情况,在轮询的基础上,按照配置的权重将请求分发到每个服务器,高性能的服务器设置的权重较大,能分配更多的用户请求。
加权轮询算法一个明显的缺陷。即在某些特殊的权重下,加权轮询调度会生成不均匀的实例序列,这种不平滑的负载可能会使某些实例出现瞬时高负载的现象,导致系统存在宕机的风险。为了解决这个调度缺陷,就提出了平滑加权轮询调度算法。
平滑加权轮询,算法描述:
假设N台服务器,S={S1, S2, S3, ... , Sn},系统配置的权重是 W = {W