Erlang/Elixir 热部署

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

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

共收到 16 条回复

哈哈,同好。。。

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

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

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也可以热部署啊

#9楼 @ddyy 高级黑。。。

#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%要挂。

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