Nginx的优势是:web
一、工做在网络的7层之上,能够针对http应用作一些分流的策略,好比针对域名、目录结构正则表达式
它的正则规则比HAProxy更为强大和灵活,这也是它目前普遍流行的主要缘由之一算法
Nginx单凭这点可利用的场合就远多于LVS了。数据库
二、Nginx对网络稳定性的依赖很是小,理论上能ping通就就能进行负载功能,这个也是它的优点之一后端
相反LVS对网络稳定性依赖比较大,这点本人深有体会;缓存
三、Nginx安装和配置比较简单,测试起来比较方便,它基本能把错误用日志打印出来服务器
LVS的配置、测试就要花比较长的时间了,LVS对网络依赖比较大。cookie
四、能够承担高负载压力且稳定,在硬件不差的状况下通常能支撑几万次的并发量,负载度比LVS相对小些。网络
五、Nginx能够经过端口检测到服务器内部的故障,好比根据服务器处理网页返回的状态码、超时等等,而且会把返回错误的请求从新提交到另外一个节点,不过其中缺点就是不支持url来检测。好比用户正在上传一个文件,而处理该上传的节点恰好在上传过程当中出现故障,Nginx会把上传切到另外一台服务器从新处理,而LVS就直接断掉了session
若是是上传一个很大的文件或者很重要的文件的话,用户可能会所以而不满。
六、Nginx不只仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器
LNMP也是近几年很是流行的web架构,在高流量的环境中稳定性也很好。
七、Nginx如今做为Web反向加速缓存愈来愈成熟了,速度比传统的Squid服务器更快,可考虑用其做为反向代理加速器
八、Nginx可做为中层反向代理使用,这一层面Nginx基本上无对手,惟一能够对比Nginx的就只有lighttpd了
不过lighttpd目前尚未作到Nginx彻底的功能,配置也不那么清晰易读,社区资料也远远没Nginx活跃
九、Nginx也可做为静态网页和图片服务器,这方面的性能也无对手。还有Nginx社区很是活跃,第三方模块也不少
Nginx的缺点是:
一、Nginx仅能支持http、https和Email协议,这样就在适用范围上面小些,这个是它的缺点
二、对后端服务器的健康检查,只支持经过端口来检测,不支持经过url来检测
不支持Session的直接保持,但能经过ip_hash来解决
LVS:使用Linux内核集群实现一个高性能、高可用的负载均衡服务器
它具备很好的可伸缩性(Scalability)、可靠性(Reliability)和可管理性(Manageability)
LVS的优势是:
一、抗负载能力强、是工做在网络4层之上仅做分发之用,没有流量的产生
这个特色也决定了它在负载均衡软件里的性能最强的,对内存和cpu资源消耗比较低
二、配置性比较低,这是一个缺点也是一个优势,由于没有可太多配置的东西
因此并不须要太多接触,大大减小了人为出错的概率
三、工做稳定,由于其自己抗负载能力很强,自身有完整的双机热备方案
如LVS+Keepalived,不过咱们在项目实施中用得最多的仍是LVS/DR+Keepalived
四、无流量,LVS只分发请求,而流量并不从它自己出去,这点保证了均衡器IO的性能不会收到大流量的影响。
五、应用范围较广,由于LVS工做在4层,因此它几乎可对全部应用作负载均衡,包括http、数据库、在线聊天室等
LVS的缺点是:
一、软件自己不支持正则表达式处理,不能作动静分离
而如今许多网站在这方面都有较强的需求,这个是Nginx/HAProxy+Keepalived的优点所在
二、若是是网站应用比较庞大的话,LVS/DR+Keepalived实施起来就比较复杂了
特别后面有Windows Server的机器的话,若是实施及配置还有维护过程就比较复杂了
相对而言,Nginx/HAProxy+Keepalived就简单多了。
HAProxy的特色是:
一、HAProxy也是支持虚拟主机的。
二、HAProxy的优势可以补充Nginx的一些缺点,好比支持Session的保持,Cookie的引导
同时支持经过获取指定的url来检测后端服务器的状态
三、HAProxy跟LVS相似,自己就只是一款负载均衡软件
单纯从效率上来说HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的
四、HAProxy支持TCP协议的负载均衡转发,能够对MySQL读进行负载均衡
对后端的MySQL节点进行检测和负载均衡,你们能够用LVS+Keepalived对MySQL主从作负载均衡
五、HAProxy负载均衡策略很是多,HAProxy的负载均衡算法如今具体有以下8种:
①roundrobin,表示简单的轮询,这个很少说,这个是负载均衡基本都具有的;
② static-rr,表示根据权重,建议关注;
③leastconn,表示最少链接者先处理,建议关注;
④ source,表示根据请求源IP,这个跟Nginx的IP_hash机制相似
咱们用其做为解决session问题的一种方法,建议关注;
⑤ri,表示根据请求的URI;
⑥rl_param,表示根据请求的URl参数’balance url_param’ requires an URL parameter name;
⑦hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
⑧rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。