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。

目录
相关文章
|
27天前
|
运维 监控 Devops
DevOps实践:持续集成与持续部署的黄金路径
在数字化时代,快速迭代和高质量软件交付成为企业竞争的核心。本文深入探讨了DevOps文化下,持续集成(CI)与持续部署(CD)的最佳实践,旨在为读者提供一套实现高效、自动化的软件发布流程的方法论。通过分析现代软件开发的挑战,结合具体案例,本文详细阐述了如何构建一个灵活、高效的CI/CD流水线,以及如何利用监控和反馈机制不断优化这一过程。文章不仅适合运维人员阅读,同时也为软件开发者和项目经理提供了宝贵的参考。
|
6天前
|
运维 监控 Devops
DevOps实践之路:从理论到现实
本文将深入浅出地探讨DevOps的核心概念、实施步骤及面临的挑战,通过实际案例分析,展示如何将DevOps理念融入日常运维工作,提升软件开发与运维效率。文章旨在为读者提供一条清晰的DevOps实践路径,帮助团队实现更快的交付周期和更高的产品质量。
|
7天前
|
运维 监控 Devops
构建高效自动化运维体系:DevOps与容器化实践
【7月更文挑战第44天】在现代IT基础设施管理中,自动化运维已成为提升效率、降低成本、确保系统稳定性的关键。本文将探讨如何通过结合DevOps理念和容器化技术来构建一个高效的自动化运维体系。我们将分析这一体系对提高软件交付速度、优化资源利用率以及增强系统可靠性的积极影响,并提供一系列实施策略和最佳实践,帮助企业实现运维自动化转型。
|
7天前
|
运维 Devops 持续交付
DevOps实践之路:从理论到企业级应用
在数字化浪潮中,DevOps作为一种提升软件开发和运维效率的方法论,正被越来越多的企业采纳。本文通过探讨DevOps的核心理念、关键实践以及在不同规模企业中的应用案例,旨在为读者提供一条清晰的DevOps实践之路。无论你是初涉这一领域的新手,还是寻求进阶的资深人士,这篇文章都将为你打开一扇洞悉DevOps精髓的大门。
19 2
|
7天前
|
运维 监控 Devops
DevOps实践:持续集成与持续部署(CI/CD)的精髓
在软件工程的海洋里,DevOps如同一艘高效的船只,而持续集成(Continuous Integration, CI)和持续部署(Continuous Deployment, CD)则是推动这艘船前行的强大双桨。本文将深入探索CI/CD的核心概念,揭示其如何助力团队高效协同、提升软件质量和加速产品上市。
25 1
|
10天前
|
运维 监控 Devops
DevOps实践之旅:从混乱到秩序的转变
在软件开发的世界里,DevOps不仅仅是一个流行词,它是文化、实践和工具的集合体,旨在缩短系统开发生命周期,同时提供高质量的软件持续交付。本文将带你领略DevOps如何从概念走向实践,转变传统运维模式,提升团队协作效率,实现快速迭代与高可靠性的平衡艺术。
|
14天前
|
Kubernetes Devops 测试技术
DevOps实践:持续集成和持续部署(CI/CD)在现代企业中的应用
随着软件开发行业的迅猛发展,DevOps文化及其核心实践—持续集成(Continuous Integration, CI)与持续部署(Continuous Deployment, CD)—已成为提升软件交付速度和质量的关键策略。本文将深入探讨CI/CD的理论基础,并结合真实案例分析其在现代企业中的实际应用效果,旨在为读者提供一套可行的实施指南。
|
16天前
|
存储 缓存 运维
优化数据库查询性能的关键技巧与实践
在当今软件开发中,高效的数据库查询是保证系统性能的重要因素之一。本文将探讨如何通过优化查询语句、索引设计以及服务器配置等多方面手段,提升数据库查询效率,从而实现更快速和可靠的数据检索和处理。
|
17天前
|
存储 负载均衡 中间件
构建可扩展的分布式数据库:技术策略与实践
【8月更文挑战第3天】构建可扩展的分布式数据库是一个复杂而具有挑战性的任务。通过采用数据分片、复制与一致性模型、分布式事务管理和负载均衡与自动扩展等关键技术策略,并合理设计节点、架构模式和网络拓扑等关键组件,可以构建出高可用性、高性能和可扩展的分布式数据库系统。然而,在实际应用中还需要注意解决数据一致性、故障恢复与容错性以及分布式事务的复杂性等挑战。随着技术的不断发展和创新,相信分布式数据库系统将在未来发挥更加重要的作用。
|
20天前
|
监控 Devops 测试技术
DevOps实践:从持续集成到自动化部署的旅程
【7月更文挑战第31天】在软件开发领域,DevOps已经成为一种文化和实践,旨在通过改进开发和运维之间的协作,来加速软件交付和提高质量。本文将深入探讨DevOps的核心概念,包括持续集成(CI)、持续交付(CD)以及自动化部署,并分享实施这些实践的具体步骤和技巧,帮助读者构建更加高效、可靠的软件发布流程。
44 1