数据复制:构建大规模分布式系统的关键组成部分

news2024/12/30 1:52:01

数据复制对于构建可靠的大规模分布式系统至关重要。在本期中,我们将探讨常见的复制策略以及选择合适策略的关键因素。

在本期中,我们将以数据库为例进行讨论。请注意,复制不仅适用于数据库,还适用于缓存服务器(如Redis)以及用于关键内存数据结构的应用程序服务器。

那么,什么是复制?它是一种将数据从一个地方复制到另一个地方的方法。我们使用它来确保我们的数据在需要时何地可用。它帮助我们提高数据的耐久性和可用性,减少延迟,增加带宽和吞吐量。

4ee9ec91c2d2527348e6e3d2dafe4dc8.png
  但选择复制策略并不总是一帆风顺的。有不同的策略,每种策略都有其自身的优点和缺点。某些策略可能更适用于特定用例,而其他策略可能更适用于不同的情况。

在本期中,我们将探讨三种主要的复制策略:Leader-Follower、Multi-Leader 和 Leaderless。我们将详细解释每种策略是什么,它们是如何工作的,以及它们在哪些情况下最有效。我们将讨论每种策略所涉及的权衡,以便我们可以明智地选择最适合我们系统的策略。

那么,让我们一起深入探讨数据复制的世界吧。

复制简介

让我们高层次地考虑一下为什么需要复制。正如我们之前提到的,我们将始终以数据库为例,但这同样适用于其他类型的数据源。

提高耐久性

提高耐久性可能是数据复制最重要的原因。当单个数据库服务器发生故障时,可能会导致灾难性的数据丢失和停机。如果数据复制到其他数据库服务器,即使一个服务器宕机,数据也会得以保留。某些复制策略,如异步复制,可能仍然会导致小量数据丢失,但总体上耐久性得到了极大的改善。

d6f22972aae3e1ddaa32a25f255a611f.png
 

您可能会想:常规数据备份难道不足以确保耐久性吗?备份当然可以在硬件故障等灾难发生后恢复数据。但仅依靠备份存在耐久性的局限性。备份是定期的,因此在备份周期之间可能会发生一些数据丢失。从备份恢复数据也很慢,会导致停机。与备份相结合,复制通过消除(或大大减少)数据丢失窗口并允许更快的故障切换来提供额外的耐久性。备份和复制共同提供了数据恢复和最小化停机。

提高可用性

复制数据的另一个关键原因是提高系统的整体可用性和弹性。当一个数据库服务器下线或负载过高时,保持应用程序平稳运行可能会很具挑战性。

简单地将流量重定向到新服务器并不是一件简单的事情。新节点需要已经有几乎相同的数据副本,以便快速接管。在维护连续的应用程序和用户运行时间的同时,在后台切换数据库需要仔细的故障切换编排。

复制通过保持备用服务器具备最新的数据副本来实现无缝故障切换。应用程序可以在出现问题时将流量重定向到副本,最小化停机时间。设计良好的系统通过监控、负载平衡和复制配置自动处理重定向和故障恢复。

当然,复制也有自己的开销和复杂性。但如果没有复制,单个服务器故障可能意味着长时间的停机。复制可以在发生故障时保持可用性。

814a02c86f2fd2a733b716c32f1ae91e.png
 

增加吞吐量

在多个数据库实例之间复制数据还可以通过将负载分布在节点之间来增加整个系统的吞吐量和可伸缩性。

对于单个数据库服务器,存在性能下降之前它能够处理的并发读写的最大阈值。通过复制到

多个服务器,应用程序请求可以在副本之间分布。更多的副本意味着处理负载的能力更强。

这种请求的分片分发工作负载。它允许整体系统维持比单个服务器更高得多的吞吐量。可以根据需要添加额外的副本来扩展容量。

复制本身会有相关的开销,如果不妥善管理,可能会成为瓶颈。诸如节点间网络带宽、复制滞后和写协调等因素都应该受到监控。

但适当的复制配置允许横向扩展读写容量。这使得在单个服务器的限制之外实现了大规模的聚合吞吐量和工作负载可伸缩性。

e61ef1fbdb71f5468eb567d2b32ce790.png
 

降低延迟

数据复制还可以通过将数据放置在用户附近来降低延迟。例如,将数据库复制到多个地理区域将数据副本带到本地用户附近。与单一中心化数据库位置相比,这减少了数据必须传输的物理网络距离。

较短的网络距离意味着较低的传输延迟。因此,当将请求路由到附近的复制实例时,用户的读写请求会看到更快的响应时间,而不是路由到远处的实例。多区域复制使本地化处理成为可能,避免了跨国或跨洲际网络路由的高延迟。

请注意,将副本分布在各个区域会引入复杂性,如副本同步、一致性和与并发多地点更新的冲突解决。一致性模型、冲突解决逻辑和复制协议等解决方案有助于管理这种复杂性。

在适用的情况下,多区域复制通过本地化处理为地理分布的用户和工作负载提供了主要的延迟改进。较低的延迟还提高了用户体验和生产力。

8b90bdecc41bf6429b581658624197dd.png
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/989367.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

探索Apache Hive:融合专业性、趣味性和吸引力的数据库操作奇幻之旅

文章目录 版权声明一 数据库操作二 Hive数据表操作2.1 表操作语法和数据类型2.2 Hive表分类2.3 内部表Vs外部表2.4 内部表操作2.4.1 创建内部表2.4.2 其他创建内部表的形式2.4.3 数据分隔符2.4.4 自定义分隔符2.4.5 删除内部表 2.5 外部表操作2.5.1 创建外部表2.5.2 操作演示2.…

BMS电池管理系统——电芯需求数据(三)

BMS电池管理系统 文章目录 BMS电池管理系统前言一、有什么基础数据二、基础数据分析1.充放电的截至电压2.SOC-OCV关系表3.充放电电流限制表4.充放电容量特性5.自放电率 总结 前言 在新能源产业中电芯的开发也占有很大部分,下面我们就来看一下电芯的需求数据有哪些 …

知名农业企业-九三食品选择泛微京桥通构建全程数字化采购管理

九三食品股份有限公司是北大荒集团旗下九三粮油工业集团有限公司的控股子公司,作为九三集团大豆精深加工生产及研发基地,九三食品公司可生产非转基因“九三”牌大豆油等植物油、食品添加剂、胶囊保健品、精油类产品、食用豆粕、豆饼粉和其它产品等七大类…

yo!这里是进程控制

目录 前言 进程创建 fork()函数 写时拷贝 进程终止 退出场景 退出方法 进程等待 等待原因 等待方法 1.wait函数 2.waitpid函数 等待结果(status介绍) 进程替换 替换原理 替换函数 进程替换例子 shell简易实现 后记 前言 学习完操作…

【更新至2022年】2000-2022年全国31省市以2000年为基期的实际GDP、名义GDP、GDP平减指数数据(含原始数据+计算过程+计算结果)

2000-2022年31省市名义GDP 实际GDP GDP平减指数 1、时间:2000-2022 2、范围:31省市 3、来源:GJ统计J和统计NJ 4、指标:名义GDP、地区生产总值指数(上年100)、实际GDP(以2000年为基期&#x…

【光伏系统】将电流从直流转换为交流电的太阳能逆变器、太阳能跟踪系统来提高系统的整体性能及集成电池解决方案(Simulink仿真)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

(高阶)Redis 7 第10讲 单线程 与 多线程 入门篇

面试题 1.Redis 是单线程还是多线程 最早的版本3.x是单线程。 版本4.x,严格意义不是单线程。负责处理客户端请求的线程是单线程,开始加入异步删除。 6.0.x版本后明确使用全新的多线程来解决问题 2.说说IO多路复用3.Redis 为什么快IO多路复用+epoll函…

基于SSM的乡镇自来水收费系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

【leetcode 力扣刷题】回文串相关题目(KMP、动态规划)

回文串相关题目 5. 最长回文子串动态规划中心扩展算法 214. 最短回文串336. 回文对 5. 最长回文子串 题目链接:5. 最长回文子串 题目内容: 题目就是要我们找s中的回文子串,还要是最长的。其实想想,暴力求解也行……就是遍历所有的…

系统移植MakefileREADME文件分析

Makefile # 指定交叉编译工具链前缀变量 CROSS_COMPILE arm-linux-gnueabihf- #指定文件名字变量 NAME interface ## #-g:编译时添加gdb调试信息 -marm: 将程序编译生成arm指令集 -Wall:编译时显示所有警告信息 #-O0:编译时添加优化等级 -O0:不优化 -O1:一级优化 #-f…

zabbix配置钉钉告警、和故障自愈、监控java

文章目录 1.配置钉钉告警server 配置web界面创建媒介给用户添加媒介测试告警 实现故障自愈功能监控Javazabbix server 安装java gateway配置 Zabbix Server 支持 Java gateway使用系统内置模板监控 tomcat 主机 1.配置钉钉告警 server 配置 钉钉告警python脚本 脚本1 cd /…

实相融、云启未来,智慧公厕让城市生活更美好

现代社会,随着科技的不断发展,人们对于城市生活的要求也在不断提升。在这个过程中,智慧公厕作为城市基础设施中的重要组成部分,正在发挥着越来越重要的作用。通过数字化、云管理、人工智能等未来的科技方式,智慧公厕为…

2024字节跳动校招面试真题汇总及其解答(一)

1. 【算法题】重排链表 给定一个单链表 L 的头节点 head ,单链表 L 表示为: L0 → L1 → … → Ln - 1 → Ln请将其重新排列后变为: L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … 不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例 1: 输入:hea…

嵌入式Linux驱动开发(同步与互斥专题)(二)

一、自旋锁spinlock的实现 自旋锁,顾名思义:自己在原地打转,等待资源可用,一旦可用就上锁霸占它。 ① 原地打转的是CPU x,以后CPU y会解锁:这涉及多个CPU,适用于SMP系统; ② 对于单…

【Vue】Router路由无法跳转问题整理

问题集 整理了部分Vue Router路由无法跳转问题: 顶层router-view只能被顶层路由配置内容使用:此问题异常表现在路由跳转但页面不变子路由跳转必需父路由对应的组件中存在router-view:此问题异常表现在路由跳转但页面不变 子路由配置路径会自…

uniapp项目实践总结(十三)封装文件操作方法

导语:在日常 APP 开发过程中,经常要进行文件的保存、读取列表以及查看和删除文件等操作,接下来就看一下具体的方法。 目录 原理分析方法实现实战演练案例展示 原理分析 主要是以下 API。 uni.saveFile:保存文件到本地缓存列表…

处理流程设计-系统设计-人机界面设计

处理流程设计-系统设计-人机界面设计 流程表示工具(重点) 流程表示工具(重点) 数据流图也是一种 IPO 图 NS图和PAD图

为什么说电子元器件采购如果不够专业就容易上当受骗

电子元器件采购如果不够专业就容易上当受骗的原因有多方面,主要包括以下几点: 众多供应商和产品:电子元器件市场涉及众多供应商和各种不同的产品。如果采购人员不具备足够的专业知识和经验,可能会难以识别哪些供应商和产品是可信赖…

flink 写入数据到 kafka 后,数据过一段时间自动删除

版本 flink 1.16.0kafka 2.3 流程描述: flink利用KafkaSource,读取kafka的数据,然后经过一系列的处理,通过KafkaSink,采用 EXACTLY_ONCE 的模式,将处理后的数据再写入到新的topic中。 问题描述&#xff1…

【SpringMVC]获取参数的六种方式

目录 1.通过ServletAPI获取 2.通过控制器方法的形参获取 3.RequestParam:将请求参数和控制器方法的形参绑定 4.RequestHeader:将请求头信息与控制器方法的形参的值进行绑定 5. CookieValue:将cookie数据和控制器方法的形参绑定 Cookie&…