Erlang/Elixir 热部署

bluecoda · 2014年09月19日 · 最后由 est 回复于 2014年09月22日 · 5356 次阅读

之前用 go 做了个东西,发现无法热部署,感觉太不爽,因为服务要长时间运行 看了 erlang/elixir 可以代码热部署,有点跃跃欲试啊

哈哈,同好。。。

可以通过“负载均衡”的方式进行“伪热部署"

一直想知道,如果数据库有新的迁移那种,负载更新能做到正常切换吗?

Go 至少有 3 款热部署实现了。。。。就是 master 把 fd 给 hold 住,worker 用 exec() 重新加载新代码。。。。参考七牛云开源的那坨即可。

#3 楼 @badboy 也可以的。master 让请求处理的 worker 数降低为 0,也就是所有请求挂起超时中,这个时候赶紧进行数据库 DDL 操作,然后新代码 worker 启动处理挂起的请求。

#4 楼 @est 这个不叫热部署吧

#5 楼 @est 这感觉太麻烦了,没有 erlang 的这个 hot swap 猛啊,还要弄 master/worker

#6 楼 @bhuztez #7 楼 @bluecoda

那啥叫热部署?你能做到 VM 里把 class 给升级了,所有 instance 也跟着升级么。

PHP 也可以热部署啊

#8 楼 @est 为啥不能?Java 都可以,甚至 Twisted 都可以。

#11 楼 @bhuztez 你去看它们原理吧。就是断请求不断连接。

#12 楼 @est 你这个要求应用是 stateless 的啊

#13 楼 @bhuztez 纯无状态的后台只存在教材的练习题里。生产环境里状态到处飞啊,请求里,db 里,cache 里,redis 里,sidekiq 里。多的要吐。函数级别的原子部署是不存在的。

#14 楼 @est 我是说状态必须放到应用之外

#15 楼 @bhuztez 也有状态 migration 的问题。。。比如你把 session 放到单独一坨系统里,这个时候新代码来了,session 格式变了。。。。肿么办。。。。。。我觉得这个世界上没有真正完美的原子部署。就连 html form 里改个表单的 input name 都不行。浏览器端 100% 要挂。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号