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。

目录
相关文章
|
3天前
|
运维 安全 Devops
DevOps实践:自动化部署的脚本编写技巧
【9月更文挑战第24天】在DevOps文化中,自动化部署是提升效率、减少人为错误的关键。本文将引导读者了解自动化部署脚本的编写方法,从基础命令到复杂逻辑,逐步深入。你将学会如何用代码简化日常任务,让重复工作变得轻松愉快。让我们一起探索自动化的世界,释放你的创造力!
|
29天前
|
运维 监控 Devops
DevOps文化下的自动化运维实践
【8月更文挑战第30天】在DevOps的浪潮中,自动化运维不再是选择题而是必答题。本文将深入浅出地探讨如何通过脚本和工具实现日常运维任务的自动化,从而提升效率,减少人为错误,确保系统的稳定性和安全性。我们将一起学习编写简单的自动化脚本,并探索如何使用现成的自动化工具来简化我们的工作。
|
30天前
|
运维 Devops jenkins
DevOps实践:自动化部署与持续集成
【8月更文挑战第29天】本文深入探讨了DevOps文化中的两大核心实践——自动化部署和持续集成。通过介绍这两个概念,解释了它们如何相互促进并提升软件开发的效率和质量。文章将展示具体的代码示例,指导读者如何在实际项目中实现这些实践,以及如何从中受益。
|
7天前
|
Devops jenkins Java
DevOps实践:持续集成和部署的自动化之旅
【9月更文挑战第20天】在软件开发的世界里,速度和质量是至关重要的。本文将带领读者踏上一场自动化之旅,深入探索DevOps文化中的两大支柱——持续集成(CI)和持续部署(CD)。我们将通过一个实际的案例,展示如何利用现代工具和技术实现代码从编写到部署的无缝转换,确保软件交付的高效性和可靠性。准备好让你的开发流程变得更加流畅和高效了吗?让我们开始吧!
|
8天前
|
运维 负载均衡 Devops
DevOps实践:使用Ansible进行自动化部署
【9月更文挑战第19天】在软件开发的快节奏世界中,DevOps已成为提高效率和促进协作的关键。本文将通过一个实际案例,展示如何使用Ansible简化自动化部署过程,旨在帮助读者理解DevOps的核心价值并掌握Ansible的基本使用。从概念到实践,我们将一起探索如何通过编写简单的Playbook来自动化服务器配置和应用部署,最终实现快速、可靠的软件发布。
|
17天前
|
监控 Devops 测试技术
DevOps实践: 持续集成和持续部署(CI/CD)的入门指南
【9月更文挑战第10天】在快速迭代的软件开发世界中,DevOps已经成为加速产品交付、提升软件质量和团队协作的关键策略。本文将深入浅出地介绍DevOps的核心组成部分——持续集成(Continuous Integration, CI)与持续部署(Continuous Deployment, CD)的基本概念、实施步骤以及它们如何革新传统的软件开发流程。你将学习到如何通过自动化工具简化开发流程,并理解为什么CI/CD是现代软件开发不可或缺的一环。
|
13天前
|
Devops jenkins 持续交付
DevOps实践:构建和部署一个Docker化的应用
【9月更文挑战第14天】在当今快节奏的软件开发领域,DevOps已经成为提升效率、加速交付的关键。本文将引导你理解DevOps的核心概念,并通过一个实际的示例—构建和部署一个Docker化的应用—来深入探讨其实践方法。我们将从简单的应用出发,逐步实现Docker容器化,并最终通过CI/CD流水线自动化部署过程。这不仅是对DevOps流程的一次实操演练,也是对现代软件开发理念的一次深刻体验。
|
15天前
|
运维 Cloud Native Devops
云原生架构的崛起与实践云原生架构是一种通过容器化、微服务和DevOps等技术手段,帮助应用系统实现敏捷部署、弹性扩展和高效运维的技术理念。本文将探讨云原生的概念、核心技术以及其在企业中的应用实践,揭示云原生如何成为现代软件开发和运营的主流方式。##
云原生架构是现代IT领域的一场革命,它依托于容器化、微服务和DevOps等核心技术,旨在解决传统架构在应对复杂业务需求时的不足。通过采用云原生方法,企业可以实现敏捷部署、弹性扩展和高效运维,从而大幅提升开发效率和系统可靠性。本文详细阐述了云原生的核心概念、主要技术和实际应用案例,并探讨了企业在实施云原生过程中的挑战与解决方案。无论是正在转型的传统企业,还是寻求创新的互联网企业,云原生都提供了一条实现高效能、高灵活性和高可靠性的技术路径。 ##
24 3
|
22天前
|
运维 Kubernetes Devops
DevOps 实践:从理论到现实的转变
【9月更文挑战第5天】本文旨在探索 DevOps 的核心理念与实践,通过深入浅出的方式,揭示 DevOps 如何影响现代软件开发和运维。文章不仅讨论了 DevOps 的理论框架,还提供了具体的实施案例,帮助读者理解如何在现实世界中应用这些概念。我们将一同见证 DevOps 如何优化流程、提高效率,并最终促进业务的成功。
|
21天前
|
运维 监控 Devops
DevOps实践:从理论到落地的旅程
在软件开发和运维日益融合的今天,DevOps已不仅仅是一个流行词汇。它代表了一种文化和实践的转变,旨在打破部门间的壁垒,加速产品从构思到市场的流程。本文将带你了解DevOps的核心理念,并通过实际案例展示如何将这些理念应用到日常工作中,实现高效协作和持续改进。无论你是DevOps新手还是资深专家,这篇文章都将为你提供新的视角和实用的技巧。