所需反馈:生产Lisp webapps的无中断部署策略

m7d*_*m7d 5 lisp deployment hunchentoot

我有兴趣了解人们如何在生产中进行Lisp webapp部署和更新(尤其是更新).

在我自己的Ruby中,使用Capistrano进行部署.它提供了一些很好的间接性和远程执行命令的能力,最重要的是(在我看来)回滚到工作代码库的能力.

我知道长期运行的Lisp进程通过SSH隧道连接到Swank并进行了修改的想法是一个受欢迎的想法,但我没有喝醉Koolaid,主要是因为更新有状态的问题过程(如果出现问题,似乎会​​遇到麻烦 - 比如内存中的当前状态与很快将在内存中的新对象定义之间无法预见的阻抗不匹配).

鉴于您可以使用hunchentoot(或在此处插入您喜欢的Lisp应用服务器)创建几乎无状态(或完全)的webapps,似乎使用类似Capistrano的东西也可以用于Lisp代码的无中断更新,如果Lisp进程(es )隐藏nginx在其上游通道后面,如果你可以正确编排取下hunchentoot进程并在更新代码后重新启动它们,例如,将它们全部重新启动,同时让至少一个hunchentoot进程在集群中运行任何给定的时刻(可以使用CGI或mod_lisp,但我对这种方法并不特别感兴趣 - 但如果你真的喜欢这种方法,请至少说些什么,我想学习).例如,使用Passenger(将桔子与苹果进行比较,因为它根据需要旋转流程),

嗯,这有点絮絮叨叨,实际上我即将尝试所有这些,但我想从其他人那里得到一些关于这些想法的反馈.也许你有一个更好的主意.

谢谢

Win*_*eld 1

您可以通过为 HAProxy 等智能前端/负载均衡器编写 capistrano 脚本来实现无中断(零停机)部署,该脚本使应用程序服务器停止旋转,使用新部署的代码重新启动它们,然后将它们放回混合状态。

通过在应用程序服务器不在生产中实时轮换时逐步滚动应用程序服务器,您可以实现平稳部署。

这并不涉及具有特定状态的持久应用程序服务器循环,这看起来很可怕,正是您提到的原因。REPL 对于调试和调整来说很酷,但是您在磁盘上运行代码的直觉似乎是有根据的。