Skip to main content

如何保证多环境结构变更的一致性?

企业软件的版本发布通常需要一个比较严谨,同时又规范的流程 ,这个流程中包含了多个数据库环境,例如开发环境、测试环境、预发环境和生产环境等,各个环境的职责大家都清楚,这里不细说,而这样做的最终目的,是让前面环境中开发并测试完成的代码准确无误地应用到生产环境中,为了达成这一目标,则必须确保每个阶段的变更顺序、变更内容都能被很好地记录并能准确地在下一个阶段执行。

而 DBA 是版本发布中最关键的一个角色,因为过程中数据库出任何问题,第一个找的就是 DBA。

20221028-4f3f7252-1d00-49ba-b3ee-53f0918ff1fb

目前,大部分企业采取的方式,通常是 DBA 人肉记录所有开发人员提交的变更,然后按照记录在下一个环境中手动执行,这种做法需要 DBA 手动审核代码,并手动跟踪变更状态和审批流程,非常容易导致遗漏或错误的发生。

还有一些企业选用了基本的流程平台,能够在平台上完成代码提交和审批,但是由于没有集成数据库,只能在平台上完成审批,然后再手动进行变更发布,这个过程中需要人工介入的操作太多,还是会不可避免地出现错漏。

因此我们需要解决的问题可以总结为下面几个点:

  • 如何保证变更的完整性和顺序?
  • 如何串联多个环境,让变更丝滑地往下走?
  • 如何防范变更错误?
  • 如何简化发布流程?

解决问题的两个关键原则:自动化+固定框架

先来说说自动化固定框架原则是什么:

  • 自动化:自动化是提高效率和减少人为错误的关键。通过自动化,可以将整体的发版流程以任务的形式交给平台去推进,从而释放 DBA 的压力。
  • 固定框架:固定框架是一种结构化方法,将任务推进的规则融入平台,让平台能够为开发者提供明确的步骤和引导,确保流程得以完全根据规则来走。

做起来其实也非常简单,只需要一个 NineData 平台,一个账号即可。来看看 NineData 怎么遵循这两个原则解决这些问题的:

  • 如何串联多个环境,让变更丝滑地往下走:NineData 提供了默认的两个环境,开发 > 生产,这也是比较常用的配置 ,所有变更将依次从开发走到生产。当然,NineData 支持用户自定义环境,并支持自定义的执行顺序。

  • 如何保证变更的完整性和顺序:基于 NineData 的固定框架,在第二个及后面的环境中,只允许执行前几个环境中执行成功过的代码,同时记录每个变更的执行情况,确保所有变更按照预定顺序执行。

  • 如何防范变更错误:NineData 提供了 SQL 开发规范,内置数百条规则,支持用户自定义企业开发规范,系统会基于规范自动拦截不符合规范的 SQL 语句。

  • 如何简化发布流程:NineData 负责所有流程的进度追踪和执行,DBA 只需负责人工审核,极大程度上减少手动操作环节,降低人为错误的可能性。

容易上手和理解的东西,通常更容易被人接受,这是人的天性,也是 NineData 的设计理念。对于上述流程的实现,在 NineData 平台仅需简单的几个步骤即可。

步骤一:录入数据源

image-20240719152341194

将企业所有环境的数据源全部录入到 NineData,注意录入时需要正确选择该数据源对应的环境信息。

image-20240723152332319

如果这里没有企业中使用的环境,也可以自定义创建。

image-20240723154442414

步骤二:创建发版流程并绑定数据源

image-20240723151611318

在流程配置页面,可以添加删除节点,也可以为各个节点增加各种限制,例如是否允许回退到上一个节点、是否允许跳过当前节点、是否允许修改 SQL 等。

image-20240723151810244

单击目标节点 ,可以为该节点绑定数据源。

image-20240723152838824

当然,如果企业的发版流程中只有开发、生产这两个环境,也可以直接使用默认的流程,只需绑定数据源即可,省去了其他配置的过程。

步骤三:创建发版流程

image-20240723154713332

在任务创建页面,选择基准数据源,即发版流程中配置的首节点环境对应的数据源,后续针对其他所有环境的变更都将基于该数据源中执行的变更。本示例中为开发环境。

image-20240723154851608

变更 SQL 文本框中输入需要发布的变更语句。

image-20240723155242117

单击创建结构设计与发布后,即可开启流程。在每个环境内部,开发人员(变更协同人)可以提交多个变更任务,并且根据审批流程配置,每个任务都将经过系统的规范检查以及人员审批。

image-20240723160420962

等当前环境下的所有变更都执行完成后,即可单击进入下一节点

image-20240723160715257

在后面的每个节点中,将只能提交第一个节点,即基准数据源中已经执行成功的变更语句。根据管理员的配置,语句和执行顺序无法修改,以确保生产环境中发布的变更都和前面的测试结果一致。

image-20240723161044643

在执行结果中,可以看到变更已经顺利发布到生产环境,再次单击进入下一节点,流程结束。

image-20240723161447399

总结

在上述配置场景下,NineData 将只允许在第一个环境中(基准数据源)提交新的变更,而后面的所有环境都只接受第一个环境中执行成功的变更。这在很大程度上保证变更的安全性,可以确保发布到生产的变更都经过了多轮环境的测试。当然,系统管理员也可以根据业务背景,将流程设置为可在任意环境中提交变更,给企业的不同业务提供了更多的弹性。

最后补充一个新手大礼包,如果企业的数据源数量不超过 10 个,那么就可以永久免费使用上述功能,不仅如此,所有专业版的高级功能也都可以永久免费使用,废话不多说,直接上手尝试吧。