我正在运行一个使用eventmachine的守护进程。它必须具有100%的正常运行时间,即使我重新部署代码也是如此。所以我正在寻找零停机时间部署。
有没有办法让EventMachine重新加载代码而不会丢失连接?我考虑在单独的文件中定义ConnectionHandler
,然后在SIGHUP
上重新加载:
Signal.trap("HUP") do
load "#{path}/connection_handler.rb"
end
但这有缺点:
有什么建议吗?
答案 0 :(得分:5)
使用负载均衡器。在每次部署时:
从负载均衡器中取出一半机器。
等待他们完成处理他们当前的请求。
在这些机器上取下E.M.并部署新代码。
将它们放回L.B.游泳池和另一半重复。