• UID1
  • 登录2016-01-24
  • 粉丝578
  • 关注562
  • 发帖64
  • 主页
  • 金币202070枚
原创写手
社区居民
admin 发布于2015-08-11 16:24
1/2642

Nginx/LVS/HAProxy 负载均衡软件的优缺点对比

楼层直达
Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,一般对负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术,具体的应用需求还得具体分析。
如果是中小型的Web应用,比如日PV小于1000万,用Nginx就完全可以了;如果机器不少,可以用DNS轮询,LVS所耗费的机器还是比较多的;大型网站或重要的服务,且服务器比较多时,可以考虑用LVS。
目前关于网站架构一般比较合理流行的架构方案:Web前端采用Nginx/HAProxy+Keepalived作负载均衡器;后端采用MySQL数据库一主多从和读写分离,采用LVS+Keepalived的架构。当然要根据项目具体需求制定方案,下面说说各自的特点和适用场合。
Nginx
Nginx的优点:

  • 工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构,它的正则规则比HAProxy更为强大和灵活,这也是它目前广泛流行的主要原因之一,Nginx单凭这点可利用的场合就远多于LVS了。
  • Nginx对网络稳定性的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势之一;相反LVS对网络稳定性依赖比较大,这点用过Nginx的人都深有体会;
  • Nginx安装和配置比较简单,测试起来比较方便,它基本能把错误用日志打印出来。LVS的配置、测试就要花比较长的时间了,LVS对网络依赖比较大。
  • 可以承担高负载压力且稳定,在硬件不差的情况下一般能支撑几万次的并发量,负载度比LVS相对小些。
  • Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点,不过其中缺点就是不支持url来检测。比如用户正在上传一个文件,而处理该上传的节点刚好在上传过程中出现故障,Nginx会把上传切到另一台服务器重新处理,而LVS就直接断掉了,如果是上传一个很大的文件或者很重要的文件的话,用户可能会因此而不满。
  • 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
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也是支持虚拟主机的。
  • HAProxy的优点能够补充Nginx的一些缺点,比如支持Session的保持,Cookie的引导;同时支持通过获取指定的url来检测后端服务器的状态。
  • HAProxy跟LVS类似,本身就只是一款负载均衡软件;单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。
  • HAProxy支持TCP协议的负载均衡转发,可以对MySQL读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,大家可以用LVS+Keepalived对MySQL主从做负载均衡。
  • 5、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请求。
Nginx和LVS对比总结:
Nginx工作在网络的7层,所以它可以针对http应用本身来做分流策略,比如针对域名、目录结构等,相比之下LVS并不具备这样的功能,所以Nginx单凭这点可利用的场合就远多于LVS了;但Nginx有用的这些功能使其可调整度要高于LVS,所以经常要去触碰触碰,触碰多了,人为出问题的几率也就会大。
Nginx对网络稳定性的依赖较小,理论上只要ping得通,网页访问正常,Nginx就能连得通,这是Nginx的一大优势!Nginx同时还能区分内外网,如果是同时拥有内外网的节点,就相当于单机拥有了备份线路;LVS就比较依赖于网络环境,目前来看服务器在同一网段内并且LVS使用direct方式分流,效果较能得到保证。
另外注意,LVS需要向托管商至少申请多一个ip来做Visual IP,貌似是不能用本身的IP来做VIP的。要做好LVS管理员,确实得跟进学习很多有关网络通信方面的知识,就不再是一个HTTP那么简单了。
Nginx安装和配置比较简单,测试起来也很方便,因为它基本能把错误用日志打印出来。LVS的安装和配置、测试就要花比较长的时间了;LVS对网络依赖比较大,很多时候不能配置成功都是因为网络问题而不是配置问题,出了问题要解决也相应的会麻烦得多。
Nginx也同样能承受很高负载且稳定,但负载度和稳定度差LVS还有几个等级:Nginx处理所有流量所以受限于机器IO和配置;本身的bug也还是难以避免的。
Nginx可以检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点。目前LVS中 ldirectd也能支持针对服务器内部的情况来监控,但LVS的原理使其不能重发请求。
比如用户正在上传一个文件,而处理该上传的节点刚好在上传过程中出现故障,Nginx会把上传切到另一台服务器重新处理,而LVS就直接断掉了,如果是上传一个很大的文件或者很重要的文件的话,用户可能会因此而恼火。
Nginx对请求的异步处理可以帮助节点服务器减轻负载,假如使用apache直接对外服务,那么出现很多的窄带链接时apache服务器将会占用大 量内存而不能释放,使用多一个Nginx做apache代理的话,这些窄带链接会被Nginx挡住,apache上就不会堆积过多的请求,这样就减少了相当多的资源占用。这点使用squid也有相同的作用,即使squid本身配置为不缓存,对apache还是有很大帮助的。
Nginx能支持http、https和email(email的功能比较少用),LVS所支持的应用在这点上会比Nginx更多。在使用上,一般最前端所采取的策略应是LVS,也就是DNS的指向应为LVS均衡器,LVS的优点令它非常适合做这个任务。
重要的ip地址,最好交由LVS托管,比如数据库的 ip、webservice服务器的ip等等,这些ip地址随着时间推移,使用面会越来越大,如果更换ip则故障会接踵而至。所以将这些重要ip交给 LVS托管是最为稳妥的,这样做的唯一缺点是需要的VIP数量会比较多。
Nginx可作为LVS节点机器使用,一是可以利用Nginx的功能,二是可以利用Nginx的性能。当然这一层面也可以直接使用squid,squid的功能方面就比Nginx弱不少了,性能上也有所逊色于Nginx。Nginx也可作为中层代理使用,这一层面Nginx基本上无对手,唯一可以撼动Nginx的就只有lighttpd了,不过lighttpd目前还没有能做到 Nginx完全的功能,配置也不那么清晰易读。
另外,中层代理的IP也是重要的,所以中层代理也拥有一个VIP和LVS是最完美的方案了。具体的应用还得具体分析,如果是比较小的网站(日PV小于1000万),用Nginx就完全可以了,如果机器也不少,可以用DNS轮询,LVS所耗费的机器还是比较多的;大型网站或者重要的服务,机器不发愁的时候,要多多考虑利用LVS。
现在对网络负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术:

  • 第一阶段:利用Nginx或HAProxy进行单点的负载均衡,这一阶段服务器规模刚脱离开单服务器、单数据库的模式,需要一定的负载均衡,但是仍然规模较小没有专业的维护团队来进行维护,也没有需要进行大规模的网站部署。这样利用Nginx或HAproxy就是第一选择,此时这些东西上手快, 配置容易,在七层之上利用HTTP协议就可以。这时是第一选择。
  • 第二阶段:随着网络服务进一步扩大,这时单点的Nginx已经不能满足,这时使用LVS或者商用Array就是首要选择,Nginx此时就作为LVS或者Array的节点来使用,具体LVS或Array的是选择是根据公司规模和预算来选择,Array的应用交付功能非常强大,本人在某项目中使用过,性价比也远高于F5,商用首选!但是一般来说这阶段相关人才跟不上业务的提升,所以购买商业负载均衡已经成为了必经之路。关人才的能力以及数量也随之提升,这时无论从开发适合自身产品的定制,以及降低成本来讲开源的LVS,已经成为首选,这时LVS会成为主流。
  • 第三阶段:这时网络服务已经成为主流产品,此时随着公司知名度也进一步扩展,相关人才的能力以及数量也随之提升,这时无论从开发适合自身产品的定制,以及降低成本来讲开源的LVS,已经成为首选,这时LVS会成为主流。最终形成比较理想的基本架构为:Array/LVS — Nginx/Haproxy — Squid/Varnish — AppServer。
来源:linux中国

0人打赏
  • UID13538
  • 登录2016-10-22
  • 粉丝0
  • 关注0
  • 发帖4
  • 主页
  • 金币26枚
Amaze 发布于2016-08-26 10:30
沙发F
点赞点赞
您需要登录后才可以回帖
发表回复
极贡献
技术问答
专题荟萃
程序人生
视觉设计
Android开发
iOS开发
编程语言
前端开发
后端开发
服务器架构
软件测试
运维方案
创业路上



最热文章墙

  • 68719/364   【精品推荐】200多种Android动画效果的强悍框架,太全了,不看这个,再有动画的问题,不理你了^@^

  • 38819/190   情人节福利,程序员表白的正确姿势:改几行代码就变成自己的表白了

  • 35888/0   Python爬虫:常用浏览器的useragent

  • 35716/255   【精品推荐】Android版产品级的音乐播放器源码,功能太强大了,最好的产品原型有木有?

  • 35156/145   省时省力的Android组件群来了,非常棒的原型参考

  • 27822/2   超全!整理常用的iOS第三方资源

  • 26876/71   原创表白APP,以程序员的姿势备战新年后的7夕,持续完善中!

  • 26438/142   2016抢红包软件及源码

  • 21468/30   麻省理工的一帮疯子,真的实现了随意操控万物!(绝对黑科技)

  • 21134/25   Android工程师面试题大全

  • 20882/27   2016程序员跳槽全攻略

  • 20680/9   GitHub上排名前50的iOS项目:总有一款你用得着

  • 20468/155   Android版类似UC浏览器:非常赞,产品级的源码

  • 19767/20   码魂:程序员的牛B漫画

  • 18047/10   2016年最全的Android面试考题+答案 精编版

  • 17805/3   吐槽那些程序员的搞笑牛逼注释

  • 17040/42   一个绚丽的loading动效分析与实现!

  • 16838/85   Android小而全的博客源码:非常适合全面掌握开发技巧

  • 16810/73   【持续更新中】Android福利贴(二):资料源码大放送

  • 16782/1   iOS 动画总结

  • 16024/45   惊艳的App引导页:背景图片切换加各个页面动画效果

  • 15791/23   个人收集的Android 各类功能源代码

  • 15558/10   女程序员的梦,众网友的神回复

  • 15352/5   新一代Android渠道打包工具:1000个渠道包只需要5秒

  • 15299/11   年会上现场review代码是怎么样的体验!

  • 15177/81   仿京东商城客户端Android最新版,不错的原型和学习资料

  • 14802/53   基于瀑布流的美女图片浏览App,有注释的源代码

  • 14760/23   珍藏多年的素材,灵感搜寻网站

  • 14722/101   Android带弹幕的视频播放器源码,来自大名鼎鼎的Bilibili弹幕网站

  • 14667/17   用JavaScript 来开发iOS和Android 原生应用:React Native开源框架中文版来啦

  • 14574/20   Android福利第三波【Android电子书】

  • 14145/76   【精品推荐】类似360安全卫士安Android源码:非常赞的产品原型

  • 13851/0   iOS中文版资源库,非常全

  • 13817/15   基于Android支付宝支付设计和开发方案

  • 13771/18   65条最常用正则表达式,你要的都在这里了

  • 13280/17   什么是真正的黑客:收获12200+Stars,人气远超微软开源VS

  • 12934/11   有木有这样一张酷图帮你集齐所有git命令超实用

  • 12611/7   一张图搞定iOS学习路线,非常全面

  • 12561/7   用程序员的姿势抢过年的火车票

  • 12371/46   在线音乐播放器完整版(商用级的源码):非常赞,可听免费高品质专辑

  • 12262/10   成为Java顶尖程序员 ,看这11本书就够了

  • 12076/10   微信支付终于成功了(安卓,iOS),在此分享

  • 11992/18   一张图搞定Android学习路线,非常全面

  • 11823/0   GitHub iOS 库和框架Top100 

  • 11744/3   基于Node.js的强大爬虫,能直接发布抓取的文章哦

  • 11537/29   【持续更新中】Android福利贴(一):资料源码

  • 11523/61   【技巧一】搭配Android Studio,如何实现App远程真机debug?

  • 10957/4   46 个非常有用的 PHP 代码片段

  • 10837/3   即时通信第三方库

  • 10521/8   流媒体视频直播方案

  • 10389/9   B站建开源工作组:APP想支持炫酷弹幕的看过来

  • 10364/18   八个最优秀的Android Studio插件

  • 10254/9   烧了5亿美金,这家神秘的公司即将颠覆人类未来!

  • 10070/2   【精品推荐】高质量PHP代码的50个实用技巧:非常值得收藏

  • 10040/10   中国黑客的隐秘江湖:攻守对立,顶尖高手月入千万美元

  • 9478/6   开箱即用!Android四款系统架构工具

  • 9301/10   十大技巧快速提升Android应用开发性能

  • 9245/3   10款GitHub上最火爆的国产开源项目——可以媲美西半球

  • 9202/3   一张图看清Linux 内核运行原理

  • 8985/1   Android性能优化视频,文档以及工具

  • 返回顶部