冯唐易老,李广难封。对于硬件设备来说,当你喜欢它的时候,它却慢慢老去;当你熟悉它的时候,它可能已经远远落后于时代。而软件,一个新版本又一个新版本出现,迎接时代的脚步;
前进、前进,在宽阔的路上前进;
奔跑、奔跑,在希望的路上奔跑。
这就是软件和硬件的不同。
能够实现负载均衡的软件或者方法有很多,而NginX是其中的优秀者。
Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有(可能):新浪、网易、腾讯等。
Nginx 可以在大多数 Unix以及相关操作系统上上编译运行,并有 Windows 移植版。 在高连接并发的情况下,Nginx是Apache服务器不错的替代品,能够支持高达 50,000 个并发连接数的响应。
Nginx作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务器对外进行服务。Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多。它已经移植到许多体系结构和操作系统,包括:Linux、FreeBSD、Solaris、Mac OS X、AIX以及MicrosoftWindows。Nginx有自己的函数库,并且除了zlib、PCRE和OpenSSL之外,标准模块只使用系统C库函数。而且,如果不需要或者考虑到潜在的授权冲突,可以不使用这些第三方库。
NginX的一些特性,一家之言,仅供参考。
优点:
1. Nginx安装和配置比较简单,测试起来比较方便;
2. Nginx对网络的依赖非常小,理论上能ping通就就能进行负载功能;
3. NginX是基于第7层负载均衡设备,可以针对http应用做一些分流的策略,比如针对域名、目录结构,支持正则表达式;
4. NginX能承担50,000个并发连接数的响应;
5. Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点,不过不支持url来检测服务器不可用的情况;
6. Nginx也能用作Web应用服务器。LNMP现在也是非常流行的web架构,大有和以前最流行的LAMP架构分庭抗争之势,在高流量的环境中也有很好的效果。
缺点:
不支持带参数的动态链接,比如read.jsp?id=1,因为Nginx缓存只保存文件名,所以这个链接只在文件系统下保存为read.jsp,这样用户访问read.jsp?id=2时会返回不正确的结果。
不支持首页和二级目缓存,比如http://www.csdn.com/ 和http://www.csdn.com/img/,因为Nginx会将这样的请求照链接写入文件系统,而这个链接显然是一个目录,所以保存失败。这些情况都需要写rewrite才能正确保存。
Nginx缓存内部没有缓存过期和清理的任何机制,这些缓存的文件会永久性地保存在机器上,如果要缓存的东西非常多,那就很快会写满整个磁盘,必须要监控磁盘容量以及定时处理;
Nginx不会自动选择内存或硬盘作为存储介质,一切由配置决定,如果都存在硬盘上,那么就有可能大并发读取造成的io性能问题。
只能缓存200状态码,因此后端返回301/302/404等状态码都不会缓存,假如恰好有一个访问量很大的伪静态链接被删除,那就会不停穿透导致后端承载不小压力。
F5和NginX方案优缺点对比:
基于硬件的方式(F5)
优点:能够直接通过智能交换机实现,处理能力更强,而且与系统无关,负载性能强更适用于一大堆设备、大访问量、简单应用;如果出了故障,有专业的支撑团队处理问题;如果是硬件本身的故障,那么责任清晰;
缺点:成本高,设备价格高昂,而且配置冗余。机房租恁、电费开销很大,而且需要培训专业人员。与此同时这个负载均衡设备是单点配置;
硬件负载均衡,与应用软件的结合一般是松耦合的,一般都不深入实际系统与应用的状态,一般都是从网络层或者静态页面的返回值来判断,所以有时候系统处理能力已经不行了,但是网络或者静态页面还能响应,硬件负载不能及时响应。
基于软件的方式(Nginx)
优点:基于系统与应用的负载均衡,能够更好地根据系统与应用的状况来分配负载。这对于复杂应用是很重要的,性价比高,实际上如果几台服务器,用F5之类的硬件产品显得有些浪费,而用软件就要合算得多,因为服务器同时还可以跑应用做集群等。
缺点:负载能力受服务器本身性能的影响,性能越好,负载能力越大。和应用结合太紧密,如果一个公司有很多的应用需要使用负载均衡设备,那么这不是一个好选择。如果这个系统出现故障,责任方难确定,如果负责选型的领导当初拍板做的决定,可能要负有领导责任,这个在一些特定场合的公司和情况下,是彻彻底底的灾难。
综述:对我负责的系统应用环境来说,因为运行环境和实际情况的背景要求,只能选择F5。当然,如果是在创业前的互联网公司,Nginx或者其他的软件负载均衡设备,才是最佳选择。