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。

目录
相关文章
|
2月前
|
jenkins Devops Java
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第27天】在快速发展的软件开发领域,DevOps实践日益重要。Jenkins作为一款流行的开源自动化服务器,在持续集成(CI)和持续部署(CD)中扮演关键角色。本文通过案例分析,探讨Jenkins在Java项目中的应用,展示其自动化构建、测试和部署的能力,提高开发效率和软件质量。
71 2
|
30天前
|
弹性计算 安全 关系型数据库
活动实践 | 自建数据库迁移到云数据库
通过阿里云RDS,用户可获得稳定、安全的企业级数据库服务,无需担心数据库管理与维护。该方案使用RDS确保数据库的可靠性、可用性和安全性,结合ECS和DTS服务,实现自建数据库平滑迁移到云端,支持WordPress等应用的快速部署与运行。通过一键部署模板,用户能迅速搭建ECS和RDS实例,完成数据迁移及应用上线,显著提升业务灵活性和效率。
|
2天前
|
运维 监控 Cloud Native
云原生之运维监控实践:使用 taosKeeper 与 TDinsight 实现对 时序数据库TDengine 服务的监测告警
在数字化转型的过程中,监控与告警功能的优化对保障系统的稳定运行至关重要。本篇文章是“2024,我想和 TDengine 谈谈”征文活动的三等奖作品之一,详细介绍了如何利用 TDengine、taosKeeper 和 TDinsight 实现对 TDengine 服务的状态监控与告警功能。作者通过容器化安装 TDengine 和 Grafana,演示了如何配置 Grafana 数据源、导入 TDinsight 仪表板、以及如何设置告警规则和通知策略。欢迎大家阅读。
18 0
|
29天前
|
运维 监控 Devops
自动化运维实践:打造高效的DevOps流水线
在软件开发的快节奏中,自动化运维成为提升效率、确保质量的关键。本文将引导你理解自动化运维的价值,通过实际案例分享如何构建一个高效、可靠的DevOps流水线。我们将从持续集成(CI)开始,逐步深入到持续部署(CD),并展示代码示例来具体说明。准备好让你的运维工作飞跃式进步了吗?让我们开始吧!
|
2月前
|
运维 安全 Devops
DevOps实践中的安全审核和合规性
在DevOps实践中,确保安全审核和合规性至关重要。通过自动化合规审查、持续安全集成、基础设施即代码管理、敏捷合规框架、跨部门合作、教育与培训、实施DevSecOps模型、使用安全编码技术、整合正确工具及采用安全即代码等措施,组织能有效管理并降低合规与安全风险,促进高效可靠的DevOps文化发展。
|
2月前
|
监控 安全 Devops
DevOps实践中,如何平衡开发速度和安全审核的效率
在DevOps实践中,为平衡开发速度与安全审核效率,可采取自动化安全测试、安全编码实践、持续监控与日志分析、集成安全工具、合规性代码审查、基础设施即代码、权限和访问控制、安全培训、漏洞及补丁管理和持续反馈改进等措施,确保高效安全的开发流程。
|
2月前
|
运维 Devops jenkins
DevOps实践:持续集成与持续部署在现代软件开发中的作用
【10月更文挑战第42天】在快节奏的软件开发世界里,DevOps已经成为一种提升效率、确保质量和加速交付的重要方法。本文将深入探讨DevOps的核心组成部分—持续集成(CI)和持续部署(CD)—并展示它们如何通过自动化流程优化开发周期。我们将从基础概念讲起,逐步过渡到实际操作,最终通过一个简单代码示例来演示这一过程。文章旨在为读者提供清晰的指导,帮助他们理解和实现CI/CD流程,从而在软件开发领域取得竞争优势。
|
2月前
|
Devops jenkins 测试技术
DevOps实践:自动化部署与持续集成的融合之旅
【10月更文挑战第41天】在软件开发的世界中,快速迭代和高效交付是企业竞争力的关键。本文将带你走进DevOps的核心实践——自动化部署与持续集成,揭示如何通过它们提升开发流程的效率与质量。我们将从DevOps的基本理念出发,逐步深入到具体的技术实现,最终展示一个实际的代码示例,让理论与实践相结合,为你的开发旅程提供清晰的指引。
56 4
|
2月前
|
运维 安全 Devops
DevOps实践中的安全审核和合规性
DevOps实践中的安全审核和合规性
|
2月前
|
监控 安全 Devops
DevOps实践中,如何平衡开发速度和安全审核的效率?
DevOps实践中,如何平衡开发速度和安全审核的效率?