它提供了一些很好的间接性和远程执行命令的能力,最重要的是(在我看来)回滚到工作代码库的能力。
我知道,长时间运行的Lisp进程通过SSH隧道通过Swank连接并在适当的位置进行修改是一个流行的想法,但我并没有沉迷于这种想法,主要是因为更新有状态进程的问题(这似乎就像是在出现问题时自找麻烦-比如内存中的当前状态和即将出现在内存中的新对象定义之间的不可预见的阻抗不匹配)。
考虑到你可以使用hunchentoot创建几乎无状态(或者完全)的webapp(或者在这里插入你最喜欢的Lisp应用服务器),如果Lisp进程隐藏在其上游通道中的nginx后面,并且如果你能够正确地编排,那么使用Capistrano之类的东西也可以用于无中断地更新Lisp代码,如果你能够正确地编排,在更新代码后关闭hunchentoot进程并旋转它们,例如,在任何给定的时刻让至少一个hunchentoot进程在集群中运行(可以使用CGI或mod_lisp,但我对这种方法不是特别感兴趣--尽管如果你真的喜欢这种方法,请至少说点什么,我想学习)。例如,使用Passenger (这是比较橙子和苹果,因为它按需旋转进程),您触摸tmp/restart.txt,应用服务器这次使用新更新的代码重新启动-从用户的角度来看,没有中断。
好吧,这有点漫无边际,实际上我即将尝试所有这些,但我想从其他人那里获得一些关于这些想法的反馈。也许你有更好的主意。
谢谢
发布于 2011-03-01 04:42:33
您可以通过为智能前端/负载平衡器(如 HAProxy)编写 capistrano 脚本来完成无中断(零停机)部署,该脚本将应用服务器拉出轮换状态,使用新部署的代码重新启动它们,然后将它们重新组合起来。 通过在您的应用服务器在生产中停止实时轮换时增量滚动您的应用服务器,您可以实现顺利部署。 这并没有涉及具有特定状态的持久应用程序服务器循环,由于您提到的原因,这似乎很可怕。 REPL 非常适合调试和调整,但您在磁盘上运行代码的直觉似乎是有根据的。
https://stackoverflow.com/questions/3723411
复制相似问题