其他
如何安全地变更数据库 Schema
问题 1 - 缺少变更的可见度
问题 2 - 保证变更的唯一性和排他性
像对待代码变更一样对待数据库变更 把代码变更和数据库变更分离
像对待代码变更一样对待数据库变更
在 GitLab / GitHub 这样的代码平台提交变更请求,GitLab 里叫 MR (Merge Request),GitHub 上叫 PR (Pull Request)。 如果有配的话,MR / PR 会先经过一系列的自动检察,比如最简单的比如代码是否可以编译,是否符合编码规范,以及一系列的自动化测试。 会有一个或多个评审人对代码进行审核 (Code Review)。 审核通过后,代码就提交到仓库了,提交历史也被记录了一下。 经过手动或者自动的流程,代码会被打包成一个新版本,专业的术语叫做制品(Artifact)。 代码部署系统会把新版本按照预先配置的流程,逐渐部署出去。通常先部署到测试环境,在测试环境里,会运行一些集成测试,也可能会有 QA 团队进行手工测试。在测试环境通过后,就会部署到预发环境,在预发环境验证后,最终会部署到生产环境,当然在生产环境,往往也会一点点的逐步更新,也就是所谓的灰度发布。
可视化的变更审核界面
自动 SQL 审核规则
数据库代码化 Database as Code
批量变更(企业版功能)
自定义审批流(企业版功能)
把代码变更和数据库变更分离
当变更出问题后,可控力很小。应用程序将无法启动,这需要人工干预。 一些变更可能需要很长时间才能完成,这意味着在部署新版本发布时需要停机。 不适合于有多个服务器实例访问同一数据库的应用。因为任何一个服务器实例都可以执行变更,而且需要额外的锁机制来协调变更(就是 reddit 提问者提到的那个问题) 不适合有专门的 DBA 或平台工程团队来中心化管理数据库的团队协作模式。集中的 DBA 或平台工程师不知道什么时候发生了变更,他们只会在收到监控系统告警后,然后花费大量的精力去诊断后,才发现是由一个应用团队鲁莽的变更引起的。
升舱的免费版,让更多团队可以进行安全高效的数据库变更
本来只存在于付费版的 RBAC 功能移到了免费版。 100+ 条的自动 SQL 审核策略全部开放给了免费版。 不再有 10 个用户,10 个实例的限制,而是无限用户,20 个实例。