QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

数据库管理工作如何适应 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:002219
用户头像

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

关注

评论

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

Beanshell 脚本开发实战:提升 JMeter 脚本效率与灵活性 霍格沃兹测试开发 霍格沃兹测试开发​

测吧(北京)科技有限公司

测试

软件测试丨SDK 功能测试

测试人

软件测试

QQ设计团队分享:手Q语音消息改版背后的功能设计思路

JackJiang

网络编程 即时通讯 IM

ITIL认证工具商-ManageEngine Servicedesk Plus

ServiceDesk_Plus

ITIL IT服务管理 ITIL认证 ITIL工具

“全球金牌敏捷课程” · 2月22-23日CSM认证课程 · Jim老师

ShineScrum

Scrum Master Scrum认证 scrum敏捷开发

Java-Beanshell 语法与内置对象解析:如何利用 vars、ctx、prev 优化脚本

测吧(北京)科技有限公司

测试

AI Agent:软件测试自动化的新纪元

测吧(北京)科技有限公司

测试

JMeter 脚本开发与优化:解锁 Beanshell 在性能测试中的强大功能

测吧(北京)科技有限公司

测试

【YashanDB知识库】手工迁移Doris数据到崖山分布式

YashanDB

数据库 yashandb

【YashanDB知识库】锁冲突检查

YashanDB

数据库 yashandb

VMware Tools 13.0.0 发布 - 客户机操作系统无缝交互必备组件

sysin

vmware

数电票:引领会计行业数字化革命的关键力量

用友智能财务

税务 会计

档案事业与数据要素之间有什么关系?

郑州埃文科技

数据要素

JMeter 执行 JUnit 测试用例:集成与自动化的高效解决方案

测吧(北京)科技有限公司

测试

ToDesk云电脑、顺网云、网易云、易腾云、极云普惠云横测对比:探寻电竞最佳拍档

小喵子

云电脑 云游戏 ToDesk ToDesk云电脑

Svelte 最新中文文档翻译(1)—— 概述与入门指南

冴羽

Vue 前端 Svelte 中文文档 SvelteKit

Svelte 最新中文文档翻译(2)—— .svelte、.svelte.js 和 .svelte.ts 文件

冴羽

Vue 前端 React Svelte SvelteKit

分布式系统架构:分布式缓存

不在线第一只蜗牛

架构 分布式

【YashanDB知识库】多csv文件一键式导入yashandb

YashanDB

数据库 yashandb

什么是可信数据空间?有什么作用?

郑州埃文科技

数据要素

千万级的大表,如何做性能调优?

不在线第一只蜗牛

数据库 oracle

DeepSeek-V3模型:软件测试智能化的新篇章与挑战

测吧(北京)科技有限公司

测试

如何在 JMeter 中自定义 Jar 文件:加解密与扩展功能的实现

测吧(北京)科技有限公司

测试

【YashanDB知识库】重装新库及元数据和数据导出导入指导

YashanDB

数据库 yashandb

用Golang写了个通用路由器,除了能路由HTTP协议外,还能路由Websocket/Tcp/Udp等协议,欢迎体验

Drunk

golang router 路由 DCE 通用路由

JMeter 调试技巧:从错误日志到性能瓶颈定位的全面攻略

测吧(北京)科技有限公司

测试

如何使用 Python 进行文件读写操作?

威哥爱编程

Python

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