DevOps实践-数据库备份设计

简介: 数据库的备份需要从下图中的几个方面进行考虑。但在每个产品/项目中数据库的使用设计都是不尽兴同的,所以,对数据库的备份方面的设计还是要与使用设计相结合。这里只介绍备份设计中需要考虑的内容。

DevOps实践系列文章,请参见连接。

概述:

在所有的软件系统中都有数据持久化的需求。而平常我们在软件系统中使用最多的方式就是数据库。所以,就需要对数据库的可靠性做一些必要的设计。以保证之后在项目上线运营过程中发生不可修复的问题,以此来整体提高软件系统的整体可靠性。

随着软件行业的不断发展,行业中也对软件各个层面上的解决方案都提供了高性能、靠可靠的解决方案。现在在数据存储层面也形成了很多解决方案。如:RDBMS的分库分片技术、NoSql的CAP解决方案、NewSQL技术、BigTable技术等。虽然数据存储层也有着层出不穷的存储技术,就像作者之前说的一样。每项技术都有它所擅长的方向,都有它的问题解决域。所以,不是每一项技术都可以应用到所有的场景下。

针对业务系统中的结构化数据存储领域,仍然是RDBMS占有着很大的优势。就算是RDBMS型的数据库也可以再划分为很多种类型。鉴于本文关系的是数据库的存储(物理)结构,从数据库的存储结构上将数据库分为:内存式、文件系统、物理机。基本上一个比较成熟的数据库都是支持这些模式。

内存式 文件系统 物理机
Oracle TimesTen 本身支持 本身支持
Postgresql 不支持,支持表空间 本身支持 不支持
Mysql MEMORY存储引擎 本身支持 InnoDB存储引擎
Sqlite3 本身支持 本身支持 不支持

数据库使用过程中需要发挥RDBMS的特点。在满足业务上的需求的同时,还需要满足技术上的、运维上的很多需求。所以接下来就从数据库设计开始一步一步的深入数据库可靠性设计的方方面面。

数据库驱动开发:

现在业界有一种不成文的规定:在项目没有发展到一定阶段时,开发模型都会直接使用数据库驱动开发。然后在到达一定阶段之后,再进行重构
这里对数据库驱动开发的软件过程或思维模式的指导下,简单的对项目的实施过程进行一下阐述:

  1. 根据业务分析出数据库逻辑结构;
  2. $\color{#FF00FF}{设计数据库的运维方法}$;

    • 规划数据库容量,并发量
    • 设计数据库物理存储结构
    • 设计容灾与备份方案
  3. 开发、测试、部署之后即可交付。

数据库驱动开发模式是对软件无知状态下的一种探索。它忽略了前期、中期、后期的很多分析与度量的内容。并且省略了上面的第二条。而且根据作者在之后会介绍[仓库系统及知识库]()架构模式中的指导:可以将数据库作为以一个知识库。也不会进行提前的风险评估。知识库是用来在不同的业务或者服务间共享知识与数据。所以,这里并不是推荐这种开发模式,并请尽量不要使用数据库驱动开发模式。

数据库设计:

数据库设计一般可以分为:概念结构设计、逻辑结构设计、物理结构设计。概念结构设计是将业务转化为数据库中结构的一个过程。逻辑结构设计是根据概念结构设计中的E-R图,具体的将实体关系,数据格式定义出来。物理结构设计是确定逻辑层的数据存储在什么样的硬件上,怎样存储在硬件上。

我们这里更关心物理结构设计。第一步是需要知道业务中的非功能需求。非功能需求可以评估出数据库的容量,并发量,数据类型等等信息。然后根据这些信息在进行下一步的设计工作。设计工作中要考虑的内容有:

  1. 数据库的存储容量是否能够容纳,是否需要进行分库,分表操作。
  2. 是读频繁型,还是写频繁型,还是都频繁型?
  3. 数据库对数据写入到查询出的时延要求?
  4. 是否允许进行读写分离设计?
  5. 数据库是否允许冷备,还是只可以进行热备或者变形方案?
  6. 数据库可以接受的备份方式:全量备份,增量备份(日志备份,差异备份),不备份?
  7. 数据库恢复时允许丢失的数据的要求?
  8. 数据库运维监控、容量监控、负载监控、热数据加速、死锁检测。
  9. 数据库恢复设计。恢复时间要求?恢复到的环境的要求?

在设计过程中还需要考虑数据库中存储的数据的价值以及对于维护数据库可用、可靠的投入之间的投入产出比。因为一个完备的数据库设计可能成本会非常高。而对于一个小型的网页应用来看,不必要做的很完善。

并且因为数据库的备份工作一般情况下还是需要人员参与的,所以也需要制定一套完善的数据库操作规范。以防止在人为参与的情况下造成数据的丢失与不一致。并且需要设计一套完整的自动化数据库运维过程。

备份设计:

数据库的备份需要从下图中的几个方面进行考虑。但在每个产品/项目中数据库的使用设计都是不尽兴同的,所以,对数据库的备份方面的设计还是要与使用设计相结合。这里只介绍备份设计中需要考虑的内容。
数据库备份设计

下面逐层介绍需要注意的内容:

  1. 逻辑结构层:

    • 逻辑结构中是否可以进行读写分离时的部分表的备份,即是否有外键关系,表中的数据是否可以进行单独的导入导出操作。
    • 数据索引是否与具体的存储结构和索引方式有关。如果有关需要将这些元数据一并保存。
    • 数据库中的存储过程,触发器是否与表空间、逻辑数据库有关。
    • 数据备份时使用锁表,还是停机的方式进行备份?
  2. 中间件

    • 中间件中的分片策略是否与具体的数据库有关,是否可以在中间上替换数据库实例?
    • 向中间件中新添加数据库实例时,分片策略是否需要变更?
  3. 内存

    • 表数据怎样被加载到内存中?
    • 是否有内存表的创建?内存表是否需要进行备份?
  4. 计算

    • 计算是在磁盘上的数据中进行的还是在内存上的数据中进行的?
    • 是否有预处理、预计算结果保存表,每次备份重新计算还是直接保存预计算结果?
  5. 裸设备

    • 裸设备上的数据是否有工具可以备份成文件形式?并有工具可以恢复回去
    • 裸设备导出与导入的速度?
  6. 自动化

    • 尽量的减少人工操作的内容,减少因为人工带入的错误。
  7. 规范流程

    • 数据迁移工具的使用规范
    • 数据备份过程规范
    • 数据备份存储规范
    • 数据备份恢复规范

参照:

关于开发方法可以参照:TDD,ATDD,BDD,DDD,MDSD。

目录
相关文章
|
15天前
|
jenkins Devops Java
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第27天】在快速发展的软件开发领域,DevOps实践日益重要。Jenkins作为一款流行的开源自动化服务器,在持续集成(CI)和持续部署(CD)中扮演关键角色。本文通过案例分析,探讨Jenkins在Java项目中的应用,展示其自动化构建、测试和部署的能力,提高开发效率和软件质量。
39 2
|
1月前
|
运维 监控 Devops
DevOps实践:自动化部署与持续集成的融合之旅
【10月更文挑战第7天】在软件开发领域,DevOps已成为一种文化和实践,它倡导开发(Dev)与运维(Ops)之间的协作与整合。本文将引导读者了解如何通过自动化部署和持续集成(CI)的实践来提升软件交付的速度和质量。我们将探讨一些实用的工具和技术,以及它们是如何帮助团队高效地管理代码变更、测试和部署的。文章将不包含代码示例,但会详细解释概念和流程,确保内容的通俗易懂和条理性。
131 62
|
5天前
|
运维 安全 Devops
DevOps实践中的安全审核和合规性
DevOps实践中的安全审核和合规性
|
5天前
|
监控 安全 Devops
DevOps实践中,如何平衡开发速度和安全审核的效率?
DevOps实践中,如何平衡开发速度和安全审核的效率?
|
7天前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
23 3
|
7天前
|
存储 监控 Devops
DevOps实践:持续集成/持续部署(CI/CD)的实战指南
DevOps实践:持续集成/持续部署(CI/CD)的实战指南
|
8天前
|
运维 安全 Devops
DevOps实践中的安全审核和合规性
DevOps实践中的安全审核和合规性
|
20天前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第21天】本文探讨了MongoDB Atlas的核心特性、实践应用及对云原生数据库未来的思考。MongoDB Atlas作为MongoDB的云原生版本,提供全球分布式、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了云原生数据库的未来趋势,如架构灵活性、智能化运维和混合云支持,并分享了实施MongoDB Atlas的最佳实践。
|
16天前
|
jenkins Devops 测试技术
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第26天】随着DevOps理念的普及,Jenkins作为一款开源自动化服务器,在持续集成(CI)与持续部署(CD)中发挥重要作用。本文通过某中型互联网企业的实际案例,展示了Jenkins如何通过自动化构建、持续集成和持续部署,显著提升开发效率、代码质量和软件交付速度,帮助企业解决传统手工操作带来的低效和错误问题。
44 4
|
21天前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第20天】本文探讨了MongoDB Atlas的核心特性、实践应用及对未来云原生数据库的思考。MongoDB Atlas作为云原生数据库服务,具备全球分布、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了实施MongoDB Atlas的最佳实践和职业心得,展望了云原生数据库的发展趋势。