您的位置首页生活百科

Nginx 反向代理为什么可以提高网站性能?

Nginx 反向代理为什么可以提高网站性能?

的有关信息介绍如下:

Nginx 反向代理为什么可以提高网站性能?

问的随心所欲上下翻飞,让人都不知该从何说起……

Nginx反向代理从来不和什么网站性能挂钩,它只能浪费性能;只不过,很多应用场景下,这个浪费是值得的、良性的。

你想象的Nginx大概是这样:用户们--Nginx--同一台服务器上的apache--同一台服务器上的django网站--同一台服务器上的数据库……

然后你觉得,Nginx一定有什么魔法,可以神奇的提高这台服务器的TPS……

梦话。

这个场景里,Nginx是典型的脱裤子放屁。除了浪费CPU/内存性能毫无意义(当然,你可以用它搞个轻量级文件缓存/tls握手应用等等:但这更大程度上仍然是架构分离,不是性能优化)。

但,如果你的网站比较大,那么:

1、内存访问本身就是瓶颈

2、生成页面需要访问磁盘;而磁盘性能太过糟糕——哪怕你用12个15000转机械硬盘搞raid,它也撑不起天涯的访问量

3、很多请求还得访问数据库,而数据库本身又吃内存又吃磁盘……

那怎么办?

把这些业务拆开,丢不同服务器去。

于是,2000万用户先通过DNS均衡,分配到10个入口,于是每个入口只需要服务200万人;但这样仍然不可能正常服务,怎么办?

搞个Nginx反向代理,把200万人的访问请求分发到机房内部的100台服务器,于是每台服务器服务2万人。

Nginx本身轻量、性能表现极佳,因此它才适合干这个活;但只靠它也未必行,200万请求压力还是太大,单台服务器未必扛得住;因此往往还得先搞硬件均衡、缓解部分压力后再用Nginx分流。

同样的,每台服务器撑2万访问就非常繁忙了,你还想让它管文件存储……这显然不行。因此机房内还得有存储服务器,把磁盘以及文件缓存/同步交给它们;机房外嘛,还得在距离用户较近处(城域网或者小区入口)设置CDN,让用户直接自CDN读取图片、论坛帖子等内容不会再变的信息,不要跑机房占用昂贵的主干道网络带宽。

类似的,数据库也要自网站服务器剥离,放到专门的服务器集群上去;而且大体量网站还得做读写分离,进一步缓解海量访问和数据一执行维护之间的矛盾。

Nginx只不过是这一大堆技术手段较为靠前的一环罢了。你不知道这一坨,凭空想象Nginx自己多牛逼……那和“铁拳孙中山”没啥区别。