什么是数据库 DevOps?

2024-08-26 17:12
文章标签 数据库 devops

本文主要是介绍什么是数据库 DevOps?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在深入研究数据库 DevOps 之前,先回顾一下什么是 DevOps。它没有统一的定义,但我们知道它起源于软件开发方法与部署和运维的结合。

大约 2007 年和 2008 年,软件开发和 IT 界人士提出了这样的担忧:两个行业的分离,即编写和创建软件与部署和支持软件的人员完全分离,正在给行业带来致命的功能障碍。

DevOps 的目的是,通过共享所有权、工作流自动化和整个软件开发生命周期(SDLC)的持续反馈回路,打破开发者和运维人员的隔阂。而数据库 DevOps 是更广泛的 DevOps 框架中的一个专门子集,侧重于与数据库相关的活动。

数据库 DevOps 中的角色

开发者和 DBA 是数据库 DevOps 中的两个主要角色。他们的工作重点不同,甚至有些冲突:

  • 开发者:尽快构建并交付。
  • DBA:防止数据库中断。

一种典型的数据库 Schema 变更工作流

  1. 开发者在本地集成开发环境上开发功能,将 Schema 变更应用到本地数据库,并在本地进行测试。
  2. 开发者通过 Jira 等工单系统提交 SQL 更改请求。
  3. DBA 审查工单,并与开发者交换意见。
  4. DBA 使用 SQL 客户端离线发布变更。
  5. 多次重复步骤 2 ~ 5,在 UAT、Staging 和 Prod 环境中逐一执行变更。

缺乏统一的工作空间

开发者和 DBA 在进行数据库变更时会在不同的工具间跳转。开发者从本地集成开发环境中复制 SQL 语句,粘贴到 Jira 中审核。审核通过后,DBA 将 SQL 语句从 Jira 复制到本地 SQL 客户端以应用更改,然后,DBA 更新 Jira 工单并通知开发者。

缺乏自动化

  • 手动复制 SQL 语句 -> 粘贴错误的 SQL 语句。
  • 手动审核 SQL 语句 -> 审核延迟和忽略缺陷。
  • 手动部署 SQL 语句 -> 应用到错误的数据库(臭名昭著的 DROP PROD 意外)。

这些并不罕见。DBA 的人数总是少于开发者,许多工程组织甚至没有专门的 DBA 角色,而只是指派某人担任 DBA。

通往数据库 DevOps 之路

统一的工作空间

由于 GitLab、GitHub、PagerDuty 和 Datadog 等平台等工具的显著进步,DevOps 已成为现实。这些平台允许开发者、发布工程师、运维工程师和 SRE 在一个地方进行协作。数据库 DevOps 也需要一个整合的平台。

最起码的是覆盖变更流程。这可以通过采用 GitOps 这一典型工作流来实现:

  1. 开发者在 GitHub 等 VCS 中提交 SQL 变更脚本供审核。
  2. 审核通过后,合并脚本。
  3. 脚本合并后,会触发 CI 管道来安排部署。

这利用了 VCS 来请求、审核和版本化 SQL 语句。不过,即使有 GitHub Actions、GitLab CI 这样的内置 CI,VCS 仍然依赖外部 CD 系统来部署数据库变更。此外,除了变更任务,另一个常见的数据库任务是查询数据库。VCS 没有交互式界面允许用户发布 SQL 语句并获取结果。

真正的综合数据库工作空间(如 Bytebase)应涵盖「写入」(更改数据库)和「读取」(查询数据库)路径。它必须提供请求、审核和部署数据库变更的工作流,以及查询数据库的交互式 SQL 接口。

自动化

自动化有多种应用:

  • 采用 GitOps 来简化从合并到部署的数据库变更过程。
  • 连接 SQL,自动检测 anti-SQL 模式。
  • 记录变更历史并自动准备回滚。
  • 在操作事件发生时发送通知。
  • 通过 API 自定义自动化。

Bytebase 可通过 GitOps、SQL 审核、内置回滚、Webhook 集成和 API 自动执行数据库任务。

总结

数据库 DevOps 强调将数据库整合到 DevOps 生命周期中,促进开发、运维和数据库团队之间的协作。通过利用自动化工具和实践,团队可以简化数据库部署和查询流程,减少人工错误并提高一致性。这种方法不仅能加快交付周期,还能确保数据库开发生命周期与应用开发生命周期无缝集成,促进形成责任共担、持续改进的文化。

作为开发者,我们需要保持好奇心和学习热情,不断探索新的技术,只有这样,我们才能在这个快速发展的时代中立于不败之地。介绍一款程序员都应该知道的软件JNPF快速开发平台,很多人都尝试用过它,它是功能的集大成者,任何信息化系统都可以基于它开发出来。

JNPF可以实现应用从创建、配置、开发、测试到发布、运维、升级等完整生命周期的管理。减少了传统应用程序的代码编写量,通过图形化、可视化的界面,以拖放组件的方式,即可快速生成应用程序的产品,大幅降低了开发企业管理类软件的难度。

感谢阅读本文,如果有什么建议,请在评论中让我知道。我很乐意改进。

这篇关于什么是数据库 DevOps?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1109176

相关文章

数据库面试必备之MySQL中的乐观锁与悲观锁

《数据库面试必备之MySQL中的乐观锁与悲观锁》:本文主要介绍数据库面试必备之MySQL中乐观锁与悲观锁的相关资料,乐观锁适用于读多写少的场景,通过版本号检查避免冲突,而悲观锁适用于写多读少且对数... 目录一、引言二、乐观锁(一)原理(二)应用场景(三)示例代码三、悲观锁(一)原理(二)应用场景(三)示例

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Ubuntu中远程连接Mysql数据库的详细图文教程

《Ubuntu中远程连接Mysql数据库的详细图文教程》Ubuntu是一个以桌面应用为主的Linux发行版操作系统,这篇文章主要为大家详细介绍了Ubuntu中远程连接Mysql数据库的详细图文教程,有... 目录1、版本2、检查有没有mysql2.1 查询是否安装了Mysql包2.2 查看Mysql版本2.

Oracle数据库常见字段类型大全以及超详细解析

《Oracle数据库常见字段类型大全以及超详细解析》在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,:本文主要介绍Oracle数据库常见字段类型大全以及超详细解析,文中通过... 目录前言一、字符类型(Character)1、CHAR:定长字符数据类型2、VARCHAR2:变长字符数

Win11安装PostgreSQL数据库的两种方式详细步骤

《Win11安装PostgreSQL数据库的两种方式详细步骤》PostgreSQL是备受业界青睐的关系型数据库,尤其是在地理空间和移动领域,:本文主要介绍Win11安装PostgreSQL数据库的... 目录一、exe文件安装 (推荐)下载安装包1. 选择操作系统2. 跳转到EDB(PostgreSQL 的

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

mysql数据库重置表主键id的实现

《mysql数据库重置表主键id的实现》在我们的开发过程中,难免在做测试的时候会生成一些杂乱无章的SQL主键数据,本文主要介绍了mysql数据库重置表主键id的实现,具有一定的参考价值,感兴趣的可以了... 目录关键语法演示案例在我们的开发过程中,难免在做测试的时候会生成一些杂乱无章的SQL主键数据,当我们

Spring Boot 整合 MyBatis 连接数据库及常见问题

《SpringBoot整合MyBatis连接数据库及常见问题》MyBatis是一个优秀的持久层框架,支持定制化SQL、存储过程以及高级映射,下面详细介绍如何在SpringBoot项目中整合My... 目录一、基本配置1. 添加依赖2. 配置数据库连接二、项目结构三、核心组件实现(示例)1. 实体类2. Ma