我们有4个应用服务器和一个运行我们的
Python应用程序的负载平衡.每个应用程序服务器都有32个超线程内核,因此Tornado部署指南建议我们在每个上运行64个线程.我们还使用supervisord来管理所有线程.这很好用,我们遇到的问题是当我们必须部署更新时,部署新应用程序的当前进程是一个shell脚本,它执行以下操作:
>签出我们的GIT仓库的/ deploy分支
>(与CDN有关的一些不相关的东西)
> SCP将文件发送到4台服务器中的每台服务器
>重启supervisord(所以应用程序加载新代码)
这非常低效,总共需要大约20秒.重新启动单个龙卷风线程需要大约一秒钟,但问题是如果我们进行任何重大更改,负载均衡器将在旧应用程序和新应用程序之间切换,具体取决于它所选择的线程的重启阶段(总共有256个负载均衡器可以连接的可能实例)因此我们必须将站点关闭30秒,有时甚至更长,以获得正确版本的应用程序.
有没有更好的方法呢?我听说过Fabric和其他一些可以使用的工具但是它们比我们现在这样做的方式更有效吗?理想情况下,我们需要在5秒内将所有线程重新启动到新版本,即使它涉及暂时停止网站.
信息(如果有用的话);
所有服务器都是RHEL 5.5,负载均衡器是Barracuda 640.