当前位置: 首页 > 后端技术 > Java

LVSvsNginx负载均衡对比,还在一头雾水?

时间:2023-04-02 01:35:14 Java

作者:等不及口琴\链接:www.cnblogs.com/Courage129/p/14383897.html今天总结一下LVS和Nginx在负载均衡方面的区别。好几篇博文一开始都说LVS是单向的,Nginx是双向的,我个人认为这是不准确的,在LVS的三种模式中,虽然DR模式和TUN模式只是通过Director请求消息,但是在NAT模式下,RealServer回复的报文也会经过DirectorServerAddressrewriting:首先要明确的是,LVS是一个四层负载均衡器。虽然是四层负载均衡器,但是没有TCP握手和分手。它只是偷看IP和其他信息,而Nginx是一个七层负载均衡器。device,所以效率必然比四层LVS低很多,但是可操作性却比LVS高,后面的讨论都是基于这个区别。为什么四卷比七层更有效率?第四层是TCP层,采用IP+端口四元组。只需修改IP地址,转发给后台服务器即可。TCP三向握手直接连接到后端。只是你在后端机器上看到的是用代理机器的IP建立的,没有在LVS中握手。7层代理必须先与代理机握手3次,才能获取到7层(HTT层)的具体内容,然后进行转发。这意味着代理机器必须与客户端和后端机器建立连接。显然性能不好,但优点在于七层,人工操作性高,可以写更多的转发规则。Nginx特性Nginx是专门为性能优化而开发的。性能是其最重要的要求。它非常注重效率。据悉,Nginx最多可以支持5万个并发连接。正向代理和反向代理正向代理:局域网内的计算机用户直接访问服务器是不可行的。服务器可能无法承载,只能通过代理服务器访问。这种代理服务称为正向代理。Proxy,特点是客户端知道自己访问的是代理服务器。反向代理:客户端无法感知代理,因为客户端不需要配置网络访问,只要向反向代理服务器发送请求,反向代理服务器会选择目标服务器获取数据,并且然后返回给客户端。此时反向代理服务器和目标服务器对外是同一台服务器,暴露的是代理服务器地址,隐藏了真实的服务器IP地址。负载均衡客户端向服务器发送多个请求,服务器处理请求,其中一些请求可能需要与数据库进行交互。服务器完成处理后,将结果返回给客户端。一般的请求和响应流程如下图所示:但是随着信息量的增加,访问量和数据量的增加,单一的Server和Database成为系统的瓶颈。这种架构无法满足不断增长的需求。这时候,单机性能,还是增加服务器数量。关于性能提升,这里不赘述。如何增加服务器的数量,建立集群,把请求分发到各个服务器,把原来的请求从单台服务器变成请求分发到多台服务器,也就是我们说的负载均衡。图解负载均衡:关于如何将服务器拆分成集群,这里主要讲负载均衡,也就是图中的Proxy,可以是LVS也可以是Nginx。假设有15个请求发给代理服务器,那么代理服务器会根据服务器的数量处理5个请求,如果是均匀分布的话,这个过程就叫做负载均衡。动静分离为了加快网站的分析速度,可以将动态页面和静态页面交给不同的服务器进行分析,既加快了分析速度,又减轻了单台服务器的压力。动静分离前的状态动静分离后,有些人看两张图可能不明白这个的意思。我们在进行数据请求时,以淘宝购物为例。产品详情页面上有很多东西是动态的。与登录人员不同,比如用户ID,用户头像,但是有些内容是静态的,比如产品详情页,那么我们可以通过CDN(全局负载均衡和CDN内容分发)将静态资源部署在离用户更近的服务器中,用户数据信息的安全性更高,可以集中放置,这样比起把所有数据放在一起,可以分担主服务器的压力,也可以加快内容的传输速度比如商品详情页。Nginx的优点是可操作性强。Nginx是一个应用层程序,所以用户可操作的空间要大很多。可作为网页静态服务器,支持Rewrite重写规则;它支持GZIP压缩以节省带宽;它可以被缓存;相比之下,LVS并没有针对http应用本身、静态分离、域名、目录结构等这样的功能,所以nginx的使用场合远远超过仅基于此的LVS;但是nginx好用的这些功能使得它比LVS更加可调,所以你经常要摸它,而且人为出问题的概率是网络依赖小nginx对网络的依赖小。理论上只要能ping通,网页访问正常,就可以连接Nginx,而且nginx还可以区分内外网。如果是同时具有内外网的节点,相当于单机有备份线路;LVS对网络环境的依赖性比较强。目前服务器在同一网段并且LVS采用直接分流的方式,效果是可以保证的。另外需要注意的是,LVS需要至少向hostingprovider申请一个ip,用于visualip安装。nginx的安装和配置都比较简单,测试起来也很方便,因为基本上可以打印出错误日志。LVS的安装、配置和测试会花费很长时间,因为上面说了LVS对网络的依赖性比较大,很多时候不能配置成功是因为网络问题而不是配置问题。有问题就得相应解决会比较麻烦。Nginx也能承受高负载且稳定,但负载和稳定性较差。LVS有几个层级:nginx处理所有流量,因此受机器IO和配置限制;自身的bug还是不可避免的;nginx没有现成的双机热备方案,单机运行风险还是比较大的。很难说单机都支持健康检查和请求重发。nginx可以检测服务器内部的故障(健康检查),比如根据服务器处理网页返回的状态码、超时等,将返回错误的请求重新提交给另一个节点。目前LVS中的ldirectd也可以支持对服务器内部情况的监控,但是LVS的原理使得无法重发请求。比如用户正在上传文件,在上传过程中处理上传的节点出现故障,nginx会将上传切换到另一台服务器重新处理,而LVS会直接切断LVS的优势。工作方法的逻辑很简单,工作在网络的第4层。只是用于请求分发,没有流量,所以基本不用考虑太多效率问题。LVS一般很少出现故障,即使出现故障,也通常是其他地方(如内存、CPU等)出现问题导致的LVS有问题配置低这通常是一个很大的劣势,也是一个很大的优势,因为没有许多可配置选项,因此除了增加或减少服务器外,您无需经常触摸它,这大大减少了人为错误的机会。工作稳定是因为它有很强的抗负载能力,稳定性高是理所当然的事。另外各种LVS都有。完善的双机热备份方案,无需担心均衡器本身出现问题。如果某个节点出现故障,LVS会自动识别,所以整个系统非常稳定,没有流量。LVS只是分发请求,流量不会从它自己出去,所以可以用它来做一些线路分流。没有流量,平衡器的IO性能不会受到大流量的影响。LVS基本可以支持所有的应用,因为LVS工作在4层,所以几乎可以对所有的应用进行负载均衡,包括http、数据库、聊天室等参考:https://www.jianshu.com/p/3ed...近期热点文章推荐:1.1000+Java面试题及答案(2022最新版)2.厉害了!Java协程来了。..3.SpringBoot2.x教程,太全面了!4.不要用爆破爆满画面,试试装饰者模式,这才是优雅的方式!!5.《Java开发手册(嵩山版)》最新发布,赶快下载吧!感觉不错,别忘了点赞+转发!