是否有可能在Cedar堆栈上使用Unicorn在Heroku上执行Github零停机部署?
我不完全确定重启是如何在Heroku上运行的,以及我们对重启过程有什么控制,但是我喜欢零停机部署的可能性,直到现在,从我读过的,它是不可能的
这需要一些工作.
首先,我们需要向后兼容的迁移.我把它留给我们的团队来解决.
其次,我们希望在推送之后立即迁移数据库,但在重启之前(假设我们的迁移完全向后兼容,这不应该影响任何事情)
第三,我们想要指示Unicorn启动一个新的主进程并分叉一些工作者,然后交换PID并优雅地关闭旧进程/工作者
我已经搜索了文档,但是我找不到任何可以表明Heroku上可行的内容.有什么想法吗?
我无法解决迁移问题,但关于重新启动进程和避免等待时间的部分:
heroku有一个名为preboot的beta功能.在部署之后,它首先启动您的新dynos并等待一段时间然后切换流量并杀死旧流量:
https://devcenter.heroku.com/articles/labs-preboot/
我还写了一篇博文,其中使用此功能对我的应用程序的性能改进进行了一些测量:
http://ylan.segal-family.com/blog/2012/08/27/deploy-to-heroku-with-near-zero-downtime/
您可能对其称为preboot的功能感兴趣.
取自他们的文件:
此功能通过在杀死现有Web dynos之前使用新代码启动Web dynos来提供无缝部署.
某些应用程序需要很长时间才能启动,这可能会导致在部署期间提供HTTP请求时出现无法接受的延迟.
有几点需要注意:
您必须至少有两个Web dynos才能使用此功能.如果您将Web进程类型缩放为1或0,则将禁用预引导.
无论是谁进行部署,都必须等待几分钟,然后新代码开始提供用户请求; 这种情况发生的时间晚于没有预启动的情况(但同时,旧的dynos仍会迅速提供用户请求).
将有一段短暂的时间(一分钟或两分钟),其中heroku ps显示新代码的状态,但旧代码仍在提供用户请求.
有关它的更多信息,请参阅他们的文档.