当前位置: 首页 > news >正文

《分布式技术原理与算法解析》学习笔记Day23

分布式数据复制

我们在进行分布式数据存储设计时,通常会考虑对数据进行备份,以提高数据的可用性和可靠性,“数据复制技术”就是实现数据备份的关键技术。

什么是数据复制技术?

在分布式数据库系统中,通常会设置主备数据库,当主数据库出现故障时,备数据库可以替代主数据库进行后续的工作,从而保证业务的正常运行。

数据复制技术就是如何让主备数据库保持数据一致的技术。

数据复制原理和应用

数据的一致性,是指不同节点上的数据要保持一致。对于分布式存储系统中的数据复制技术来讲,也需要在一致性和可用性之间做出权衡。

从一致性和可用性来看,数据复制技术一般分为三类:

  • 比较注重一致性,例如同步复制技术
  • 比较注重可用性,例如异步复制技术
  • 平衡一致性和可用性,例如半同步复制技术

同步复制技术

同步复制技术是指当用户请求更新数据时,主数据库必须要同步到备数据库之后才可以给用户返回结果,即如果主数据库没有同步到备数据库,用户的更新操作会一直阻塞。

这种方式保证了数据的强一致性,但是牺牲了系统的可用性。

在一个分布式数据库系统中,有两个节点,分别作为主节点和备节点。通常情况下,两个节点都可以接收用户读请求,然后将本节点的数据及时返回给用户,也就是说读请求响应比较快。如果用户发送的事写请求,写操作必须由主节点进行,即使用户将写请求发送到备节点,备节点也会将请求转发给主节点,因此写请求要比读请求慢一些。

同步复制技术要求主数据库等待所有备数据库都操作成功才可以响应用户,性能不是很好,影响用户体验。因此同步复制技术适用于分布式数据库主备场景或者对数据一致性有严格要求的场合。

异步复制技术

异步复制技术是指当用户请求更新数据时,主数据库处理完请求后可以直接给用户响应,而不必等到备数据库完成同步,即备数据库会异步进行数据同步,用户的更新操作不会因为备数据库未完成数据同步而导致阻塞。

这种方式保证了系统的可用性,但是牺牲了数据的一致性。

分布式数据库主备模式场景下,如果对数据一致性要求不高,也可以采用异步复制方法。

MySQL集群默认采用的数据复制模式就是异步复制技术,主要流程如下:

  1. 主数据库完成写操作后,可以直接给用户回复成功,将写操作写入binary log中,binary log中记录着主数据库执行的所有更新操作,以便备数据库获取更新信息。
  2. 备数据库启动一个IO线程专门读取binary log中的内容然后写入relay log中。
  3. 备数据库启动一个SQL线程会定时检查relay log中的内容,如果发现有新内容则会立即在备数据库中执行,从而实现数据的一致。

异步复制技术一般会应用在对用户请求响应时延要求很高的场景。

半同步复制技术

半同步复制技术的核心是用户发出写请求后,主数据库会执行写操作,并给备数据库发送同步请求,但主数据库不用等待所有备份数据库回复数据同步成功便可以响应用户,也就是说主数据库可以等待一部分备数据库同步完成后响应用户写操作执行成功。

半同步复制技术通常由两种方式:

  1. 当主数据库收到多个备数据库中某一个回复数据同步成功后,便可以给用户响应写操作完成。
  2. 当主数据库收到超过一半节点回复数据更新成功后,再给用户响应写操作成功。

我们之前谈过的ZooKeeper集群符合CP特征,它采用的数据复制技术就是上述第二种半同步复制方案,在ZooKeeper集群中,写请求必须由Leader节点进行处理,每次写请求,Leader会给Follower发Proposal,等待多数节点同意后写操作才可成功。通过这样的方式,ZooKeeper实现了一致性。

数据复制技术选型

多数的分布式存储系统可以通过配置来选择不同的数据复制技术,例如

  • MySQL的数据库集群,支持全同步复制、异步复制和半同步复制三种模式。
  • Oracle在数据复制方面提供了最大保护模式(半同步复制技术的第一种方式)、最大性能模式(异步复制技术)和最大可用性模式(平时采用最大保护模式,主备发生网络故障时采用最大性能模式,这样在一致性和可用性之间做了权衡)。

三种不同的数据复制技术的详细比较如下。
在这里插入图片描述

相关文章:

《分布式技术原理与算法解析》学习笔记Day23

分布式数据复制 我们在进行分布式数据存储设计时,通常会考虑对数据进行备份,以提高数据的可用性和可靠性,“数据复制技术”就是实现数据备份的关键技术。 什么是数据复制技术? 在分布式数据库系统中,通常会设置主备…...

毕业设计 基于51单片机的手机蓝牙控制8位LED灯亮灭设计

基于51单片机的手机蓝牙控制8位LED灯亮灭设计1、项目简介1.1 系统构成1.2 系统功能2、部分电路设计2.1 STC89C52单片机核心系统电路设计2.2 LED电路设计2.3 蓝牙模块电路设计3、部分代码展示3.1 定时器初始化以及中断处理3.2 串口初始化3.3 串口中断处理1、项目简介 选题指导&…...

一起Talk Android吧(第五百零八回:多层布局功能)

文章目录功能介绍使用方法示例代码各位看官们大家好,上一回中咱们说的例子是"图片滤镜ImageFilterView",这一回中咱们说的例子是" 多层布局功能"。闲话休提,言归正转, 让我们一起Talk Android吧!功能介绍 我…...

丁小喜の兵器谱(学生管理系统)

我的第一个独立看需求完成项目,虽然很简单(笑)建立一个可以增加,修改,删除,展示学生信息的系统首先是一个界面,让你决定进行哪个操作1.2.3.4.5分别对应不同的操作,switch与这一操作完…...

linux:字符串拷贝的五种方法:使用指针下标,指针变量加偏移量,指针变量自加等

字符串数组名做函数形参&#xff0c;会退化正指针变量&#xff0c;需要使用指针变量操作字符串 代码&#xff1a; #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <s…...

cesium常用方法汇集(工具篇)

1.Scene.prototype.pickPositionWorldCoordinates 根据屏幕坐标获取世界坐标 2&#xff0c;Scene.prototype.pickPosition 根据屏幕坐标获取世界坐标 3&#xff0c;Scene.prototype.drillPick 通过屏幕坐标拾取多个对象 4&#xff0c;Scene.prototype.pickFromRay 通过射线拾…...

分布式一致性与共识算法(一)

这里写目录标题是什么ACIDCAP组合一致性概念共识为什么需要共识算法会如何发展列举Paxos算法ZAB&#xff08;Zookeeper Atomic Broadcast&#xff09;协议Raft 算法参考引用是什么 从实现效果上来说&#xff0c;很多人或多或少都了解或者设计过具有强一致性的系统。但是&#…...

C++---最长上升子序列模型---怪盗基德的滑翔翼(每日一道算法2023.2.27)

注意事项&#xff1a; 本题为"线性dp—最长上升子序列的长度"的扩展题&#xff0c;所以dp思路这里就不再赘述。 题目&#xff1a; 怪盗基德是一个充满传奇色彩的怪盗&#xff0c;专门以珠宝为目标的超级盗窃犯。 而他最为突出的地方&#xff0c;就是他每次都能逃脱中…...

Python 之 Pandas 文件操作和读取 CSV 参数详解

文章目录一、Pandas 读取文件二、CSV 文件读取1. 基本参数2. 通用解析参数3. 空值处理相关参数4. 时间处理相关参数5. 分块读入相关参数一、Pandas 读取文件 当使用 Pandas 做数据分析的时&#xff0c;需要读取事先准备好的数据集&#xff0c;这是做数据分析的第一步。Panda 提…...

微服务的异步通信技术RabbitMQ

文章目录前言1.WorkQueue&#xff08;工作队列&#xff09;消息预取机制2.Publish&Subscribe&#xff08;发布-订阅&#xff09;1.Fanout&#xff08;广播&#xff09;2.DirectExchange&#xff08;路由&#xff09;3.TopicExchange&#xff08;话题&#xff09;MQ的优点前…...

Word处理控件Aspose.Words功能演示:使用 C++ 在 Word (DOC/DOCX) 中添加或删除水印

Aspose.Words 是一种高级Word文档处理API&#xff0c;用于执行各种文档管理和操作任务。API支持生成&#xff0c;修改&#xff0c;转换&#xff0c;呈现和打印文档&#xff0c;而无需在跨平台应用程序中直接使用Microsoft Word。此外&#xff0c; Aspose API支持流行文件格式处…...

chatGPT模型原理

文章目录简介BertGPT 初代GPT-2GPT-3chatGPT开源ChatGPT简介 openai 的 GPT 大模型的发展历程。 Bert 2018年&#xff0c;自然语言处理 NLP 领域也步入了 LLM 时代&#xff0c;谷歌出品的 Bert 模型横空出世&#xff0c;碾压了以往的所有模型&#xff0c;直接在各种NLP的建模…...

四、阻塞队列

文章目录基础概念生产者消费者概念JUC阻塞队列的存取方法ArrayBlockingQueueArrayBlockingQueue的基本使用生产者方法实现原理ArrayBlockingQueue的常见属性add方法实现offer方法实现offer(time,unit)方法put方法消费者方法实现原理remove方法poll方法poll(time,unit)方法take方…...

企业电子招投标采购系统源码之登录页面

​ 信息数智化招采系统 服务框架&#xff1a;Spring Cloud、Spring Boot2、Mybatis、OAuth2、Security 前端架构&#xff1a;VUE、Uniapp、Layui、Bootstrap、H5、CSS3 涉及技术&#xff1a;Eureka、Config、Zuul、OAuth2、Security、OSS、Turbine、Zipkin、Feign、Monitor、…...

SQL零基础入门学习(十三)

上一篇&#xff08;SQL零基础入门学习&#xff08;十二&#xff09;&#xff09; SQL 视图&#xff08;Views&#xff09; 视图是可视化的表。 SQL CREATE VIEW 语句 在 SQL 中&#xff0c;视图是基于 SQL 语句的结果集的可视化的表。 视图包含行和列&#xff0c;就像一个…...

Java实现简单KV数据库

用Java实现一个简单的KV数据库 开发思路&#xff1a; 用map存储数据&#xff0c;再用一个List记录操作日志&#xff0c;开一个新线程将List中的操作写入日志文件中&#xff0c;再开一个线程用于网络IO服务接收客户端的命令&#xff0c;再启动时检查日志&#xff0c;如果有数据就…...

【Spark分布式内存计算框架——Spark Streaming】5. DStream(上)

3. DStream SparkStreaming模块将流式数据封装的数据结构&#xff1a;DStream&#xff08;Discretized Stream&#xff0c;离散化数据流&#xff0c;连续不断的数据流&#xff09;&#xff0c;代表持续性的数据流和经过各种Spark算子操作后的结果数据流。 3.1 DStream 是什么…...

Spring系列-9 Async注解使用与原理

背景&#xff1a; 本文作为Spring系列的第九篇&#xff0c;介绍Async注解的使用、注意事项和实现原理&#xff0c;原理部分会结合Spring框架代码进行。 本文可以和Spring系列-8 AOP原理进行比较阅读 1.使用方式 Async一般注解在方法上&#xff0c;用于实现方法的异步&#xf…...

Python自动化测试实战篇(6)用PO分层模式及思想,优化unittest+ddt+yaml+request登录接口自动化测试

这些是之前的文章&#xff0c;里面有一些基础的知识点在前面由于前面已经有写过&#xff0c;所以这一篇就不再详细对之前的内容进行描述 Python自动化测试实战篇&#xff08;1&#xff09;读取xlsx中账户密码&#xff0c;unittest框架实现通过requests接口post登录网站请求&…...

Linux 进程:父子进程

目录一、了解子进程二、创建子进程1.创建子进程2.区分父子进程三、理解子进程四、创建子进程的意义进程就是运行中的应用程序&#xff0c;如果一个程序较为庞大&#xff0c;我们可以给这个程序创建多个进程&#xff0c;每个进程负责一部分代码的运行。 A进程如果创建了B进程&am…...

Unity 之 实现读取代码写进Word文档功能实现 -- 软著脚本生成工具

Unity 之 实现读取代码写进Word文档功能前言一&#xff0c;实现步骤1.1 逻辑梳理1.2 用到工具二&#xff0c;实现读写文件2.1 读取目录相关2.2 读写文件三&#xff0c;编辑器拓展3.1 编辑器拓展介绍3.2 实现界面可视化四&#xff0c;源码分享4.1 工具目录4.2 完整代码前言 之所…...

Typora图床配置:Typora + PicGo + 阿里云OSS

文章目录一、前景提要二、相关链接三、搭建步骤1. 购买阿里云对象存储OSS2. 对象存储OSS&#xff1a;创建Bucket3. 阿里云&#xff1a;添加OSS访问用户及权限4. 安装Typora5. 配置PicGo方法一&#xff1a;使用PicGo-Core (Command line)方法二&#xff1a;使用PicGo(app)6. 最后…...

二进制搭建以太坊2.0节点-2023最新详细版文档

文章目录 一、配置 JWT 认证二、部署执行节点geth2.1 下载geth二进制文件2.2 geth节点启动三、部署共识节点Prysm3.1 下载Prysm脚本3.2 Prysm容器生成四、检查节点是否同步完成4.1 检查geth执行节点4.2 检查prysm共识节点4.3 geth常用命令五、节点同步详细说明5.1 启动时日志5.…...

如何简化跨网络安全域的文件发送流程,大幅降低IT人员工作量?

为什么要做安全域的隔离&#xff1f; 随着企业数字化转型的逐步深入&#xff0c;企业投入了大量资源进行信息系统建设&#xff0c;信息化程度日益提升。在这一过程中&#xff0c;企业也越来越重视核心数据资产的保护&#xff0c;数据资产的安全防护成为企业面临的重大挑战。 …...

带你深入了解c语言指针后续

前言 &#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏: &#x1f354;&#x1f35f;&#x1f32f; c语言进阶 &#x1f511;个人信条: &#x1f335;知行合一 &#x1f349;本篇简介:>:介绍c语言中有关指针更深层的知识. 金句分享: ✨在该…...

借助Intune无感知开启Bitlocker

希望使用 Intune 部署 BitLocker&#xff0c;但不知道从哪里开始&#xff1f;这是人们最开始使用 Intune 时最常见的问题之一。在本博客中&#xff0c;你将了解有关使用 Intune 管理 BitLocker 的所有信息&#xff0c;包括建议的设置、BitLocker CSP 在客户端上的工作方式&…...

零基础该如何转行Python工程师?学习路线是什么?

最近1年的主要学习时间&#xff0c;都投资到了 python 数据分析和数据挖掘上面来了&#xff0c;虽然经验并不是十分丰富&#xff0c;但希望也能把自己的经验分享下&#xff0c;最近也好多朋友给我留言&#xff0c;和我聊天&#xff0c;问我python该如何学习&#xff0c;才能少走…...

Go项目(商品微服务-1)

文章目录简介建表protohandler商品小结简介 商品微服务主要在于表的设计&#xff0c;建哪些表&#xff1f;表之间的关系是怎样的&#xff1f; 主要代码就是 CURD表和字段的设计是一个比较有挑战性的工作&#xff0c;比较难说清楚&#xff0c;也需要经验的积累&#xff0c;这里…...

机器学习——集成学习

引言 集成学习&#xff1a;让机器学习效果更好&#xff0c;单个不行&#xff0c;群殴走起。 分类 1. Bagging:训练多个分类器取平均&#xff08;m代表树的个数&#xff09;。 2.Boosting&#xff08;提升算法&#xff09;:从弱学习器开始加&#xff0c;通过加权来进行训练。…...

VS编译系统 实用调试技巧

目录什么是bug?调试是什么&#xff1f;有多重要&#xff1f;debug和release的介绍windows环境调试介绍、一些调试实例如何写出&#xff08;易于调试&#xff09;的代码编程常见的错误什么是bug?其实bug在英文翻译中有表示臭虫的含义&#xff0c;因为第一次被发现的导致计算机…...

网站建设典型发言/怎么做免费的网站推广

2019独角兽企业重金招聘Python工程师标准>>> 当把所有牵涉到的都改为utf-8时&#xff0c;依然有乱码。后来在网站上求助&#xff0c;滄海一夢 给出了这个解决方案&#xff1a;将表单提交方式由get改为post&#xff0c;果然成功。谢过&#xff01; 解决问题后&#x…...

美工外包网站/潍坊seo计费

::selection{ background: orange; color: white;} ::-moz-selection{ background: orange; color: white;} &#xff08;//Firefox浏览器&#xff09;转载于:https://www.cnblogs.com/SunnyYYN/p/7279577.html...

南京十大软件公司排名/淘宝关键词优化技巧教程

前言&#xff1a;医院的视频监控系统如何设计呢&#xff1f;需要考虑哪些方面呢&#xff1f;如何规划呢&#xff1f;今天分享一下医院项目视频监控系统建设思路&#xff0c;仅供参考。正文&#xff1a;一、系统规划系统要求建立一个集数字视频图像采集、传输、处理、控制、指挥…...

临沂网站推广goldball/河源市企业网站seo价格

对于一些数据我们需要进行加密&#xff0c;下面介绍加密的一种方法 前端vue对密码进行加密 import CryptoJS from crypto-js// 默认的 KEY 与 iv 如果没有给 const KEY CryptoJS.enc.Utf8.parse("1234567890123456"); const IV CryptoJS.enc.Utf8.parse(1234567890…...

做兼职的翻译网站吗/广告推销

本期教程我们将和小伙伴们一起研究如何使用计算机视觉和图像处理技术来检测汽车在行驶中时汽车是否在改变车道&#xff01;大家一定听说过使用OpenCV 的haar级联文件可以检测到面部、眼睛等&#xff0c;但是如果目标是汽车&#xff0c;公共汽车呢&#xff1f; 1.数据集本教程将…...

教育咨询网站模板/优化网站seo方案

本文实例讲述了Python实现将16进制字符串转化为ascii字符的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a; 字符串456e633064316e675f31735f66336e&#xff0c;通过Python&#xff0c;按照两个字符&#xff0c;例如45,6e,63形式变成ascii码格式&#xff0c;输出a…...