能够提高网站性能这点来说,当然是由于Nginx反向代理与负载均衡的超强优势啦。
与Apache Tomcat比起来,Nginx可以承受的qps要大得多,这里除了底层原理的差异,与Nginx不负责处理业务逻辑,只负责接受转发请求的特点有分不开的关系。
反向代理
反向代理可以用于实现分布式,即对外虽然是一个完整的服务,但是其实这个服务对内是由部署在多台Tomcat的子服务共同组成的。
举个例子,一个购物网站,分为查询商品,下单,结算三个模块(极简举例),如果这三个子服务都写在同一个Tomcat上,那么所有的请求就都会发给这一台Tomcat。
这样的部署有一个隐患:假设双十一之前,这个网站的压测没有做好,导致双十一当天0点的时候,结算的人太多,qps超过Tomcat可承受的上限,服务崩溃了,那么这时候,不仅是结算的人无法打开网页,连那些想查询商品,把商品放入购物车的用户也会发现打不开网页了。即此时这个网站的服务由于单个子服务的原因,全线崩溃了。
如果使用反向代理功能,就能从两个方面来缓解这个隐患:
1 Nginx会将查询,下单与结算的请求分别发送给三个服务器,那么对于单独的服务器来说,瞬时间的请求量就会少很多,减少了挂掉的风险
2 就算挂掉了,由于Tomcat是分开的,挂掉其中一个,另外两个依然可以运行,不影响用户其他操作。
因此,我们说,反向代理也是一种提升网站性能的方式。
只不过,这里的网站指的其实是用户侧感知到的整体的服务,而不是具体的Tomcat server。