写点什么

数据库管理工作如何适应 DevOps 实践

  • 2016-01-31
  • 本文字数:2345 字

    阅读完需:约 8 分钟

Agile Consortium International and Unicom 组织即将在 2 月 4 日于比利时布鲁塞尔举办 2016 DevOps 布鲁塞尔峰会。InfoQ 将全程报道此次活动。

在 DevOps 布鲁塞尔峰会上,Dan North 将在演讲中探讨数据库管理工作如何适应 DevOps 这一新的实践。InfoQ 与 North 进行了一次采访,内容包括数据库管理员的日常工作,以及这些工作与开发者和运维人员的工作之间的关联;数据库管理工作是怎样组织的;数据库如何适应 DevOps 或持续交付实践;以及 North 对于实施了 DevOps 的组织数据库管理工作未来的变化有怎样的期待。

InfoQ:数据库管理的日常工作通常是怎样进行的?

North:DBA 这一角色通常会接触多种产品环境、开发团队、技术以及业务干系人。也许他们在上一分钟还在进行数据库调优,下一分钟就要安装某个安全补丁,以及对于生产环境中遇到的问题进行响应,或是回答开发者们的问题。他们需要确保备份与分发的正确配置,系统与用户对于相应的数据库(并且仅限于这些数据库!)有着适当的访问权限,并且还要实际参与异常的系统行为的诊断工作。

DBA 的实际价值体现在对于数据库本身、运行时特性与配置等机制和细节的理解上,并在编写查询功能的开发者与负责各种作业的运行的运维人员之间起到桥梁的作用。熟练的 DBA 能够指出如何加快运行较慢的查询的方法,包括改变查询逻辑、调整数据库 schema、或是更改数据库运行时的参数。例如改变连接的次序、引入索引(有些情况下还需要删除某个索引!)、对数据库的查询执行计划器给出提示、或是更新数据库的启发式特性,这些工作对于性能可能会带来极大的影响。

InfoQ:这些工作与开发者或运维人员的工作有什么联系?

North:这方面有一个不幸的事实,只有极少数的开发者能够真正了解关系型数据库背后的运行机制。Hibernate 或微软的 Entity Framework 这样的框架提供了一种映射层,它向普通的企业开发者掩盖了内部的运行机制,因为对于这些开发者来说最重要的技能在于 C#或 Java 的编程,这种做法显然是一把双刃剑。一方面,这种映射层能够在数据库 schema 与对应的面向对象数据结构之间生成映射关系,从而简化开发普通应用程序的过程。但如果你所期望的领域模型与数据库 schema 之间产生了较大的分歧,或者是对于性能、可用性与可伸缩性有较高需求的情况下,这种方式很快就会让应用变得复杂起来。在这种情况下,如果在开发团队中能够加入一位 DBA 以提供帮助,这种做法的价值是无可估量的。

从运维的角度来说,DBA 通常需要负责实现业务上的分发或可用性的策略。监控系统、诊断问题及“保持系统始终正常运转”等工作属于运维人员的职责,但 DBA 也需要深入参与与数据库相关的监控工作与问题诊断。他们还需要为运维团队定义数据库管理与维护的流程。

InfoQ:你能否举例说明一下数据库管理工作通常来说是如何组织的?这种组织方式有什么益处与缺陷?

North:通常来说,DBA 这一角色的工作主要来自于请求或工单系统,这形成了另一种技术壁垒。这种方式意味着 DBA 往往接触不到宏观的业务或技术方面的需求与限制的上下文,他们往往只能在信息的真空中尽力把工作做好。从我的经验来来看,DBA 经常会扮演一种随时提供支持服务的角色,因此如果某个开发者的查询超过了阀值,那么 DBA 很可能在半夜里被电话吵醒。也正因如此,DBA 对于来自开发者的数据库变更往往选择谨慎的、甚至是非常质疑的态度。

有时候,DBA 可能会分为“生产环境 DBA”与“开发 DBA”这两种不同的角色。前者通常都坐在一起,进行我之前所描述的各种生产环境的维护工作。而后者将帮助开发团队进行 schema 的设计与查询,让他们能够以正确的方式与数据库进行交互。这种方式可以带来很好的效果,尤其是生产环境 DBA 与开发 DBA 之间已经建立了一种信任关系的前提下。生产环境 DBA 知道开发 DBA 会确保 schema 的设计与数据库的查询具有一定程度的质量与合理性,而开发 DBA 也相信生产环境 DBA 会以正确的方式对各种数据库实例进行配置与维护。

InfoQ:数据库如何适应 DevOps 或持续交付实践?

North:在许多组织中,他们之间确实是无法适应的。无论是将数据库变更通过一个独立于应用代码变更的额外流程进行发布,还是将数据库与应用的变更统一发布至生产环境中,两者都面临着很多困难。

某些组织会采取“数据库即代码”的策略,通过某些自动化流程,利用变更脚本将变更部署至数据库中。这些脚本与应用代码一起在源代码控制系统中进行管理,这可以简化变更的追踪与分析工作。这些变更脚本通常叫做迁移脚本,或者就直接叫做迁移,他们已经是最近于“数据库即代码”这种策略的形态了,但仍然包含大量不必要的复杂性。

InfoQ:对于实施了 DevOps 的组织,你对数据库管理工作的变化在未来有怎样的期待?数据库管理员将如何为此做好准备?

North:对于 DBA 来说,最理想的模式是让他们成为开发及运维团队这个整体中的一分子。DevOps 的目标是将敏捷开发中的各种技术优势,例如持续集成、自动化以及版本控制整合到一个运维的上下文中,同时依旧保持让系统持续运转的各种严格的纪律。

我希望未来的数据库变更能够像代码变更一样简单。我不希望手动编写迁移脚本,或者不断记录有哪些脚本已经运行过了、哪些还没有运行等等。我应当能够选择在某个开发数据库上进行的任何变更,然后像代码一样进行“签入”。我不需要在版本控制系统中手动进行差异比较操作,而是可以在软件中直接操作,让 VCS 来找出这些变更。

数据库工具应当能够指出自上个“版本”以来,数据库一共产生了哪些变化,并生成相应的迁移脚本。像 Red Gate 等几家软件商在这方面已经取得了一些进展,但前方的路似乎还很漫长。目前大多数的“敏捷型”数据库工具主要作用还是创建、应用以及管理迁移脚本,而不是真正将数据库视为代码进行处理。

查看英文原文: How Database Administration Fits Into DevOps

2016-01-31 18:001930
用户头像

发布了 428 篇内容, 共 171.5 次阅读, 收获喜欢 36 次。

关注

评论

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

一站式交付体验:云效+Kubernetes

阿里云云效

阿里云 Kubernetes 云原生 持续交付 一站式平台

Java培训:封装的含义及实现方式

@零度

JAVA开发 封装

Kafka消息存储机制

编程江湖

AMD EPYC服务器芯片将涨价10%~30%

WorkPlus

对话 SphereEx 创始人张亮:开源与商业并行 做时间越久越有价值的事情

SphereEx

会声会影如何制作视频影片-影片制作过程三步骤

懒得勤快

资讯|WebRTC M97 更新

网易云信

WebRTC

Apsara Stack 技术百科 | 可运营的行业云,让云上资源跑起来

阿里云 科技 混合云

Linux系统编程-(pthread)线程创建与使用

DS小龙哥

线程 2月月更

Linux系统编程-(pthread)线程通信(围栏机制)

DS小龙哥

2月月更 围栏机制

百度智能云开物再收“一个奖状”

百度开发者中心

工业互联网 百度智能云 百度智能云开物

虎符交易所Hoo研究院:Open Sea上大火的NFT项目—Azuki

区块链前沿News

NFT Hoo 虎符交易所 Azuki

Linux系统编程-(pthread)线程通信(读写锁)

DS小龙哥

2月月更

成为第一没有捷径:AI新势力MindSpore成长秘籍 | 源创者说 专访胡晓曼

科技热闻

误删D盘数据怎么办?推荐使用数据恢复软件EasyRecovery

淋雨

数据恢复 EasyRecovery

抓到Netty一个Bug,顺带来透彻地聊一下Netty是如何高效接收网络连接的

bin的技术小屋

网络编程 中间件 netty 死磕 NIO Java【

从小样本学习出发,奔向星辰大海

百度开发者中心

百度云 百度 飞桨

百度AICA再添57位“首席AI架构师”,人工智能与产业场景结合愈发深入

百度开发者中心

飞桨 百度AI

2021 年软件安全报告:代码开源,福“祸”相依?

腾源会

开源 安全

Linux系统编程-(pthread)线程通信(条件变量)

DS小龙哥

2月月更

四款你必须知道的前端开发工具

编程江湖

动态加载不适合数组类?那如何动态加载一个数组类?

华为云开发者联盟

Java 数组 动态加载 数组类

移动办公时代,政企为何首选私有化的即时通讯平台?

WorkPlus

IAST 最佳实践 | 利用洞态做开源组件的安全治理

火线安全

DevOps进阶(一):DevOps 软件开发工艺解读

No Silver Bullet

DevOps 2月月更

GIF 格式解析之表情包是如何动起来的

CRMEB

某 E-Office v9 任意文件上传【漏洞复现实战】

H

网络安全 漏洞

浪潮云说丨上云迁移实践

浪潮云

云计算,

像搭积木一样定制系统,这家公司正瞄准数据库做增值服务

SphereEx

Linux系统-Makefile规则介绍、基本使用

DS小龙哥

Linux makefile 2月月更

Linux系统编程-(pthread)线程通信(互斥锁)

DS小龙哥

互斥锁 2月月更

数据库管理工作如何适应DevOps实践_DevOps & 平台工程_Ben Linders_InfoQ精选文章