LVS的负载能力强,因为其工作方式逻辑非常简单,仅进行请求分发,而且工作在网络的第4层,没有流量,所以其效率不需要有过多的忧虑。
Nginx工作在
网路第7层
,所以可以对HTTP应用实施分流策略,比如域名、结构等。相比之下,LVS并不具备这样的功能,所以Nginx可使用的场合远多于LVS。并且Nginx对网络的依赖比较小,理论上只要Ping得通,网页访问正常就能连通。LVS比较依赖网络环境。只有使用DR模式且服务器在同一网段内分流,效果才能得到保证。
Nginx可以通过服务器处理网页返回的状态吗、超时等来检测服务器内部的故障,并会把返回错误的请求重新发送到另一个节点。目前LVS和LDirectd 也支持对服务器内部情况的监控,但不能重新发送请求。
比如用户正在上传一个文件,而处理该上传信息的节点刚好出现故障,则Nginx会把上传请求重新发送到另一台服务器,而LVS在这种情况下会直接断掉。Nginx还能支持HTTP和Email(Email功能很少有人使用),LVS所支持的应用在这个电商比Nginx更多。
Nginx同样能承受很高负载并且能稳定运行,由于处理流量受限于机器I/O等配置,所以负载能力相对较差。
Nginx 安装、配置及测试相对来说比较简单,因为有相应的错误日志进行提示。LVS的安装、配置及测试所花的时间比较长,因为LVS对网络以来比较大,很多时候有可能因为网络问题而配置不能成功,出现问题时,解决的难度也相对较大。Nginx本身没有现成的热备方案,所以在单机上运行风险较大,
建议KeepAlived
配合使用。另外,Nginx可以作为LVS的节点机器使用,充分利用Nginx的功能和性能。当然这种情况也可以直接使用Squid等其他具备分发功能的软件。
具体应用具体分析。如果是比较小型的网站(每日PV小于100万),用户Nginx就完全可以应对,如果机器也不少,可以用DNS轮询。LVS后用的机器较多,在构建大型网站或者提供重要服务且机器较多时,可多加考虑利用LVS。