构建基于GitOps的 PostgreSQL数据库变更工作流 王长煜|Bytebase商业化负责人 1GitOps简介 目2数据库GitOps 录3新一代数据库GitOps方案 4落地GitOps的实践经验 5Bytebase变更管理系统 1GitOps简介 什么是GitOps GitOps是一种基于Git仓库的持续交付工作流,将基础设施和应用程序的配置或状态信息存储在Git仓库中,并使用自动化工具对其进行变更管理。 开发者代码仓库CI/CD工作流自动化工具基础设施 0 一0致性 自动化 可扩展可审计 使用Git来存储定义和配置信息,轻松实现版本化管理,确保目标基础设施的配置一致性。 GitOps的CI/CD流程可以自动化应用程序的部署和回滚,减少人为错误,提升部署效率。 GitOps可以轻松地在多个环境和平台上部署。 GitOps可以提供实时状态和配置信息,以及所有变更的记录。 2数据库GitOps 数据库的变更是否需要GitOps? 测试到生产脚本不一致手工批量变更上百个库 DEVTESTPROD 脚本散落在多人电脑中 Schema版本管理混乱 数据库GitOps的实现难点 ❖语法正确性:验证脚本语句是否符合模板引擎的语法 ❖业务正确性:是否满足应用发布需求 审核❖架构正确性:是否符合性能与扩展性等要求 ❖大型变更:对于数据量庞大的表发起变更 ❖批量发布:一次对多个同构库发起变更 ❖流水发布:将一个变更从测试环境逐阶段发布到生产环境 执行❖灰度发布:挑选部分库先行发布,再逐步扩展到所有库 ❖临时性变更:不涉及应用变更的数据库变更 ❖脚本修正:基于错误原因快速调整脚本语句 ❖快速撤销:执行反向语句撤销本次变更 排障❖全库回滚:将数据库回退到变更前的某个时间点 现有的一些数据库GiOps方案 3新一代数据库GitOps方案 为PostgreSQL打造的开源数据库GitOps工具 原生Git集成代码仓库内审核独立发布工作流联动应用发布 自动化审核语法分析业务规范架构规范 自定义规范集成 变更管理 权限控制多种发布功能 版本管理变更回滚 具备强大的数据库变更管理能力,与代码仓库集成,提供独立的发布流,同时能与应用发布联动 代码仓库内的PostgreSQL数据库审核能力 ❖符合开发团队工作习惯与流程,无须在多个工具间切换 ❖CI阶段预审核大幅降低上线风险,增加容错时间 开源的PostgreSQL审核能力 SQL自动审核助力研发提升SQL质量 ❖可配置性 ➢内建37条可配置规范 ➢模板化设计,支持为不同环境适配不同约束力的规范 ❖Git集成 ➢一键集成GitHub/GitLab ➢上架GitHubMarketplace ➢UI配置在Git中实时生效 ❖可扩展性 ➢支持自定义规范集成,构建符合自身业务特点的规则集 ➢API支持,便于融入企业已有变更流程 独立与应用发布的数据库CD工作流 SQL自动审核助力研发提升SQL质量 ❖自动触发数据库变更流程 ➢监听指定仓库、指定分支、指定目录 ➢基于Webhook ❖模式一:基于文件名模板 ➢[[ENV_NAME]]/[[DB_NAME]][[VERSION]]_ _[[TYPE]][[DESCRIPTION]].sql ➢易于使用,应对普通的变更请求 ❖模式二:基于YAML格式 ➢更多的配置项应对复杂的变更请求 ➢调用变更管理系统的高级能力 常见变更场景的GitOps实现 bytebase/prod/employee##202303040001##ddl##create_table_salary.sql 单库发布 01对单库进行标准的SQL脚本发布 databases: -name:supermarket_east -name:supermarket_weststatement:| INSERTINTOcompany(id,name,address)VALUES(1,'Bytebase','1DevOpsstreet'); 同构批量发布 02对多个数据库发起相同的变更,多见于分库分表、 SaaS多租户等场景 bytebase/employee##202303040001##ddl##create_table_salary.sql 单次变更流水发布 cpbytebase/test/ employee##202303020001##ddl##create_table.sqlemployee##202303020002##ddl##create_index.sqlemployee##202303030001##ddl##add_column.sql tobytebase/prod/ 03一次变更贯穿测试、预上线、生产等多个环境,多见于临时性变更 多次变更流水发布 04累积了多个变更后一次性发布到生产环境,多见 于应用大版本更新 变更完成自动回写Schema并联动应用发布 记录所有变更历史 向代码仓库回写Schema webhook(可选)GitPipeline(可选) 变更失败的应对 变更失败日志挖掘变更撤销 提供产品化的变更失败处理能力 回滚语句原始语句 ❖一键挖掘日志生成撤销语句 ❖预览工单,按需选择所需回滚语句 ❖可在变更前后随时激活 场景示例:一个完整的DatabaseCI/CD流程 4落地GitOps的实践经验 代码仓库的目录规划 基于项目/应用/产品线组织基于发版批次组织 审核规范的实施路径 流程前置提供连贯的开发体验 知其然而知其所以然 以最基础的审核规范开始,逐步结合业务特点构建自定义规范集 弹性审核机制平衡效率与稳定 修改脚本 重视与现有研发流程的集成与打通 CI流程 提交脚本 代码仓库预审核 存入代码仓库 修复问题 研发管理系统 失败回滚 CD流程 提交发版申请 关联变更脚本 触发执行 执行前审核变更发布 应用等待发布 应用发布准备 成功通知 应用发布 5Bytebase变更管理系统 Bytebase变更管理系统能力矩阵 源自Google与蚂蚁集团的数据库DevOps最佳实践 Bytebase 数据库变更管理系统 供应链管理 核心交易 工单系统自定义审批流自动审核自定义规范 批量发布流水发布灰度发布变更历史记录 客户管理全域营销 结构一致性管控 库表结构同步结构差异检测变更回滚 成 DBA团队 GitOps集成API集成Webhook集 Terraform集成 人力资源财务 统一查询访问客户端 Bytebase是DBA与研发团队协同的平台 访问控制查询约束查询脱敏查询审计 数据导出脚本共享只读模式执行计划分析 示例:Bytebase统一查询客户端 全球唯一入选CNCF(云原生计算基金会)推荐目录 官网-www.bytebase.com/zh GitHub-https://github.com/bytebase/bytebase Twitter-@Bytebase LinkedIn-https://www.linkedin.com/in/bytebase/