当前位置: 首页 > 科技观察

负载均衡LVSvsNginx对比!还在傻傻的迷茫吗?

时间:2023-03-20 02:25:36 科技观察

LVS三种模式,虽然在DR模式和TUN模式下只有请求的报文经过Director,但是在NAT模式下,RealServer回复的报文也会被DirectorServer地址改写:首先要明确的是LVS是四层负载均衡器,虽然是四层,但是没有TCP握手和分手,只是偷窥IP等信息,而Nginx是七层负载均衡器,所以效率必然是比四层LVS低很多,但是可操作性比LVS高,后面的讨论都是基于这个区别。为什么第4层比第7层更高效?第4层是TCP层,使用IP+端口四元组。只需修改IP地址,转发给后台服务器即可。TCP三向握手直接连接到后端。只是你在后端机器上看到的是用代理机器的IP建立的,没有在LVS中握手。7层代理必须先与代理机握手3次,才能获取到7层(HTT层)的具体内容,然后进行转发。这意味着代理机器必须与客户端和后端机器建立连接。显然性能不好,但优点在于七层,人工操作性高,可以写更多的转发规则。Nginx特性Nginx是专门为性能优化而开发的。性能是其最重要的要求。它非常注重效率。据悉,Nginx最多可以支持5万个并发连接。另外,Nginx系列面试题和答案都整理好了。微信搜索Java技术栈,后台发送:面试,网上可以看。正向代理和反向代理正向代理:局域网内的计算机用户直接访问服务器是不可行的。服务器可能无法承载,只能通过代理服务器访问。这种代理服务称为正向代理。Proxy,特点是客户端知道自己访问的是代理服务器。反向代理:客户端无法感知代理,因为客户端不需要配置网络访问,只要向反向代理服务器发送请求,反向代理服务器会选择目标服务器获取数据,并且然后返回给客户端。此时反向代理服务器和目标服务器对外是同一台服务器,暴露的是代理服务器地址,隐藏了真实的服务器IP地址。如果你想成为一名架构师,建议你看看这张架构师地图,少走弯路。负载均衡客户端向服务器发送多个请求,服务器处理请求,其中一些请求可能需要与数据库进行交互。服务器完成处理后,将结果返回给客户端。最新的面试题已经整理完毕,大家可以在Java面试库小程序中在线刷题。一般的请求和响应流程如下图所示:但是随着信息量的增加,访问量和数据量的增加,单一的Server和Database成为系统的瓶颈。这种架构无法满足不断增长的需求。这时候,单机性能,还是增加服务器数量。关于性能提升,这里不赘述。如何增加服务器的数量,建立集群,把请求分发到各个服务器,把原来的请求从单台服务器变成请求分发到多台服务器,也就是我们说的负载均衡。图解负载均衡:关于如何将服务器拆分成集群,这里主要讲负载均衡,也就是图中的Proxy,可以是LVS也可以是Nginx。假设有15个请求发给代理服务器,那么代理服务器会根据服务器的数量处理5个请求,如果是均匀分布的话,这个过程就叫做负载均衡。动静分离为了加快网站的分析速度,可以将动态页面和静态页面交给不同的服务器进行分析,既加快了分析速度,又减轻了单台服务器的压力。点击关注公众号,Java干货及时送达。画面动静分离前的状态。动静分离之后,有些人可能不明白这句话的意思。我们在进行数据请求时,以淘宝购物为例。商品详情页很多东西是动态的,随着登录人员的不同而变化,比如用户ID,用户头像,但是有些内容是静态的,比如商品详情页,那么我们可以使用CDN(全局负载均衡和CDN内容分发)将静态资源部署在靠近用户的服务器中,用户数据信息安全性更高,可以集中放置,这样比起把所有数据放在一起,可以分担主服务器的压力和速度up商品详情页等内容的传输速度。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。最新的面试题已经整理完毕,大家可以在Java面试库小程序中在线刷题。LVS的优点是抗负载能力强。因为LVS的工作方式逻辑很简单,而且工作在网络的第四层,只是用于请求分发,没有流量,所以效率上基本不用考虑太多。LVS一般很少出现故障,即使出现故障,也通常是其他地方(如内存、CPU等)出现问题导致的LVS有问题配置低这通常是一个很大的劣势,也是一个很大的优势,因为没有许多可配置选项,因此除了增加或减少服务器外,您无需经常触摸它,这大大减少了人为错误的机会。工作稳定是因为它有很强的抗负载能力,稳定性高是理所当然的事。另外各种LVS都有。完善的双机热备份方案,无需担心均衡器本身出现问题。如果某个节点出现故障,LVS会自动识别,所以整个系统非常稳定,没有流量。LVS只是分发请求,流量不会从它自己出去,所以可以用它来做一些线路分流。没有流量,平衡器的IO性能不会受到大流量的影响。LVS基本可以支持所有的应用,因为LVS工作在4层,所以几乎可以对所有的应用进行负载均衡,包括http、数据库、聊天室等。