0

我正在运行一个使用 eventmachine 的守护进程。即使我重新部署我的代码,它也必须有 100% 的正常运行时间。所以我正在寻找零停机部署。

有没有办法让 EventMachine 重新加载代码而不会丢失连接?我想ConnectionHandler在一个单独的文件中定义我的,然后重新加载它SIGHUP

Signal.trap("HUP") do
  load "#{path}/connection_handler.rb"
end

但这有缺点:

  • 它不会重新加载 EventMachine 本身(在 gem 更新的情况下需要)
  • 我不知道这是否有效。

有什么建议吗?

4

1 回答 1

5

使用负载平衡器。在每次部署时:

  1. 从负载平衡器中取出一半机器。

  2. 等待他们完成处理他们当前的请求。

  3. 在这些机器上关闭 EM 并部署新代码。

  4. 将它们放回 LB 池中并与另一半重复。

于 2013-08-15T14:38:23.770 回答