负载均衡有以下几种方式:
一、基于客户端方式:
每个客户程序都具有一定的服务器集群的知识,进而把以负载均衡的方式将请求发到不同的服务器。这种方式比较原始,现在一些老系统还在使用这种方式,客户端简单的使用轮询实现负载均衡。这种方式的可靠性,可维护性都很低,加重客户端开发的难度。
结构图如下:
二、基于DNS(DNS服务器)
a. 根据客户端IP地域将域名解析到不同的真实服务器
b. 对同一区域的真实服务器,使用Round-Robin把域名轮流解析到不同的真实服务器
DNS做负载均衡简单方便,但DNS的缓存时间较长,一旦出现问题,更新DNS信息需要等待客户端数分钟甚至数十分钟,可靠性不高,负载均衡算法也不够灵活。
PS:南方客户每回询问DNS会被告知到不同的南方服务器IP,北方用户同理
三、HTTP重定向(服务端)
这是一种由服务端决定负载均衡的方法,服务器根据自身的负荷和用户的IP地域,将用户的请求使用HTTP 302重定向到其他服务器。
四、基于第三方应用
类似于DNS的方式,或者说DNS的负载均衡是这种方式的一种实现。这种方式需要一个第三方应用,它将作为整个系统中负载均衡的咨询师,服务器集群将自身的状态同步给第三方应用,客户端在发请求之前先询问第三方应用,在根据第三方应用的应答发出请求。这种方式具有高可定制性,但服务端和客户端都需要增加定制的客户端活API。
结构图如下:
五、基于数据链路层
这个是很底层的负载均衡,一般实现于网络设备硬件中。如交换机或路由,统计各个端口的负载做适当的转发。
六、基于传输层
在服务器集群前端有一台或数台高稳定性的负载均衡服务器,所有请求先到达负载均衡服务器,负载均衡服务器再使用Round-Robin等方式转发请求到真实服务器。
有三种IP负载均衡技术:VS/NAT、VS/DR、VS/TUN。
1)VS/NAT(Virtual Server via Network Address Translation):通过网络地址转换(Network Address Translation)将内部地址转化为Internets上可用的外部地址。
2)VSDR(Virtual Server via Direct Routing):通过直接路由实现虚拟服务器。与VS/TUN方法相同,VS/DR利用大多数Internet服务的非对称特点,负载调度器中只负责调度请求,而服务器直接将响应返回给客户,可以极大地提高整个集群系统的吞吐量。
3)VS/TUN(Virtual Server via IP Tunneling):通过IP隧道实现虚拟服务器,将请求报文封装动态地转发给后端服务器,响应报文能从后端服务器直接返回给客户。因请求报文较短而响应报文往往包含大量的数据,可以大大降低负载均衡器的压力。所有的服务器必须支持“IP Tunneling"或者"IP Encapsulation"协议。
七、基于应用层
类似基于传输层的方式,但支持解析应用层数据,负载均衡算法较传输层方式更灵活,对于多个非重要小业务,可接入到同一IP。
八、基于运算
将负载的运算分隔成不同模块,分摊给不同集群节点分别计算以提升计算速度。如Hadoop。
这里每个都是单一点,实际项目中,经常是混合好几种技术来实现整体的负载均衡。