@
wd 这个问题的描述我觉得还是说清了... 看来我的表达能力还是不尽如人意.
简单再说一下, 希望能表述更明白.
我们的 app 启动是有 timeout 的通常是 2-5min.超出了的话, 会有 alert, 这些管理不由开发团队负责, 甚至是另一个公司来监控, 每次这种都是要付费. 因为保险安全缘故,我们不能把 timeout 设置成比如 2 小时, 3 小时, 这样有时候会隐藏真正的问题. 所以数据库变更语句执行的时间如果较长, 我们会有问题.这是问题 1.
问题 2, 如果有 table 结构 rename, delete, 按你分享的, database changes 跟 deployment 分离对于我们就不一定适合. 因为先行手工执行了 db changes, 这个时候, 还在运行的 apps 就会出问题, rolling deployment 就被打破了. 就有了 outage..
对于问题 2, 不一定非要在 app 启动时做 database change, 任何时候都可以. 但是要求当前运行在同一 database 的所有 apps 到新的版本 deployment 结束并切换之前继续正常运行, 因为新版本不论是 deployment 还是 starting up 一旦有问题, 不能影响当前产品提供服务. 大概这个问题的困难也是在这里.