【系统架构】系统架构设计之数据同步策略
文章目录
- 一、介绍
- 1.1、分布式系统中的数据同步定义
- 1.2、为何数据同步如此关键
- 1.3、数据同步策略简介
- 二、为什么需要数据同步
- 2.1、提高系统可用性
- 2.2、备份与灾难恢复
- 2.3、提高性能
- 2.4、考虑地理位置(如使用CDN)
- 三、同步备份
- 3.1、定义和概述
- 3.2、工作原理
- 3.3、优点和缺点
- 四、异步备份
- 4.1、定义和概述
- 4.2、工作原理
- 4.3、优缺点
- 五、半同步备份
- 5.1、定义和概述
- 5.2、工作原理
- 5.3、优缺点
- 六、选择合适的备份策略
- 6.1、需要考虑的因素
- 6.2、策略比较
- 七、结论
- 7.1、关键点总结
- 7.2、对系统设计的影响
一、介绍
1.1、分布式系统中的数据同步定义
数据同步犹如合唱团里的B角歌手。设想你正在观看音乐会,突然,主唱失声。如果有B角歌手,那么音乐会仍能继续。在计算机领域,数据同步就是对数据进行备份。若系统的某个部分出现问题,其它部分还能继续运行。这就像一个保险,确保信息始终可获取,不论出现何种意外。
1.2、为何数据同步如此关键
试想一下,你手机中那张最珍爱的照片。再想象,如果它永远消失了。那种感觉很难受,对吧?这就是我们常常在多处保存宝贵记忆的原因。同样,各种企业和组织也要确保他们的关键数据得到保护。数据同步犹如多处备份你的珍贵照片,它确保数据始终安全并且随时可用。不论是顾客订单、医疗记录还是学生成绩,数据同步保证重要信息不会遗失。
1.3、数据同步策略简介
保存照片有多种方式,比如在手机、电脑或者云上。在计算机系统里,数据同步也有各种方法,这些被称为数据同步策略。有的方法速度快但可能有丢失数据的风险,有的则较慢但更为稳妥。选择合适的策略就如同为特定任务挑选合适的工具,根据实际需求和所看重的因素来决定。正确地选择数据同步策略对于系统设计至关重要。本文将探讨三大主要策略:同步、异步和半同步备份,详细介绍它们的操作原理、优势以及使用场景。
二、为什么需要数据同步
2.1、提高系统可用性
试想你正在看你最爱的电视剧,突然屏幕一片空白。心情会很差,对吗?在计算机世界里,数据的可用性就像是这部电视剧,你希望它始终在那里。如果系统的一部分出现问题,数据同步确保其他部分能够继续工作。这就像电视上有多个备选频道播放同一部剧。一个频道出了问题,你可以换另一个。
2.2、备份与灾难恢复
你可以把数据同步想象成是一艘船上的救生艇。当出现重大事故时,它可以挽救局势。在IT领域,各种意外都可能发生,如停电、硬件损坏或自然灾害。数据同步好比时刻待命的救生艇。当事故发生,可以依赖数据的备份来快速恢复服务。
2.3、提高性能
你是否曾在商店排队等待很久?如果有更多的服务窗口或收银台,整体效率会更高,对吧?数据同步的原理也是如此。通过在不同地方存储数据的备份,可以更快地响应用户请求,类似于增开服务窗口,使得服务变得更加高效。
2.4、考虑地理位置(如使用CDN)
如果你在上海,但要从深圳的服务器那里请求数据,响应自然会慢一些。但如果数据在上海的服务器上有备份,那么访问就迅速得多。数据同步使数据更接近用户的物理位置,减少了访问延迟,这在为全球用户提供服务时非常重要。这好比在每个城市都有分店,确保每位顾客都能得到快速的服务。
三、同步备份
3.1、定义和概述
同步备份就好比一队消防员共同作战。当发生火灾时,他们会同时出动,确保一切都在控制之下才撤离。在计算机术语中,同步备份意味着当某个地方的数据更新后,其他所有地方的数据也会立即得到更新。系统的所有部分协同工作,确保每一个数据从节点都是一致的。这是保持所有数据完美同步的方式。
3.2、工作原理
主节点操作:想象一下一艘船的船长正在发号施令。队长(或主节点)负责,当需要做某事时,他们确保每个人都知道。在同步备份中,主节点就像船长一样,指挥着数据如何更新。它是启动这一过程并确保一切顺利进行的人。
从节点操作:船上的船员就像同步备份中的从节点。他们听从船长的命令,确保一切顺利。当主节点要求更新数据时,从节点会立即执行。他们一起工作,确保数据的每个从节点都完全相同。
确认过程:一旦船员遵循了船长的命令,他们就会向船长报告,让船长知道工作已经完成。在同步备份中,从节点会向主节点发送确认信息。就像竖起大拇指,表示“一切都好!” 这可确保一切同步并且过程完整。
3.3、优点和缺点
容错:同步备份就像汽车里有一个备胎。如果出现问题,您可以随时进行备份。由于所有数据从节点都是相同的,因此如果其中一部分发生故障,其他部分可以接管。这是确保系统始终可靠并为任何情况做好准备的一种方法。
潜在的阻塞问题:但是,如果你每次开应急灯都要去检查每一个电池是否工作正常,这无疑会造成不必要的延迟。在同步备份中,为了确保每处数据都完全同步,有时会等待所有节点的确认,这可能会造成一些延迟。这种方式更安全,但可能牺牲了一些效率。
四、异步备份
4.1、定义和概述
异步备份有点像我们通过快递发送一个包裹。我们把包裹交给快递公司,但并不能实时地知道包裹是否已经到达接收方。在数据库领域,异步备份是指在主数据库中更新数据后,这些更新会被发送到从数据库,但主数据库不会立即等待从数据库的确认。这样做可以提高数据处理的速度,但同时也增加了数据不一致的风险。
4.2、工作原理
对客户端的即时响应:在异步备份中,当系统收到你的请求后,它会立即告诉你"已接收",然后让你继续你的其他操作。它不会让你等待所有操作都完成,这完全是为了提高速度和方便性。
对从节点的异步传播:当你放下包裹后,由快递公司来负责送达。你相信它最终会到达目的地。在异步备份中,配送信息更新会发送到系统的其他部分(也就是从节点),这些从节点会在合适的时候进行同步。这就像发送配送信息给大家,你发送后相信每个人都会收到信息。
4.3、优缺点
最大化吞吐量:异步备份就像快速运行的流水线。它确保所有操作都能快速进行,不需要停下来检查每一个小细节。这对于需要同时处理大量请求的系统来说是非常理想方案的。目标是尽可能快地完成任务,即使这意味着要冒一些风险。
数据丢失的可能性:但如果你的快递在配送过程中丢失了怎么办?在异步备份中,存在一些更新可能会丢失或延迟的风险。因此,异步备份虽然快速,但在某些极端情况下,可能会出现数据不一致的情况。
五、半同步备份
5.1、定义和概述
半同步备份就像接力赛跑。一个跑者将接力棒传递给下一个跑者,并且两者都要确保接力棒安全地交接过去后,第一个跑者才会停下。在计算机领域中,半同步备份结合了我们之前提到的两种方法。它确保部分更新在继续进行之前是安全的,但不是全部更新。这是一种平衡的方式,就像走钢丝一样。它旨在兼顾两种方法的优势。
5.2、工作原理
同步备份到一部分从节点:想象一下,你把一个秘密告诉了几个亲密的朋友,并请他们转告给其他人。在你离开之前,你要确保他们完全明白了。在半同步备份中,一部分从节点会立即得到更新,并且系统会确认它们是正确的。这就像有一个安全网,但不是一个完整的安全网。
异步备份到其他从节点:告诉亲密的朋友秘密后,你相信他们会告诉其他人。你不会检查他们是否真的这样做了。在半同步备份中,剩余的更新会在不进行二次检查的情况下发送出去。这就像播撒种子,相信雨水会浇灌它们。你尽了自己的责任,然后放手。
5.3、优缺点
确保数据持久性:半同步备份就像用一些强大的支柱和一些较弱的支柱建造一座桥。强大的支柱确保桥不会倒塌,而较弱的支柱则增加了一些灵活性。这种方法确保了最重要的部分是安全的,同时不会减慢整个过程。这是一种谨慎的方式。
对吞吐量的边界影响:但如果你想让桥非常坚固,或者非常灵活呢?半同步备份可能对这两者都不完美。它就像是一场谈判中的妥协。每个人都能得到一些东西,但没有人能得到所有东西。它可能会稍微减慢速度,或者可能不如你希望的那么安全。这是一种平衡的方法,这意味着需要做一些权衡。
六、选择合适的备份策略
6.1、需要考虑的因素
选择正确的备份策略就像为特殊场合选择合适的服装一样。您必须考虑天气、事件类型以及您感到舒适的环境。在计算机世界中,您需要考虑数据的重要性、访问数据的速度以及安全性等因素你需要。这是为了找到适合您具体情况的产品。
- 数据的关键性:某些数据极为重要,你希望它们始终安全,就如同家中的珍贵物品。而有些数据的重要性较低,比如临时文件。确定数据的重要性有助于你选择合适的备份策略。
- 一致性需求:在数据库中,保持数据一致性意味着确保所有数据的从节点都是最新和准确的。高一致性需求可能会指引你选择同步备份,而较低的一致性需求可能更适合异步备份。
- 系统吞吐量:吞吐量反映了系统在单位时间内能处理的数据量。高吞吐量需求可能会让你倾向于选择异步备份,因为它通常更快。
6.2、策略比较
同步备份、异步备份和半同步备份都有其优点和缺点。
- 同步备份就像一双坚固的徒步鞋,安全但有时可能较慢。
- 异步备份就像跑鞋,速度快但可能不那么保护性。
- 半同步备份就像休闲运动鞋,两者兼备。
理解这些差异有助于你为旅程选择合适的鞋子。
七、结论
7.1、关键点总结
选择合适的备份策略就像规划一次成功的旅行。你需要知道你的目的地,途中需要的东西,以及如何处理意外的突发情况。同步备份、异步备份和半同步备份,每种方式都有其独特的优点和缺点,就像不同类型的交通工具。理解它们有助于你为旅程选择合适的方式。
7.2、对系统设计的影响
你在备份策略上的选择会产生重大影响,就像为建筑选择正确的基础一样。如果选择得当,一切都会稳固并且运行顺畅。如果选择错误,你可能在未来遇到问题。这是一个需要深思熟虑和充分了解的决策。这关乎建设一个持久且能很好地发挥其功能的系统。
相关文章:

【系统架构】系统架构设计之数据同步策略
文章目录 一、介绍1.1、分布式系统中的数据同步定义1.2、为何数据同步如此关键1.3、数据同步策略简介 二、为什么需要数据同步2.1、提高系统可用性2.2、备份与灾难恢复2.3、提高性能2.4、考虑地理位置(如使用CDN) 三、同步备份3.1、定义和概述3.2、工作原…...

Linux内核学习笔记——ACPI命名空间
所有定义块都加载到单个命名空间中。命名空间 是由名称和路径标识的对象层次结构。 以下命名约定适用于 ACPI 中的对象名称 命名空间: 所有名称的长度均为 32 位。 名称的第一个字节必须是“A”-“Z”、“_”之一。 名称的每个剩余字节必须是“A”-“Z”、“0”之…...

使用 OpenCV Python 实现自动图像注释工具的详细步骤--附完整源码
注释是深度学习项目中最关键的部分。它是模型学习效果的决定因素。然而,这是非常乏味且耗时的。一种解决方案是使用自动图像注释工具,这大大缩短了时间。 本文是pyOpenAnnotate系列的一部分,其中包括以下内容。 1、使用 OpenCV 进行图像注释的路线图。 2、pyOpenAnnotate工…...

RunnerGo中WebSocket、Dubbo、TCP/IP三种协议接口测试详解
大家好,RunnerGo作为一款一站式测试平台不断为用户提供更好的使用体验,最近得知RunnerGo新增对,WebSocket、Dubbo、TCP/IP,三种协议API的测试支持,本篇文章跟大家分享一下使用方法。 WebSocket协议 WebSocket 是一种…...

【Java 动态数据统计图】动态数据统计思路案例(动态,排序,数组)一(112)
需求:: 有一个List<Map<String.Object>>,存储了某年某月的数据, 数据是根据用户查询条件进行显示的;所以查询的数据是动态的;需按月份统计每个年月数据出现的次数,并且按照月份排序࿱…...

kafka踩坑
问题:项目中用到kafka作为消息中间件,因为现在是开发阶段,试了一次没问题之后就没在管,今天又要测试kafka相关功能,发现消息发送者能够正常发送消息,但是消费者怎么也就收不到数据。然后经过各种百度进行了…...

让你专注于工作的电脑桌面日程提醒软件
在现代职场中,上班族们常常在繁忙的工作中会遇到各种各样的事情干扰。比如,当我们专注于完成重要的报告时,却又有同事来询问问题;在准备去会议事项时,手机却突然收到了一系列的短信和通知。这些干扰不仅浪费了我们的时…...

62页智慧产业园区数字化综合解决方案PPT
导读:原文《62页智慧产业园区数字化综合解决方案PPT》(获取来源见文尾),本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考。 喜欢文章,您可以关注评论转发本文&#…...

苹果开发者账号注册方法简明指南
注册苹果开发者账号的方法 在2020年以前,注册苹果开发者账号后,就可以生成证书。 但2020年后,因为注册苹果开发者账号需要使用Apple Developer app注册开发者账号,所以需要缴费才能创建ios证书了。 所以新政策出来后,…...

SQL-每日一题【1321. 餐馆营业额变化增长】
题目 表: Customer 你是餐馆的老板,现在你想分析一下可能的营业额变化增长(每天至少有一位顾客)。 计算以 7 天(某日期 该日期前的 6 天)为一个时间段的顾客消费平均值。average_amount 要 保留两位小数。 结果按 …...

PyCharm PyQt5 开发环境搭建
环境 python:3.6.x PyCharm:PyCharm 2019.3.5 (Community Edition) 安装PyQT5 pip install PyQt5 -i https://pypi.douban.com/simplepip install PyQt5-tools -i https://pypi.douban.com/simple配置PyCharm PyQtUIC Program :D:\Pytho…...

2023-08-17 Untiy进阶 C#知识补充8——C#中的日期与时间
文章目录 一、名词概念二、DateTime三、TimeSpan 一、名词概念 (一)格里高利历 格里高利历一般指公元,即公历纪年法。目前我们所说公历,就是格里高利历。 比如 2022 年就是从公元元年开始算起的两千二十二年。 …...

SPSS--如何使用分层分析以及分层分析案例分享
分层分析:将资料按某个或某些需要控制的变量的不同分类进行分层,然后再估计暴露因子与某结局变量之间关系的一种资料分析方法。 分层分析的最重要的用途是评估和控制混杂因子所致的混杂偏倚。通过按混杂因子分层,可使每层内的两个比较组在所控…...

时序数据库influxdb笔记
官方资料 https://docs.influxdata.com/influxdb/v2.7/install/?tLinux https://www.influxdata.com/influxdb/ 安装 1、linux平台下 1)下载 2)解压 3)添加账户( adduser influx) 4)设置目录权限 5…...

8月18日上课内容 Haproxy搭建Web群集
本章结构 课程大纲 Haproxy调度算法 常见的web集群调度器 目前常见的Web集群调度器分为软件和硬件软件 通常使用开源的LVS、Haproxy、Nginx 硬件一般使用比较多的是F5,也有很多人使用国内的一些产品,如梭子鱼、绿盟等 Haproxy应用分析 LVS在企业应用中…...

【高阶数据结构】红黑树详解
文章目录 前言1. 红黑树的概念及性质1.1 红黑树的概念1.2 红黑树的性质1.3 已经学了AVL树,为啥还要学红黑树 2. 红黑树结构的定义3. 插入(仅仅是插入过程)4. 插入结点之后根据情况进行相应调整4.1 cur为红,p为红,g为黑…...

树莓牌4B安装Centos8
准备工作 镜像:https://people.centos.org/pgreco/CentOS-Userland-8-stream-aarch64-RaspberryPI-Minimal-4/ 烧制工具:https://www.raspberrypi.com/software/ 初始化 将上述工具烧制好的SD卡插入树莓派,通电。通过网线将树莓派与电脑连…...

SQL Monitor Crack,PostgreSQL监控的传入复制图表
SQL Monitor Crack,PostgreSQL监控的传入复制图表 现在,您可以在从Estate页面导出的Microsoft Excel报告的摘要标题中看到UTC偏移量。 添加了PostgreSQL监控的传入复制图表。 Microsoft PowerShell API现在支持将使用New-SqlMonitorWindowsHost和New-SqlMonitorin…...

软件测试技术之单元测试—工程师 Style 的测试方法(3)
如何设计单元测试? 单元测试设计方法 单元测试用例,和普通测试用例的设计,没有太多不同,常见的就是等价类划分、边界值分析等。而测试用例的设计其实也是开发者应该掌握的基本技能。 等价类划分 把所有输入划分为若干分类&…...

Ubuntu中安装OpenSSL
文章目录 一、前期准备1.1 压缩包下载1.2 gcc, make等的安装二、安装配置 一、前期准备 1.1 压缩包下载 在安装openssl之前,我们需要下载对应的压缩包 https://www.openssl.org/source/openssl-3.0.1.tar.gz 此压缩包可以选择win上下载后解压再复制到本地虚拟机中…...

CW4-6A-S、CW4-10A-S、CW4-20A-S、CW4-30A-S螺栓式滤波器
CW3L2-3A-S、CW3L2-6A-S、CW3L2-10A-S、CW3L2-20A-S CW3-3A-S、CW3-6A-S、CW3-10A-S、CW3-20A-S、CW3-30A-S CW4EL2-3A-S、CW4EL2-6A-S、CW4EL2-10A-SCW4EL2-20A-S、CW4EL2-30A-S CW4E-3A-S、CW4E-6A-S、CW4E-10A-S、CW4E-20A-S、CW4E-30A-S CW4E-40A-S(001)、CW4E-50A-S(0…...

课程项目设计--项目设计--宿舍管理系统--vue+springboot完成项目--项目从零开始
写在前面: 本文是从项目设计到完成开始写的,本来这个项目基础功能是做完了的,但是之前时间紧张想从头做起了。之前一周写前端后端累死了. 设计是关键,这一篇主讲设计。可能后面会有修改,本人实力有限,学习的也是别人的…...

【Linux】Linux下常用搜索命令及其常用选项小结
0x00 前言 版本信息:Ubuntu 18.04.6 LTS 最后更新日期:2023.8.18 0x01 Linux下常用搜索命令及其常用选项小结 1.find (1)find path -name filename :在指定目录path查找名为filename 文件,文件名可用*匹…...

web APIs-练习五
5秒自动关闭的广告: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"…...

MySQL——基础——外连接
一、外连接查询语法:(实际开发中,左外连接的使用频率要高于右外连接) 左外连接 SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件...; 相当于查询表1(左表)的所有数据 包含 表1和表2交集部分的数据 右外连接 SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN …...

spring boot 实现Redisson分布式锁及其读写锁
分布式锁,就是控制分布式系统中不同进程共同访问同一共享资源的一种锁的实现。 1、引入依赖 <dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.15.5</versio…...

java-IONIO
一、JAVA IO 1.1. 阻塞 IO 模型 最传统的一种 IO 模型,即在读写数据过程中会发生阻塞现象。当用户线程发出 IO 请求之后,内 核会去查看数据是否就绪,如果没有就绪就会等待数据就绪,而用户线程就会处于阻塞状态,用户线…...

Python学习笔记_基础篇(十一)_socket编程
python 线程与进程简介 进程与线程的历史 我们都知道计算机是由硬件和软件组成的。硬件中的CPU是计算机的核心,它承担计算机的所有任务。 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配、任务的调度。 程序是运行…...

C#8.0本质论第三章--更多数据类型
C#8.0本质论第三章–更多数据类型 3.1类型的划分 一个类型要么是值类型,要么是引用类型。区别在于拷贝方式:值类型数据总是拷贝值;引用类型的数据总是拷贝引用。 3.1.1值类型 3.1.2引用类型 引用类型的变量存储对数据存储位置的引用。 3.…...

浅拷贝与深拷贝
作者简介: zoro-1,目前大一,正在学习Java,数据结构等 作者主页: zoro-1的主页 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 浅拷贝与深拷贝 浅拷贝浅拷贝定义浅拷贝代码演示浅…...