大部分人在gunicorn前面部署一层nginx的时候也的确没有想过为什么,他们只是觉得这样显得他们比较专业,而且幻想着加了一层nginx反向代理之后性能会有提升,恕我直言,请你们带上脑子,一个单纯的串联结构怎么可能提升性能?请好好想一想这个问题好吗?
在前面增加一层nginx的情况主要是:
负载均衡。tornado之类的框架只支持单核,所以多进程部署需要反向负载均衡。gunicorn本身就是多进程其实不需要
静态文件支持,经过配置之后,nginx可以直接处理静态文件请求而不用经过Python服务器,Python服务器也可以返回特殊的http头将请求rewrite到静态文件。我说的是经过配置之后,你配置了吗?
抗并发压力。虽然不能提升qps,但是多一层前端,的确可以吸收一些瞬时的并发请求,让nginx先保持住连接,然后后端慢慢消化,但说实话这种情况下服务体验已经很糟糕了。但的确比服务挂掉强一些。
rewrite之类的其他功能。配置了才有,配了吗?
怕gunicorn的http解析有bug。这个姑且算有点道理,不过加一层负载均衡不一定能解决问题。
主要来说加一层可以给你一些你很可能不会去配置的额外的功能,这样多少会给运维人员一些安慰,反正也不会有什么性能损耗,也就是说不太会有坏处,所以大家都假装自己很懂地加了一层反向负载均衡。其实不见得就没有坏处,比如说可能会获取不到对端IP地址(变成127.0.0.1了),或者可能会被X-Forwarded-For欺骗。
不过另一个角度来说,如果你的业务早晚会上规模,早晚有一天会用上反向负载均衡,提前配一个也对,不过应该用两台服务器,配在不同服务器上。内部服务的情况下如果压力不太大,很多其实都是gunicorn裸跑的,Python不是PHP,不用非得加个前端。
版权申明:本站文章均来自网络,如有侵权,请联系01056159998 邮箱:itboby@foxmail.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有