基于域名系统的负载均衡
该方法是最早的负载均衡技术[15],在DNS 中为多个地址配置同一个域名,使得查询这个名字的客户机将得到其中一个地址,从而不同的客户可以访问不同的服务器,达到负载均衡的目的,这就是基于域名系统的负载均衡。很多知名的Web站点都使用了这个技术,包括Yahoo、Sina等站点。DNS轮循实现起来简单,无需复杂的配置和管理,简单,易行,并且服务器可以位于互联网的任意位置。但是不能考虑距离远近,减少记录的有效期TTL易造成网络信息冗余
基于应用层负载均衡调度的负载均衡
该方法将多台服务器通过高速的互联网络连接成一个集群系统,在前端有一个基于应用层的负载调度器[16]。当用户访问请求到达调度器时,请求会提交给作负载均衡调度的应用程序,分析请求,根据各个服务器的负载情况,选出一台服务器,重写请求并向选出的服务器访问,取得结果后,再返回给用户。该方法存在的问题是:系统处理开销较大,致使系统的伸缩性有限;基于应用层的负载均衡调度器对于不同的应用,需要重写不同的调度器。
基于IP层的负载均衡
基于IP层的负载均衡方法是现在最常用的方法。用户通过一个单一的IP地址(称为虚拟IP地址)访问服务器。访问请求的报文先到达负载均衡器,由它进行负载均衡调度,从后台服务器池中选出一个,将报文的目标地址改写成选定服务器的地址。报文的目标端口改写成选定服务器的相应端口,最后将报文发送给选定的服务器。真实服务器的响应报文经过负载均衡器时,将报文的源地址和源端口改为虚拟IP地址和相应的端口,再把报文发给用户
基于TCP层的负载均衡
该方法又被称为基于分发器或第四层的负载均衡调度[17],通常对外都有一个公用的虚拟IP地址(VirtualIPAddress),用户通过这虚拟地址访问服务时,访问请求的报文会到达虚拟服务器主机,由它进行负载均衡调度,从一组真实服务器选出一个,将报文的目标地址VirtualIPAddress改写成选定服务器的地址,报文的目标端口改写成选定服务器的相应端口,最后将报文发送给选定的服务器。真实服务器的回应报文经过虚拟服务器主机时,将报文的源地址和源端口改为VirtualIPAd-dress和相应的端口,再把报文发给用户。该方法用分配器监听TCP80端口并转发,但是容易形成分配器瓶颈。
基于客户端的负载均衡
该方法指的是在网络客户端运行特定的程序,该程序通过定期或不定期地收集服务器群的运行参数:CPU占用情况、磁盘I/O、内存等动态信息再根据某种选择策略,找到可以提供服务的最佳服务器,将本地的应用请求发向它。如果负载信息采集程序发现服务器失效,则找到其他可替代的服务器作为服务选择。整个过程对于应用程序来说是完全透明的,所有的工作都在运行时处理,是一种动态的负载均衡技术。
设计负载均衡算法应该考虑以下几点:
- 为了保证系统在长时间运行状态下,负载不发生较大倾斜,负载均衡系统每次选择的服务器,应该是服务器集群中负载较小的;
- 为了充分利用节点的处理能力,负载均衡系统在进行决策时,应该考虑全局的负载状态,获取的负载信息也要保证是最新的;由于用户请求的动态变化,服务器系统各处理节点上的负载也在不断变化,所以就要求系统能够根据某种动态均衡策略进行服务节点负载的均衡,为用户提供服务;
- 在得到每个服务器的负载状态信息之后,可以在综合考虑系统结构和负载特征等因素的基础上,对一般的均衡算法进行改进或者把几种方法结合在一起使用,以更好的适应系统的变化。