中国开发网: 论坛: 超级垃圾站: 贴子 740961
leejd
如何在django+nginx fcgi方式下不间断服务地部署新代码
如何在django+nginx fcgi方式下不间断服务地部署新代码
post info
By Damien
Categories: 技术分享
Tags: django, fastcgi, nginx, python, server
“极品座驾“上线以来,用户访问量一直运行在高位,上周末创下了单日pv 139万的记录。在这样的情况下,保持服务不间断是最重要的事情。目前我们支撑这样访问量的架构,是使用Nginx作为web服务前端,用fcgi方式运行django的python进程,再和前端Nginx连接起来。fcgi模式下,python进程把字节码装入内存,来提供最佳的执行速度。但是这样带来的问题就是更新了python代码以后,服务器没法动态装入新代码,而是需要杀掉现有fcgi进程然后spawn新进程才能达到更新代码的目的。虽然重启django fcgi进程的速度很快,但是不可避免的会导致用户服务的中断,在访问量大的情况下更是很危险的方式。为了达到不中断服务的目的,我们采用了这样的方法:

更新python代码
在另一个端口spawn一组新的fcgi进程
更改Nginx配置,把proxy_pass转发端口指向新fcgi进程的端口
动态重载Nginx配置
过一段时间等到原fcgi端口不再有未完成的用户请求,再把原端口上的进程全部杀掉
由于Nginx可以在运行状态下不间断的重载配置改动,所以在重载配置以后所有的访问请求都被转发到新的fcgi端口了。而在用户操作频繁的时候,访问请求从原fcgi端口被转到新端口也只需要很短的时间(可以借助netstat命令来观察)。这样一来,就可以实现在不影响用户操作的情况下不间断的切换到新代码了。

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录