之前用 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 也可以热部署啊
#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% 要挂。