我们知道nginx在负载均衡和反向代理方面有着很好的用途,最近发现公司的架构是Nginx+Nginx+tomcat架构, 仔细做了下分析,特做下记录:
平时我们对如下的架构可能比较熟悉
image.png
Nginx做负载均衡,把流量按照一定的均衡规则,路由转发到应用服务器,即tomcat上
但nginx也是一款很出色的反向代理工具,因此我们可以缓存一些数据,从而减少应用服务器的压力,但这样就会出现一个问题
如果nginx缓存数据过多,或有热点数据,即使nginx性能很高,也终究会成为瓶颈; 很容易想到的一种办法是加机器,一种很常见的做法,是在每台应用机器上都部署nginx,这样的话就可以和应用服务器一样进行扩容, 这样就不用担心nginx缓存数据瓶颈了
但这样的话同时也引出另一个问题,就是缓存命中率可能下降,比如负载均衡层通过轮询的方式把流量转发到应用层的nginx上,这样相同的请求,每次是随机分配到各应用层nginx上的,导致nginx缓存命中率低
考虑到上述原因,可以把负载均衡层路由规则好好设计一把,保证相同的请求每次都路由到同一台应用层nginx上,这样就可以提高缓存命中率了, 此时Nginx又能很好的派上用场了,基于Nginx+Lua可以很灵活的制定流量路由规则。
因此,才有了Nginx+Nginx+Tomcat
image.png
-
分发层Nginx:
负责流量分发的逻辑和策略,这个里面它可以根据你自己定义的一些规则, Nginx Plus功能更强大 -
应用层Nginx:
负责数据缓存,可以是本地缓存 share dict,也可以直接访问redis
网友评论