持续交付发布可靠软件的系统方法(交付生态圈)第十二章:数据管理

《持续交付发布可靠软件的系统方法》读书笔记

应用程序可以通过删除前一个版本,使用新版本替换旧版本的方式部署,但是大多数系统,数据无法使用这种方式进行变更,一旦某个系统发布到了生产环境中,关联的数据将不断增加。数据往往是系统中最有价值的部分。当我们需要对数据系统进行结构修改或者内容修改时,就需要相关的策略。
对数据的修改是不可避免的,关键在于将数据迁移过程自动化。目前有一些工具对数据迁移提供了较多支持,它们还允许对数据库进行版本化管理。
另一个重要部分是测试数据的管理。

数据库脚本化

任何数据库的修改都应该通过自动化过程来管理。包括数据库的初始化数据库所有的迁移都需要脚本化,并将脚本提交到版本控制库中。
几乎所有的数据管理系统都支持通过自动化脚本进行数据存储的初始化工作。

  • 清除原有的数据库
  • 创建数据库结构、数据弯路实例以及模式等
  • 向数据库加载数据

在大多数据项目中,数据库的使用要复杂得多。

增量式修改

绝大多数据系统,对数据库更新时,要保留它们的数据。由于在部署时需要保留数据库中的已有数据,所以需要有回滚策略,以便部署失败时使用。这就需要对数据库进行版本控制。

  • 在数据库中创建一个数据,用来保存版本号
  • 每次数据库进行修改时,需要创建两个脚本:升级脚本、回滚脚本
  • 有一个配置项来设置数据库与应用版本对应关系

在很多项目中,多个程序共用一套数据库存储。虽然这种方式并不推荐,最好是让程序直接交互,但是这种情况却是常见的。这种环境下对数据库变更,就需要对程序做完全的集成测试,确保数据库变更对相关影响到的程序都能测试到。同时对哪个应用使用了数据库哪个对象做登记也是可以的。

数据库回滚和无停机发布

生产环境部署有两个需求会成为数据库回滚的约束。

  • 回滚时需要保留本次升级后产生的数据
  • 保持应用程序的可用状态
  1. 保留数据的回滚
    回滚脚本要满足以下条件
  • 包括模式修改,即不迁移任何数据
  • 只删除新版本使用的那些数据,即使这些数据丢失了也没问题

对于以下情况

  • 涉及从临时表中将数据导回来
  • 删除那些旧版本系统无法接受的数据

第一种方法是将那些不想丢失的数据库事务缓存,一旦应用程序被成功地重新部署,这些事件就可以重新播放一遍。
第三种方法是使用蓝绿部署,发布时对生产数据库(蓝环境)做一个备份,将备份放在绿环境中应用,迁移数据,将用户切换到绿环境中。回滚时,将用户切回蓝环境,再把绿环境的数据库上发生的新事务回收,在下一次更新之前重新应用这些事务到蓝数据库上。

  1. 应用程序部署与数据库迁移解耦

第三种方法是将应用程序部署过程与数据迁移过程解耦,分别执行,这种可用于管理热部署。
开发应用程序升级的中间版本,它既与数据库上个版本兼容,也与数据库下个版本兼容。

将应用程序部署与数据库迁移解耦

测试数据的管理

  1. 为单元测试进行数据库模拟
    单元测试不使用真正的数据库,通常它会使用测试替身对象来取代与数据库打交道的服务。如果做不到的话:
  • 用测试替身对象来替代那些访问数据库的代码,通常使用repository模式
  • 使用假的数据库,如H2/SQLite/JavaDB。单元测试运行在一个内存数据库上,让验收测试运行在平时使用的磁盘的数据库上。
  1. 管理测试与数据之间的耦合
    以下三种方法可以用来做测试设计,便于管理好数据的状态:
  • 测试的独立性[推荐],合理组织测试,让每个测试的数据只对该测试可见
  • 适应性测试,运行时先对数据环境进行检查,用检查的数据作为数据基础进行测试
  • 测试的顺序,按某种已知的序列运行,每次测试输入依赖于前一个输出

保持测试的独立性最简单的方法是确保在测试结束时,总是把数据库中的数据状态恢复到测试之前。
对于支持事务的数据库来说,测试开始时创建一个事务,在事务内执行所需的数据库操作与交互,测试结束后,将该事务进行回滚。
不建议创建一个连贯的“故事”进行顺序执行,这个有序的测试无法真正地代表测试的目的和内容。

数据管理和部署流水线

  • 提交阶段的测试数据,避免复杂的数据准备。
  • 验收测试的数据,尽可能减少测试对大型复杂数据结构的依赖。测试专属数据、测试引用数据、应用程序引用数据
  • 容量测试的数据,为测试提供足够的输入数据,准备适当的引用数据支持测试中的用例
  • 其他测试阶段的数据,推荐利用生产数据的一个子集或者运行一些自动化验收测试或者容量测试之后产生的数据库,为其他测试阶段提供数据。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,193评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,306评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,130评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,110评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,118评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,085评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,007评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,844评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,283评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,508评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,395评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,985评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,630评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,797评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,653评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,553评论 2 352

推荐阅读更多精彩内容