写点什么

在 DevOps 中以 API 看待共享数据库

  • 2017-10-15
  • 本文字数:1223 字

    阅读完需:约 4 分钟

WinOps 2017 大会上,Sabin.io 首席顾问 Simon Sabin 做了一个演讲,介绍如何将数据库更改加入到持续部署模型中。从数据库所有者的角度看,要实现在多个服务或应用间共享数据库,关键之一就是将这些共享数据库看成是API。

Sabin 建议考虑使用视图、触发器和存储过程等机制。它们可以更改数据库的内部结构,并同时保持向后兼容的应用数据操作。他举了一个例子,一个存储信用卡号的数据库表已经从纯文本改为被加密的,但要保证应用依然以纯文本方式检索卡号。例子中是通过查询视图实现的,而实际的数据库表通过触发器实现信息的加密和解密。处理结构如下图所示:

数据库向应用提供隐式的合约和接口,其中数据库的内部更改(通常出于性能、安全和其它一些改进的需要)不应该影响到应用。这一原则可以类比为 API,突破性更改同样遵循最小化原则,并应给出大量的通知信息,保证应用在实际数据更改之前采纳和部署前向兼容更改。对数据库应用消费者驱动合约,这样的方法是可延展的。

按Sabin 的说法,需要这一方法去调和对共享数据库的不同视角。应用开发人员总是将数据库看成是“沉默的存储”,而数据库管理员(DBA)则将数据库看成是关键业务数据的仓储之所。理想情况下,每个应用团队会有自己的数据库,团队中也应具有DBA 角色,但这通常难以达到。

当应用本身就需要模式或其它更改时,Sabin 建议降低批处理的规模(因为在数据库中实现可靠性和一致性是一个复杂的任务),一次应用一个小更改,并更改相应的应用代码。选取何种迁移机制,是金模式(Gold Schema)还是迁移脚本方式,依赖于更改的具体类型。在Sabin 看来,相比于对抗式的,这一机制更多是补充式的。对于模式更改,适用于金模式机制。金模式定义了目标模式(期望状态),并使用类似于 SQLCompare 这类的工具做了当前状态和期望状态间的“差异比较”。迁移脚本包括 DBDeploy Flyway ReadyRoll 等,该机制可能更适用于更复杂的修改。

Sabin 还推荐了其它一些方法,包括:指定数据库去适合自身工具而非其它方法,将部署信息添加到数据库自身中以便于追踪和诊断问题,将数据库更改作为交付流水线一部分看待以提升可审校性和合规性。演讲的最后,Sabin 建议使用区分在“私有”和“公开”的方法极大地改进数据安全(在持续发生关键数据泄漏时)。例如,让一个可访问(“公开”)的小型数据库中提供对较大规模的安全(“私有”)数据库的视图,而“私有”数据库是不应被应用本身直接访问的。

正如 DevSecOps 运动是经过一段时间后才得以确立,将数据库更改加入到集成持续部署过程中的理念业已存在一段时间了,并被冠以各种称法。Sabin 将其称为“Data DevOps”,也有人将其称为“数据库生命周期管理”(DLM,Database Lifecycle Management)。另一位WinOps 2017 大会演讲者 Eduardo Piairo ,指出:

DevOps 并非是要定义一个处理数据库更改的新过程,而是将数据库更改和应用及架构代码一并集成到服务生命周期中。

查看英文原文: Treating Shared Databases Like APIs in a DevOps World

2017-10-15 19:001544
用户头像

发布了 391 篇内容, 共 135.0 次阅读, 收获喜欢 256 次。

关注

评论

发布
暂无评论
发现更多内容

Elasticsearch聚合学习之一:基本操作

程序员欣宸

Elastic Search 9月月更

Python基础(三) | Python的组合数据类型

timerring

Python. 9月月更

手部骨骼跟踪能力,打造控制虚拟世界的手势密码

HarmonyOS SDK

关于 DynamoDB

Joseph295

架构实战营模块七作业

zhihai.tu

数据治理(十五):Ranger 管理 Hive 安全

Lansonli

数据治理 9月月更

关于 HBase

Joseph295

腾讯前端二面面试题(附答案)

beifeng1996

JavaScript 前端

nft平台搭建:nft商城开发nft平台开发

开源直播系统源码

NFT 数字藏品 数字藏品开发 数字藏品系统

Java基础语法知识点 1

喜羊羊

9月月更

Qt实现文本编辑器(二)

中国好公民st

c++ qt 9月月更

SpringCloud Feign 远程调用(史上最详细讲解)

SpringCloud Fegin 9月月更

基于阿里云GPU云服务器的AIACC助力UC搜索业务性能提效380%,每年节省数千万成本

阿里云弹性计算

神龙 加速引擎 TensorRT QTC

库调多了,都忘了最基础的概念《Mysql相关知识》

知识浅谈

MySQL 9月月更

社招前端必会面试题

bb_xiaxia1998

JavaScript 前端

Kubernetes: 关于云原生,我知道的一切都在这里了

Joseph295

HDFS Block状态转移详解

Joseph295

关于AWS Aurora

Joseph295

还能把浏览器当作 Web 服务器?骚操作,学废了~

掘金安东尼

前端 9月月更

美团前端二面高频面试题合集

loveX001

JavaScript 前端

面向对象、DDD与设计模式

Joseph295

Java基础知识之数组

喜羊羊

9月月更

『数据结构与算法』之时间复杂度与空间复杂度,看这一篇就够啦

喜羊羊

9月月更

Kafka 最重要的 10 issues 详解

Joseph295

分布式事务解决思想以及实现方案

想要飞的猪

3PC 2PC注意事项 TCC 本地消息表

频面试题合集

helloworld1024fd

JavaScript 前端

OpenHarmony源码的编译构建

坚果

OpenHarmony 9月月更

分布式系统的一致性算法导论

Joseph295

【Vue】Vue项目需求--实现搜索框输入防抖处理

Sam9029

JavaScript Vue 前端 9月月更

性能:顶尖高手必备

Joseph295

近期对前端性能优化的总结

南城FE

性能优化 前端 性能 性能提升

在DevOps中以API看待共享数据库_数据库_Manuel Pais_InfoQ精选文章