【问题标题】:Release/Deployment/Maintenance process for a web serviceWeb 服务的发布/部署/维护过程
【发布时间】:2008-12-09 22:18:25
【问题描述】:
我正在研究 24x7x365 网络服务环境中的一些非脆性发布过程技术。将代码从开发环境发布到关键生产环境的一些您最喜欢的方法是什么?这不仅包括代码更改,还包括数据库架构更改。让我们假设一切都经过测试并在开发环境的生态系统中获得好评。
接下来您将采取哪些步骤将其简化为生产流程?将流量重定向到停机集群并运行一些自动化脚本?如果是这样,你的脚本是做什么的?如果不是脚本,你喜欢什么样的套路?
只寻求技术见解。请不要“给客户足够的警告”类型的回复。
谢谢!
【问题讨论】:
标签:
release
system-administration
【解决方案1】:
我认为有几个原则需要确保:
- 仅从源代码控制系统(专用分支或主线上的标记)发布。不可能直接从工作目录释放。
- 使推送到生产和推送到暂存过程完全自动化(包括架构更新)
- 手头有自动回滚脚本,如果出现任何问题,不要害怕使用它。
- 所有数据库架构更改均使用增量前滚/回滚功能工具(如 ActiveRecord 或 Liquibase)完成。很少需要进行完整的数据库恢复。
- (对于非常大的集群)进行滚动升级;使用两个负载均衡器,一个用于版本 N 版本,一个用于 N+1 版本。随着其他节点加入 N+1 组,持续测试。