HTTP服务负载均衡总结

从一开始就要思考扩展的架构,所谓可扩展性指的是经过扩展规模提升承载能力的本领,每每体如今增长物理服务器或者集群节点。负载均衡是常见的水平扩展的手段。后端

目标:(1)减小单点故障(2)提高总体吞吐量(3)根据负载分配任务量缓存

 

HTTP重定向服务器

经过HTTP Location重定向,经过必定的策略(如地域就近)将主站URL转移到分站/镜像URL,分散主站工做量。实现负载均衡的同时,加快用户下载速度,适用于网络IO成为瓶颈时(以下载服务)。网络

HTTP重定向一般采用随机策略。若是使用轮询(RR),须要记录最后一次重定向的服务器序号,给一般无状态的HTTP带来额外开销;因为须要锁机制保证任什么时候刻只有一个请求能修改它,对并发性也有必定影响。session

根据几率统计理论,随着吞吐率的增长,随机调度也会逐渐趋近于顺序调度的均衡效果。架构

多数状况,重定向负载均衡很差控制,没法阻止用户直接访问真实服务器。只有相似文件下载、广告展现等一次性的请求适合重定向。并发

 

DNS负载均衡

DNS提供域名解析服务,即域名到ip的映射,这种映射能够是一对多的,这时DNS便起了负载均衡的做用。DNS服务器软件提供了丰富的调度策略,最经常使用的是根据用户IP进行智能解析,从全部可用的A记录中找到离用户最近的一台服务器。利用动态DNS,能够实现故障转移,但由于DNS的层级缓存,会存在必定延迟。分布式

除了由于缓存带来的更新延迟,因为负载均衡工做在DNS层面,调度灵活性较差,没法将HTTP请求的上下文引入调度策略。性能

 

反向代理

反向代理服务器的核心工做是转发HTTP请求,因此又叫七层负载均衡。相比HTTP重定向和DNS,反向代理是转发请求,而前者是转移。全部请求都通过反向代理,等待实际服务器(也叫后端服务器)的响应,再反馈给用户。这样能够将调度策略落实到每个HTTP请求,从而实现更加可控的负载均衡策略。

反向代理的扩展能力,一方面是自身并发处理的能力,当反向代理服务器吞吐率接近极限时,不管添加多少后端服务器也无济于事。另外一方面,转发操做自己须要必定开销,如建立线程、与后端服务器创建TCP链接、接收后端返回的处理结果、分析HTTP头信息、用户空间和内核空间的频繁切换等,一般这部分时间不长,但当后端服务器处理请求时间很是短时(如静态资源),转发的开销就显现出来。

反向代理通常都有监控后端服务器的功能,能够简单配置健康探测,调度器会自动放弃异常的后端服务器。实际应用能够部署必定数量的备用服务器,当一些后端服务器异常时接替它们的工做,保证总体性能。

若是后端服务器是有状态的,如在session中保存了用户数据,须要使用粘滞会话(Sticky Sessions)。一种方法是使用用户的IP地址做为标识,将IP地址作散列计算映射到后端服务器上。还能够利用Cookie,反向代理将后端服务器的编号追加写到用户的Cookie中,这样便知道下次请求该发给哪一个后端服务器。粘滞会话可能会破坏负载均衡策略,使得后端服务器个性化,尽可能避免在后端服务器存储状态,采用分布式Session或分布式缓存来替代。

 

IP

反向代理自己的开销制约了其扩展性,考虑将调度器工做在应用层如下,网络数据包从内核缓冲区进入用户地址空间以前,Linux内核就将其转发到实际服务器上。

image

NAT工做在传输层,能够修改数据包的IP地址和端口,因此也叫四层负载均衡。NAT服务器负责链接外部网络和内部网络,实际服务器必须将NAT服务器做为默认网关。当数据包到达NAT服务器,NAT服务器将目标地址从NAT的地址修改成实际服务器地址的IP和端口,而后指定内部网卡将数据包投递到内部网络;实际服务器收到数据包进行处理,数据包到达默认网关,即NAT服务器,NAT服务器再修改数据包,将源地址从实际服务器地址改成NAT服务器。Linux使用NetFilter/iptables维护数据包路由规则。使用IPVS(LVS)配置基于NAT的负载均衡。因为在内核转发的低开销,吞吐率比反向代理高,转发能力主要取决于NAT服务器的网络带宽。

image

对于下载或视频等站点,NAT服务器的带宽会成为瓶颈。LVS提供了直接路由(Direct Router)的方式,它的负载均衡工做在数据链路层,经过修改数据包的MAC地址,将数据包转发到实际服务器,并且响应数据包直接发给用户端,不用通过调度器,因此实际服务器必须直接接入外部网络,也不能将调度器设为默认网关。直接路由使用IP别名,须要给实际服务器添加和调度器IP地址相同的IP别名,这样能够正常将请求数据包转发到实际服务器。一般响应数据包比请求数据包大的多,因此LVS-DR的优点就是响应数据包不用通过调度器,避免了调度器的带宽瓶颈。

imageimage

相关文章
相关标签/搜索