1
tokki 2014-12-26 12:01:48 +08:00 1
|
3
est 2014-12-26 12:47:00 +08:00 1
@tokki fab这个只是工具吧。如何做到无缝重启,还得自己搞原理。
https://groups.google.com/forum/m/#!topic/python-tornado/jveZAfNNAPo |
4
tokki 2014-12-26 12:57:52 +08:00 1
没看清楚你的问题 我以为你是要部署多台
我个人目前还是会中断服务一瞬间 等别人解答这个震荡的问题 |
5
felixzhu 2014-12-26 14:20:53 +08:00 1
你要的是一个平滑重启。
python进程一般来说是用supervisord来守护,重启的时候确实会停止一小段时间,这是没办法的 如果实在想要无缝切换,可以起多个进程,比方说两个进程监听8000和9000端口,首先nginx的upstream指向8000端口,部署的时候新代码部署到9000端口的进程上,然后部署脚本修改nginx的配置upstream指向9000端口。这样不知道能不能满足lz的需求 |
6
tokki 2014-12-26 14:30:34 +08:00 1
多进程我是用 http://gunicorn.org/ 来启动的 你也可以试试
|
7
roricon 2014-12-26 15:23:05 +08:00 1
这个真得根据具体的业务来分析。
tornado这种异步得框架,基本上瞬间就把Response返回给用户了。所以先停止转发Request到准备重启的实例上,等待所有处理完成之后再kill。 当然还需要考虑用户Session的保持等等。 |
8
humiaozuzu 2014-12-26 15:36:48 +08:00 1
@felixzhu 说的挺对的
如果在线用户没过w,直接 supervisorctl restart 就行了,我们目前就是这样,在线用户没有感觉的 如果用户很多,可以参考搜狐的方案,也就是 nginx -s reload 指向新的 upstream,然后 stop 掉旧的 instence,传送门 https://github.com/SohuTech/essay |
9
felixzhu 2014-12-26 18:04:08 +08:00
@humiaozuzu 哈哈,我就是搜狐的
|
10
humiaozuzu 2014-12-26 18:06:21 +08:00
@felixzhu 2333 你是负责后端吗?
|
11
felixzhu 2014-12-26 18:13:18 +08:00
@humiaozuzu 嗯
|
12
humiaozuzu 2014-12-26 19:33:56 +08:00
@felixzhu 方便加一下IM吗,平时可以交流下,QQ Hangout 都行
|
13
felixzhu 2014-12-26 19:40:27 +08:00
@humiaozuzu 461731776
|
14
humiaozuzu 2014-12-26 19:44:42 +08:00
@felixzhu 要求回答问题。。。加一下我的把 511967867
|
15
est 2014-12-26 20:24:09 +08:00
@felixzhu 没那么麻烦。。。nginx指向多个upstream一个作为failback。重启的时候新代码跑failback,kill掉老的,然后再启动一个新的到upstream,搞定。
|
16
sujin190 2014-12-26 20:36:32 +08:00 1
https://gist.github.com/snower/d0edf8731b8acbce332e
如歌优雅的重启tornado服务,supervisor有个进程组模式,搭配这个可以实现一键重启 |
17
likang 2014-12-26 21:17:30 +08:00 1
思路:
1、应用程序停止接收新的请求 2、给应用程序一段时间(几秒左右)处理已经 hold 住的请求 具体可参考这位仁兄的帖子(貌似要翻墙) http://www.keakon.net/2012/12/17/%E7%94%9F%E4%BA%A7%E7%8E%AF%E5%A2%83%E4%B8%8B%E5%A6%82%E4%BD%95%E4%BC%98%E9%9B%85%E5%9C%B0%E9%87%8D%E5%90%AFTornado |
18
1989922yan 2014-12-30 14:47:29 +08:00
|