【问题标题】:Feedback desired: non-disruptive deployment strategies for production Lisp webapps需要的反馈:生产 Lisp webapps 的无中断部署策略
【发布时间】:2010-09-16 03:03:05
【问题描述】:

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

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

我知道长期运行的 Lisp 进程通过 SSH 隧道通过 Swank 连接并就地修改的想法是一个流行的想法,但我没有喝过 Koolaid,主要是因为问题更新一个有状态的进程(如果出现问题,这似乎是自找麻烦——比如内存中的当前状态和即将在内存中的新对象定义之间的不可预见的阻抗不匹配)。

鉴于您可以使用 hunchentoot 创建几乎无状态(或完全)的 web 应用程序(或在此处插入您最喜欢的 Lisp 应用程序服务器),似乎使用 Capistrano 之类的东西也可以用于 Lisp 代码的无中断更新进程隐藏在其上游通道中的 nginx 后面,并且如果您可以正确编排取消 hunchentoot 进程并在更新代码后将它们重新启动,例如,在保持至少一个 hunchentoot 进程运行的同时将它们一直恢复集群在任何给定时刻(可以使用 CGI 或 mod_lisp,但我对这种方法并不特别感兴趣 - 尽管如果你真的喜欢这种方法,请至少说一下,我想学习)。例如,使用Passenger(将橘子与苹果进行比较,因为它会按需启动进程),您触摸tmp/restart.txt,应用服务器这次使用最新更新的代码重新启动——从用户的角度来看没有中断。

嗯,这有点啰嗦,实际上我将尝试所有这些,但我想从其他人那里获得一些关于这些想法的反馈。也许你有更好的主意。

谢谢

【问题讨论】:

  • 这个问题可能对程序员更有效?
  • @blue:可能不会。它非常本地化,本身并不是一个真正的主观问题。

标签: deployment lisp hunchentoot


【解决方案1】:

您可以通过为智能前端/负载平衡器(如 HAProxy)编写 capistrano 脚本来完成无中断(零停机)部署,该脚本可将应用服务器拉出轮换状态,使用新部署的代码重新启动它们,然后将它们放回原处混合。

通过在您的应用服务器在生产中停止实时轮换时逐步滚动您的应用服务器,您可以实现顺利的部署。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    • 2023-01-24
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    相关资源
    最近更新 更多