Linux ·

在数据库中引入DevOps方法

今天(11月2日)是PASS 2017峰会的首日,Redgate布道师Steve Jones介绍了他在数据库管理中引入DevOps的一些技巧。他所介绍方法中包括了一些可适用于各种规模应用部署的技巧。Jones在演讲一开始就提及Amazon在2016年部署实现每12秒做一次生产层面变更。他分享此案例的一个原因在于,阐明使用有效的变更管理方法做高效交付时可达到的变更频率。

考虑到存储在数据库中的数据量以及数据库所担任的关键角色,对这些生产环境中的数据库成功地执行变更无疑十分关键。为了展示数据库中存储的数据量,Jones举例Microsoft每日将从Azure用户采集700TB的遥测数据(没错,是TB)。

Jones引用了Gene Kim给出的支撑DevOps的三个原则:

  1. 系统化考虑;
  2. 放大反馈循环;
  3. 实验和学习的文化。

Jones就此原则给出了他在将DevOps引入数据库中所使用的技术。最初的也是基础的一步,是实现并依赖于版本控制系统的使用,例如Git、SVN等。下一步是实现在应用代码中无差别地对待数据库代码。第三步是在版本控制系统中设置并维护一个组织有序的系统,这在某些情况可以是存储应用代码的同一个代码库,但是在某些情况下使用独立的代码库会更好。最后一步是对更改进行代码审查并认真对待。

由于在非开发环境中会有部分的测试更改先于部署执行,Jones推荐所使用的数据集是特别构造,而非从生产数据中抽取。开发(DEV)、用户接收测试(UAT)和预发布测试(STG)等从清空的数据库开始,进而添加表示生产环境用例的10到40行数据。

所有要在生产环境中部署的代码应该以一致的方式完成。如果需要执行一项手工步骤,那么应对这些步骤做完备的文档。一致性是十分重要的,它保证了每个部署总是以同样的方式完成,并且考虑到了一些重要过程,例如单元测试、定义了主键的适用表等。

Jones观察到不成功的变更是很难回滚的,尤其是变更中涉及了数据库。Jones推荐手工编写回滚代码,并且这些代码已在部署到DEV、STG等阶段之前进行了测试,使得工作脚本已准备好加入到所需的事件中。另一个可考虑的技术是使用黑箱部署,其中变更被部署到生产系统,但是使用它们则是通过一个特征标志触发的。这样一个特性在确定可用于一般通用版(GA)之前,它都是非激活的。据Jones介绍,Facebook在推出Facebook Messenger中就采用了这个方法,确保它们的系统可处理预期的用户负载。

查看英文原文: Bringing a DevOps Approach to Databases

参与评论