【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

精益机器:将敏捷思维引入数据库开发

  • 2015-10-08
  • 本文字数:3779 字

    阅读完需:约 12 分钟

多年来,敏捷实践携短迭代、快发布、更快推出软件的承诺一直吸引着应用程序开发人员。现在,同样的做法已经进入数据库领域,但是,数据库开发团队该如何采用那些做法,他们应该从哪里开始?在本系列文章的第 1 部分(共 2 部分)中,Matt Hilbert 阐述了如何从版本控制入手将敏捷思维引入数据库开发。

敏捷号称无所不在。开发人员喜欢它,因为它简化了流程,改进了软件质量,实现了重复工作的自动化,并支持持续交付,使他们可以将精力集中在他们擅长的事情上:编码。

许多公司喜欢它,因为就像 Puppet Labs 发布的《 2014 年 DevOps 现状报告》所显示的那样,那些使用类似敏捷方法的企业,其利润、市场份额和生产率目标都超出了两倍。

Gartner 甚至将将敏捷软件开发列入了 2015 年十大高科技趋势,将其视为数字经济的驱动力之一。

但这对数据库开发人员和管理人员意味着什么?他们无法承受匆忙随意地数据库变更。默认情况下,他们需要事先做大量设计。

由于整个的数据库开发过程都比较谨慎、缺少敏捷性,所以将敏捷实践(如持续交付和自动化费力的任务)应用于数据库开发过程是一个真正的技术挑战。敏捷意味着向现有的做法中引入新技术、陌生的流程和没有使用经验的工具,同时也意味着,在现有的部署方式已经够用的情况下,冒着风险更快、更频繁地部署。

是那样吗?将敏捷思维应用于数据库开发,开发过程会更简洁、更迅速,浪费更少,质量由开发过程保证,可以避免后续许多部署问题。

游戏规则已经变了

事实是,敏捷和持续交付已经像野火一样席卷了应用程序开发领域,数据库开发领域也出现了许多敏捷活动。这是一种很自然的扩展,因为业务快速变化,功能发布速度需要加快,而数据库不能成为瓶颈。

在数据库开发、测试和部署方面,有一些工具和流程可供采用,而且可以同应用程序开发所使用的工具和流程一起使用。将数据库视为另外一部分源代码,并采用敏捷实践,数据库生命周期管理(DLM)会变得更简单。

使用方法正确的话,DLM 可以减轻数据库管理员(DBA)的负担,简化和加速测试过程,将偶尔的、让人满怀担忧的大规模部署转化成简单安全的频繁部署。

同时,它将 DBA 的角色由看门人转变成推动者,前者有时候会被认为阻碍了部署,而后者却让部署更简洁。

那是个很大的变化,或许有些出人意料,开始实施敏捷还是比较简单的。

统一所有人的思想

第一步是考虑协作,而不是竞争。在关于 DevOps 的著名小说 _ The Phoenix Project _ 中,对于应用程序开发人员和 DBA 之间的分化,主角 Bill Palmer 有一段精彩的评论:

你不能仅仅把猪从墙头扔给我们,然后就在停车场互相击掌庆祝你们如何在最后期限到来前完成了任务。Wes 告诉我们,猪可能摔断了腿,而为了让它活下来,我的人就需要没日没夜没周末地工作。

这种分化是不必要的——在数据库开发中采用敏捷思维,这种分化将不复存在。目标是实现更小更频繁的发布,开发和运营团队互相交流,并且总是在较大的问题上进行协作:提供高质量的软件。例如,运营团队会事先强调,建议的变更会对数据库产生什么影响以及为开发人员带来什么后果。

Moneysupermarket.com 数据架构师 David Poole 赞同这种观点。在文章《 DBA 和开发人员比较:无谓的冲突导致了悲伤的故事》,他在结论部分写道:“经验告诉我,当开发人员和 DBA 一起很好地合作时,他们不只是增加了彼此的效率;他们的效率翻倍了。”

选择恰当的工具

第二步是要记住,敏捷意味着改进工作方式。这不是说引入工具强制执行变革,将严苛、陌生的规则、工具和流程强加给每个人。相反,它要求以更好的方式使用现有的工具,就像 Alex Kuznetsov 在《六年敏捷数据库开发的教训与经验》中所写的那样:

敏捷是一种群众运动,不能只是简单地将特定的工具、技术或方法强加给不情愿的团队。

例如,你可以使用应用程序开发人员所使用的版本控制、持续集成和发布管理工具,实现数据库变更的版本控制、测试和部署。

这样,就不需要引入没有使用经验的工具,那虽然可以完成工作,但会增加对人们的制约,而通过充分发挥数据库工具的作用,并结合现有的应用程序开发工具,你同样丰富了工作方式。

通常,这还会带来额外的好处,应用程序和数据库开发团队齐心协力向着共同的目标努力,真正实现开发过程的整合。

小处着手

持续交付、持续集成、数据库管理生命周期——其中每个短语都足以使有关数据库敏捷思维的讨论听上去比实际复杂。

关键是从小处着手,首先对数据库进行源码控制或版本控制。源码控制本身并不是一种敏捷实践;但它可以促成类似持续集成这样的敏捷实践。没有源码控制,你就无法实现敏捷。实行源码控制,就为实施敏捷创建了条件。

对数据库及应用程序实行源码控制的更大好处是,两者的版本可以同时同步和测试。数据库代码的所有变更都同应用程序代码的变更联系在一起,任何可行的构建都可以任何时候重新生成。SQL Server 最有价值专家 Grant Fritchey 在“为什么要将数据库纳入源码控制?”一文中写道:

将数据库直接同应用程序一起纳入源码控制可以实现数据库变更和应用程序代码变更的整合,那样,你就总是可以知道,正在部署的数据库代码版本直接对应于正在部署的应用程序代码版本。

部落记忆不是源码控制

部分公司和组织仍然依赖手动的、脚本驱动的流程,他们常常将其称为源码控制。通常,其构建是围绕一个人或一个小团队对数据库的深入理解和以前什么可行(现在可能仍然可行)这样一份记忆。开发人员和 DBA 直接操作脚本,而不是数据库,数据库变更历史很难维护。

这不是源码控制,而是对源码控制的畏惧。已有的数据和结构必须总是处于保护之下,那样数据才会得到维护,才不会有任何东西丢失。对源码控制的畏惧正是源于这样一个事实。

尽管如此,借助源码控制,多个人或团队能够在同一时间访问代码段或数据库。每个代码段都有版本,这有助于形成分支以及确保不会有任何东西丢失。或者,可以将整个代码集版本化,使开发人员具备部署到已知状态或恢复到先前状态的能力。

同样重要的是, 配备一个恰当的源码控制系统,源码控制实践会成为每个人日常工作生活的一个正常部分,而不限于一个人数有限的领域。因此,如果真出现了问题,它们也可以得到快速解决,而不会变成一个潜在的危机。

简洁为美

正如所见,对数据库代码实行源码控制有极大的好处。但如果开发人员和 DBA 的工作变得越来越复杂而不是越来越简单,那么实行源码控制的好处就不复存在了。

引入一种源码控制工具,迫使开发人员改变工作方式,或者采用不同于现有做法的策略,显然会惹恼别人。同样地,选择一种不同于应用程序源码控制系统的工具会加深而不是减轻 DBA 和应用程序开发人员之间的分化。

关键是将数据库源码控制集成到现有的开发流程,那样就可以同开发人员已经熟悉的工具和做法保持一致。在 SQL Server 领域,这不可避免地意味着要使用——最好是在内部——SQL Server Management Studio。

借助一个插件源码控制工具,开发人员可以继续使用交互式开发模型,操作一个“在线”数据库。它将对象创建脚本的源码控制自动化,提醒用户数据库与源码控制版本之间的差异,并且让向源码控制系统提交变更更容易。

随着源码控制成为正常数据库开发流程的一部分,生产力也会得到提升。它节省了时间,使开发人员更不容易忘记向源码控制系统提交代码,减少了任务切换,提高了效率。由于可能有多个团队参与应用程序和数据库开发流程,所以一个库也会让查看已完工任务变得更简单。

可见,随应用程序一起实现数据库源码控制不仅可行,而且带来了许多好处。它在开发、测试和生产环境之间同步数据库结构,减少了有关的工作和错误。此外,它能确保数据库开发团队同其他人就变更进行沟通,并在需要时提供一个可以用于回滚的版本。

当然,它打开了通向真正的敏捷实践(如持续集成)的大门。

仅仅实现所需要的敏捷

关于迁移到敏捷工作方式,最重要的信息可能是你所决定的变革步伐。

一旦配备了源码控制系统,你就可以选择引入持续集成,将数据库变更和应用程序代码一起构建、测试和打包,加速发布,降低部署风险。它不仅可以验证你的数据库结构,而且还可以在真实的测试数据上运行单元测试,并检查数据库变更实际上是否是按照你的意愿部署的。

然后,你可以升级发布管理流程,包括所有可以让生产环境数据库安全高效地变更所需要的更新脚本、变更报告和审核步骤。

这里的关键是自动化,让工具负责处理每个数据库开发人员和管理人员工作列表最底下那些重复、费力且占用大量时间的任务。

所有这一切的自动化可以将 DBA 解放出来,将更多的时间花在重要的工作上——降低数据库部署失败的风险。这也许并不奇怪,SQL Server Central 最近的调查显示,在已经使用像持续交付这样的敏捷实践的公司中,大约有 60% 的公司变更发布时间降低了;有超过 40% 的公司变更部署时间降低了;有 30% 的公司表示,由糟糕的部署所导致的时间浪费减少了。

开始的时候,将数据库与应用程序一起实现源码控制,但最终的好处将远不止于此。

“精益机器”的第二部分将详细介绍数据库开发人员如何从像持续交付和自动部署这样的敏捷实践中受益。

关于作者

Matt Hilbert是 Redgate 的一名技术作者,有 20 年的工作经验。他为许多世界上最大的技术公司工作过,也为其中许多最小的公司工作过。他特别热衷于研究新兴技术,孜孜不倦地向广大读者解译、解析、解释技术观点,让人们为技术带来的无限可能性而兴奋。

查看英文原文: The Lean Machine: Bringing Agile Thinking to the Database

2015-10-08 05:521834
用户头像

发布了 1008 篇内容, 共 374.9 次阅读, 收获喜欢 341 次。

关注

评论

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

AI女友同时和1000人谈恋爱,狂赚500万

引迈信息

人工智能 AI 低代码 JNPF

Unsafe Unlink:unlink利用

郑州埃文科技

漏洞

Dynamic Wallpaper Mac(视频动态壁纸) v14.3免激活

真大的脸盆

Mac Mac 软件 视频动态壁纸 高清动态壁纸

共享电单车如何投放运营?流程介绍!

共享电单车厂家

共享电动车厂家 本铯智能电动车厂家 共享电动车投放 共享电单车运营

小程序技术助力智慧家居生态互联

FinFish

智慧城市 小程序容器 智慧家居 小程序化 小程序技术

镭速传输:安全文件传输的意义

镭速

第五届金蝶云・苍穹追光者开发大赛报名正式启动,百万奖金等你拿

金蝶云·苍穹

低代码 低代码平台 开发者大赛 金蝶 金蝶云苍穹

热技术冷思考:AIGC为SaaS带来的不能只有盲目自信

ToB行业头条

住宅代理的未来:挑战、趋势和机遇

摘星星的猫

忙碌的七个层次

宇宙之一粟

生活 工作

「AI之劫」:当机器超越人类底线,正在侵犯我们的创造力和道德

加入高科技仿生人

人工智能 低代码 AIGC

软件测试 | 编写单元测试用例

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

测试

软件测试 | Django客户端测试

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

测试

网易云商·七鱼智能客服自适应 ProtoStuff 数据库缓存实践

网易智企

Java 数据库 缓存

Java面试八股文的天花板,能解决互联网大厂90%的面试题

采菊东篱下

Java 编程 面试

AIGC背后的技术分析 | 知识图谱

TiAmo

自然语言处理 机器学习 知识图谱 AIGC

最新出炉!2023年金三银四Java面试1306问

架构师之道

Java 编程

APP和小程序共同塑造现代化政务服务

FinFish

小程序 小程序容器 小程序化 小程序技术 政务服务

基于WebGL智慧储能电站三维管理平台

2D3D前端可视化开发

物联网 数字孪生 智慧储能电站 微电网

腾讯云2023年最新分享Redis深度笔记(毕业版)PDF,全程精点无废话

开心学Java

Java redis 腾讯云 源码

AREX Agent 源码解读之全链路跟踪和 Mock 数据读写

AREX 中文社区

Java 测试

RocketMQ 在小米的多场景灾备实践案例

Apache RocketMQ

RocketMQ

火山引擎DataLeap数据调度实例的 DAG 优化方案 (二):功能设计

字节跳动数据平台

大数据平台 DAG DataLeap

构建新一代智慧园区移动应用以推动数字转型

FinFish

智慧城市 移动开发 智慧园区 小程序容器 小程序技术

互联网用户之间如何传输大文件

镭速

PAG动效框架源码笔记 (二)层级视图

olinone

ios 动效 andiod 特效

直播预告 | 博睿学院:智能告警与AIOps融合探索

博睿数据

根因分析 智能运维 智能告警 博睿数据 博睿学院

软件测试 | unittest单元测试框架

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

测试

FCPX插件-手势点击滑动视频转场 Hand Gesture Transitions

真大的脸盆

Mac Mac 软件 fcpx插件 视频特效插件 转场效果插件

MegEngine 使用小技巧:用 mperf 进行安卓 opencl 算子的 roofline 分析

MegEngineBot

深度学习 开源 MegEngine roofline

数据智能加持下,中小微企业告别“融资难”

华为云开发者联盟

云计算 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

精益机器:将敏捷思维引入数据库开发_研发效能_Matt Hilbert_InfoQ精选文章