英文原文:Your Database: The Threat That Lies Within
我们已经给予了数据库充分的关注,因此它们不应成为 IT 风险因素。但即便为 DRP(灾难恢复计划)准备预算、备份机制并且拥有一流的 DBA,数据库仍然造成了重大威胁。这是为什么呢?
变得敏捷
在快速发展、充满竞争的市场中,如果你的竞争对手能够更快更好地发布相关产品,那就意味着你终将失去市场份额。这也就是为什么公司需要变得敏捷。公司需要更好地掌控信息、更快地制定决策、加快软件交付以及优化质量控制。敏捷生来就是处理这些挑战的。它一方面使组织能够更快地发展,并处理不断变化的需求,另一方面又能确保最佳质量。把敏捷概念带入产品(产品环境、客户站点等)当中,并使得开发和运营紧密相连,这样的需求导致了 DevOps 的诞生。
敏捷和 DevOps 的出现并未使软件开发生命周期(SDLC)的最佳实践发生彻底的改变。因为它们是软件开发演进的步骤,而不是一次彻头彻尾的变革。然而,如果你正行驶在敏捷世界的快车道上的话,如何贯彻执行这些最佳实践将显得更为重要。此外,自动化是极其重要的,它既提升了总体效率,又减少了频繁变更和发布的固有风险。
流程的自动化、持续集成、持续交付以及持续部署的实现,这些实践已经被反复证明过了。它们确保了总体流程的高效和可靠性。
对数据库需要特别关注
基于自动化的可重复性和可持续性流程共同驱动着更安全和更少出错的部署工作。要想在频繁变更中立于不败之地,那就不能依赖于个人能力去记住所有已完成的步骤,也不能依赖于群体能力去识别出可能受到当前变更影响的所有范围。关键在于要尽可能减少人工操作。
但不同于其他软件组件和代码(或者是编译过的代码),数据库可不只是一堆文件。数据库是你最有价值的资产,它包含了需要妥善保管的业务数据。因此我们不能将它从开发环境拷贝粘贴到测试环境再到产品环境。大多数情况下,数据库的开发与应用代码(.Net 或者 Java 开发)显得截然不同:开发人员和 DBA 访问并更改共享资源,即一个中央数据库,而不是工作站上的一个本地拷贝。
数据库开发和普通应用代码开发是如此不同,最终导致了孤岛的产生。
应用开发人员正勇往直前,他们采用优秀的新开发工具、实践敏捷方法、自动化以及持续交付。相比之下,数据库开发采用的却是一个相对不受控制的流程。数据库开发与其说是工程实践,倒更像是一门与整个 SDLC 流程相隔绝的艺术。在这里,人们从未共享过开发工具、流程和最佳实践。
数据库作为有价值的资产,极易成为摇晃的车轮从而破坏了整车的平衡(即成为短板)。
数据库变更应如何进行处理?
我们不应该仅仅因为数据库构造的不同而视它为特别的事物。我们应该确保所有团队、代码开发人员、DBA 和数据库开发人员都采用相同的流程。如同在代码开发中做的那样,我们应当遵循这些已得到证明的软件开发最佳实践,并将其应用到数据库开发当中去。
在整个开发周期中,为了将数据库造成的风险最小化,我们需要按照以下方式解决问题:
最好的消息是,这些不同类型的解决方案完全可以合作无间。因而可以使用 Delphix 创建虚拟开发分支,使用 DMsuite 屏蔽机密内容,使用 Jira 管理开发任务,使用 DBmaestro 对变更和发布进行版本控制,使用 tSQLt 或者 SQL Developer 进行自动化测试发布,以及使用 uDeploy 来策划发布流程,以上所有都能汇总成一个精巧的、自动化的并且安全的流程。
总结
当着手采用最佳实践的时候,数据库才展现出真正的挑战。这也正说明了孤岛是如何产生的。开发部门或许会采用不同的流程来分别对待代码开发和数据库开发,或仅在部分变更工作中采用最佳实践。
消除主要风险的最佳方法是,不要以技术眼光去看待这些差异,同时找到解决方法——流程或者工具——去采用并实施最佳实践和自动化。
作为一份具有如此高价值的资产,数据库不应成为你的业务的短板。
关于作者
Yaniv Yehuda 是 DBmaestro 公司的联合创始人兼 CTO。DBmaestro 是一家以数据库开发和部署技术为重点的企业级软件开发公司。Yaniv 同时也是 Extreme Technology 公司的联合创始人兼开发部主管。Extreme Technology 是一家面向以色列市场的 IT 服务供应商。Yaniv 曾是以色列国防军队计算机中心的上尉。他在那里担任软件工程经理。