负载均衡 LVS 与 Nginx 对比

作者 | 等不到的口琴
来源 | urlify.cn/r26Fve
今天总结一下负载均衡中LVS与Nginx的区别,好几篇博文一开始就说LVS是单向的,Nginx是双向的,我个人认为这是不准确的,LVS三种模式中,虽然DR模式以及TUN模式只有请求的报文经过Director,但是NAT模式,Real Server回复的报文也会经过Director Server地址重写:

负载均衡 LVS 与 Nginx 对比

文章插图
 
文末领:LVS & Nginx实战教程
首先要清楚的一点是,LVS是一个四层的负载均衡器,虽然是四层,但并没有TCP握手以及分手,只是偷窥了IP等信息,而Nginx是一个七层的负载均衡器,所以效率势必比四层的LVS低很多,但是可操作性比LVS高,后面所有的讨论都是基于这个区别 。
为什么四册比七层效率高?
四层是TCP层,使用IP+端口四元组的方式 。只是修改下IP地址,然后转发给后端服务器,TCP三次握手是直接和后端连接的 。只不过在后端机器上看到的都是与代理机的IP的established而已,LVS中没有握手 。
7层代理则必须要先和代理机三次握手后,才能得到7层(HTT层)的具体内容,然后再转发 。意思就是代理机必须要与client和后端的机器都要建立连接 。显然性能不行,但胜在于七层,人工可操作性高,能写更多的转发规则 。
Nginx特点
Nginx 专为性能优化而开发,性能是其最重要的要求,十分注重效率,有报告 Nginx 能支持高达 50000 个并发连接数 。
正向代理与反向代理正向代理:局域网中的电脑用户想要直接访问服务器是不可行的,服务器可能Hold不住,只能通过代理服务器来访问,这种代理服务就被称为正向代理,特点是客户端知道自己访问的是代理服务器 。
负载均衡 LVS 与 Nginx 对比

文章插图
 
反向代理:客户端无法感知代理,因为客户端访问网络不需要配置,只要把请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据,然后再返回到客户端 。
此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址 。
负载均衡 LVS 与 Nginx 对比

文章插图
 
负载均衡客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服务器处理完毕之后,再将结果返回给客户端 。
普通请求和响应过程如下图:
负载均衡 LVS 与 Nginx 对比

文章插图
 
但是随着信息数量增长,访问量和数据量增长,单台的Server以及Database就成了系统的瓶颈,这种架构无法满足日益增长的需求,这时候要么提升单机的性能,要么增加服务器的数量 。
关于提升性能,这儿就不赘述,提提如何增加服务器的数量,构建集群,将请求分发到各个服务器上,将原来请求集中到单个服务器的情况改为请求分发到多个服务器,也就是我们说的负载均衡 。
图解负载均衡:
负载均衡 LVS 与 Nginx 对比

文章插图
 
关于服务器如何拆分组建集群,参考:redis集群拆分原则之AKF,这儿主要讲讲负载均衡,也就是图上的Proxy,可以是LVS,也可以是Nginx 。假设有 15 个请求发送到代理服务器,那么由代理服务器根据服务器数量(请求具体分配策略,可以参考LVS负载均衡理论以及算法概要后面的负载均衡调度算法),这儿假如是平均分配,那么每个服务器处理 5 个请求,这个过程就叫做负载均衡 。
动静分离为了加快网站的解析速度,可以把动态页面和静态页面交给不同的服务器来解析,加快解析的速度,降低由单个服务器的压力 。
动静分离之前的状态
负载均衡 LVS 与 Nginx 对比

文章插图
 
动静分离之后
负载均衡 LVS 与 Nginx 对比

文章插图
 
光看两张图可能有人不理解这样做的意义是什么,我们在进行数据请求时,以淘宝购物为例,商品详情页有很多东西是动态的,随着登录人员的不同而改变,例如用户ID,用户头像,但是有些内容是静态的,例如商品详情页,那么我们可以通过CDN(全局负载均衡与CDN内容分发)将静态资源部署在用户较近的服务器中,用户数据信息安全性要更高,可以放在某处集中,这样相对于将说有数据放在一起,能分担主服务器的压力,也能加速商品详情页等内容传输速度 。


推荐阅读