分布式存储系统中一致性与可用性核心实战

news2024/11/19 10:32:12

在这里插入图片描述

《高并发系统实战派》-- 你值得拥有

文章目录

    • 副本的喜与忧
    • 什么是一致性和可用性?
    • 一致性与可用性的较量
    • 如何有效权衡,提高系统性能和稳定性?
    • 带入实际场景
      • 场景案例
      • CAP + BASE 双轮指导
      • CAP指导
      • BASE指导

副本的喜与忧

我们要知道,无论技术如何发展,要想保证系统的高可用,其核心最本质的方法就是 “冗余”。冗余,就是为我们的系统多创建几个副本,来增加系统的可靠性和容错性。
在这里插入图片描述

在分布式存储系统中使用数据副本具备以下几个优点:

  1. 提高系统的可用性:通过使用数据副本,系统可以在某些节点发生故障或不可用的情况下继续提供服务。当一个节点失败时,可以从其他副本中获取数据,确保数据的可访问性和系统的可用性。这对于需要高可用性的业务非常关键。
  2. 提升读取性能:拥有多个副本意味着可以同时从不同的节点读取数据。这种负载均衡和数据并行性可以显著提高读取性能。用户可以从最近的副本读取数据,减少延迟和提高响应速度。
  3. 增加容错性:数据副本在系统中起到冗余备份的作用,当某个副本出现故障或无法访问时,仍然可以通过其他副本进行数据访问。这提高了系统的容错性和可靠性,保证了数据不会因为节点故障而丢失。
  4. 实现地理分布和跨数据中心容灾:通过将数据副本分布在不同的地理位置或数据中心,可以实现地理级别的容灾和数据局部性。这样,即使发生整个数据中心的故障,仍然可以从其他地方的副本中获取数据,并且保持业务的连续性。

然而,使用副本也有一些代价和挑战:

首先是存储开销,每个副本都需要占用存储空间。随着副本数量的增加,系统所需的存储空间也相应增加。

其次是数据一致性的问题,当进行写操作时,需要确保所有副本的数据是一致的,这涉及到数据同步和复制的问题。同时,副本之间的同步也会导致网络延迟增加,进而影响系统的性能。

什么是一致性和可用性?

我们在分布式存储系统中需要权衡的两个关键概念是一致性可用性。一致性指的是多个副本之间的数据保持一致,无论是读取还是写入操作。而可用性则表示系统能够在任何时候都正常工作,为用户提供服务。一致性和可用性之间存在着一种牺牲关系,即在追求高一致性的同时,可能会牺牲一定的可用性;反之,在追求高可用性的同时,可能会牺牲一定的一致性。

所以,在分布式存储系统中,我们需要考虑以下问题:

  • 如何在多个副本之间保持数据的一致性;
  • 如何处理副本之间的同步和复制问题;
  • 如何解决一致性和可用性之间的权衡问题。

一致性与可用性的较量

为解决这些问题,我们可以使用不同的一致性模型和协议,例如强一致性和最终一致性,以及相应的复制和同步策略。在具体的实践中,我们可以根据系统需求和性能要求,选择适合的一致性与可用性方案,并通过故障处理和容错机制来提高系统的可用性和容错性。

分布式存储系统中的一致性和可用性之间的较量是一个复杂而又关键的问题。具体而言,我们需要考虑以下几个因素:

  1. 数据的同步与复制
    在一个分布式系统中,数据通常会以多个副本的形式存储在不同的节点上。为了保持一致性,我们需要确保这些副本之间的数据是同步的。数据的同步可以通过同步复制和异步复制两种方式实现。同步复制要求在进行写操作时,必须将数据写入所有的副本之后才返回成功。这保证了副本之间的数据一致性,但也影响了系统的可用性。而异步复制允许在进行写操作时,只需要写入一个副本即可返回成功,然后再异步地将数据复制到其他副本。这样可以提高系统的可用性,但也可能导致副本之间的数据不一致。
    在这里插入图片描述

在同步复制架构中,所有的写操作必须在主节点(Master Node)上完成,并且主节点会将写操作同步到其他节点。读操作可以在任意节点上进行。写操作在主节点完成之前不能返回成功,保证了所有节点之间的数据一致性
在这里插入图片描述

在异步复制架构中,所有的写操作只需要在主节点上完成,并且主节点会将写操作异步地复制到其他节点。写操作在主节点成功完成后即可返回成功,不必等待其他节点的确认。这样可以提高系统的可用性和性能,但可能会导致副本之间存在一段时间的数据不一致性

  1. 数据一致性的模型与协议
    在分布式系统中,我们可以采用不同的一致性模型和协议来满足不同的需求。最常用的一致性模型包括强一致性、最终一致性和读写一致性等。
  • 强一致性要求在进行写操作后,立即对所有副本可见,保证了一致性,但可能影响可用性。
  • 最终一致性则允许副本之间存在一段时间的不一致,但最终会达到一致状态。
  • 读写一致性则允许在进行读操作时,获得某个时间点之前的一致性数据。

不同的一致性协议如Paxos和Raft等也可以用于实现不同的一致性模型,并在一致性和可用性之间进行权衡。

Write
Acknowledgement
Read
Response
Replicate
Replicate
Replicate
Store Data
Store Data
Store Data
Respond with Data
Client
Master Node
Node 1
Node 2
Node 3
Data Storage

上图展示强一致性示意:

  • 客户端通过向主节点发送写操作请求(Write)。

  • 主节点将写操作复制(Replicate)到所有的副本节点。

  • 副本节点将收到的数据存储(Store Data)并向主节点发送响应。

  • 主节点在收到所有副本节点的确认响应后,向客户端发送成功的确认(Acknowledgement)。

  • 客户端也可以向主节点发送读操作请求(Read),主节点将向副本节点请求数据并将数据响应给客户端。

    下面我们看下最终一致性的示意图:

Write
Acknowledgement
Read
Response
Propagate Update
Propagate Update
Propagate Update
Store Data
Store Data
Store Data
Respond with Acknowledgement
Synchronize Data
Synchronize Data
Synchronize Data
Client
Master Node
Node 1
Node 2
Node 3
Data Storage

如上最终一致性图所示:

  • 客户端通过向主节点发送写操作请求(Write)。

  • 主节点将写操作传播(Propagate Update)到所有的副本节点。

  • 副本节点将收到的数据存储(Store Data)并向主节点发送确认响应(Respond with Acknowledgement)。

  • 主节点在收到部分副本节点的确认响应后,向客户端发送成功的确认。

  • 在稍后的时间,副本节点会相互之间交流并进行数据同步(Synchronize Data),以最终达到一致的状态。

  • 客户端也可以向主节点发送读操作请求(Read),主节点将向副本节点请求数据并将数据响应给客户端。

    那再看下读写一致性示意图:

Write
Acknowledgement
Read
Response
Replicate Update
Replicate Update
Replicate Update
Store Data
Store Data
Store Data
Respond with Data
Read Data
Read Data
Read Data
Response
Client
Master Node
Node 1
Node 2
Node 3
Data Storage
Data Storage

如上读写一致性图所示:

  • 客户端(Client)向主节点(Master Node)发送写操作请求(Write)。

  • 主节点将数据复制(Replicate Update)到所有的副本节点(Replica Nodes)。

  • 副本节点将收到的数据存储(Store Data)并向主节点发送确认响应。

  • 当客户端发起读操作(Read)时,主节点将向副本节点请求数据,并将一致性的数据响应给客户端(Response)。

  • 副本节点从数据存储中读取数据(Read Data)并将一致性的数据响应给主节点(Response)。

    这样确保了读操作获取到的数据始终保持一致,并且写操作经过复制到所有副本节点后才返回成功的确认响应。

  1. 故障处理与容错机制
    在分布式存储系统中,节点的故障是不可避免的。为了保持系统的可用性,我们需要实现故障处理和容错机制。常见的故障处理方法包括故障检测、故障转移和故障恢复等。当系统检测到节点发生故障时,可以将其转移到其他正常节点上,以实现系统的高可用性。而故障恢复则是在发生故障后,将故障节点的数据恢复到正常状态。同时,我们还可以使用冗余机制和备份策略,将数据备份到其他节点,以提高系统的容错性。

如何有效权衡,提高系统性能和稳定性?

分布式存储系统中的一致性与可用性是一个具有挑战性的问题。通过合理地选择实战方案和解决问题的方案,我们可以在一致性和可用性之间进行有效的权衡,提高系统的性能和稳定性。

  1. 数据分区与负载均衡
    为了提高系统的可用性和负载均衡性,可以将数据分区存储在不同的节点上。这样可以实现数据的冗余备份,以增加系统的容错性。同时,我们可以使用负载均衡算法将读写操作均匀地分配到不同的节点上,以提高系统的吞吐量和性能。
  2. 异步复制与写缓存
    为了提高系统的可用性,可以采用异步复制的方式进行数据复制。在进行写操作时,只需要将数据写入一个副本,然后再异步地将数据复制到其他副本。这样可以减少写操作的延迟,提高系统的吞吐量。同时,我们还可以使用写缓存技术,将数据暂时保存在内存中,并定期将数据刷盘到磁盘上,以进一步提高系统的写入性能和可用性。
  3. 多副本的读操作与一致性模型
    针对多副本的读操作,我们可以采用不同的一致性模型进行处理。强一致性要求在进行读操作时,必须读取到最新的数据,以保证副本之间的一致性。最终一致性则允许读取到一段时间之前的一致性数据,以提高系统的读取性能。根据系统的实际需求,可以选择适当的一致性模型。
  4. 引入分布式事务机制
    通过引入分布式事务机制,可以在保证一致性的同时提高系统的可用性。分布式事务可以通过二阶段提交和Paxos等算法来实现。在进行写操作时,可以先将数据写入一个副本,并将这个写操作作为分布式事务的一部分。然后,通过协调器节点来协调所有副本的写操作,保证分布式事务的一致性。
  5. 增加故障检测与恢复机制
    为了提高系统的可用性和容错性,可以增加故障检测与恢复机制。通过定期检测节点的状态,可以及时发现故障节点并采取相应的措施。同时,可以使用备份策略将数据备份到其他节点,以确保数据的安全性和可用性。在发生故障后,可以使用故障恢复机制将故障节点的数据恢复到正常状态。
  6. 协调一致性与可用性
    在分布式存储系统的设计和实现过程中,需要协调一致性与可用性。可以通过灵活调整数据的同步策略、一致性模型和数据复制策略来平衡一致性和可用性之间的关系。同时,可以根据系统的实际需求和性能要求,选择合适的一致性与可用性方案。

带入实际场景

场景案例

现在,我们要设计一个分布式存储系统用于存储电商平台的商品库存信息。我们需要保证数据的一致性,即无论用户在任何时候读取商品库存信息,都能获取到最新的数据;同时,系统也要保持高的可用性,尽可能不受节点故障的影响。
在这里插入图片描述

CAP + BASE 双轮指导

CAP理论和BASE理论是分布式系统中常用的理论框架,用于描述一致性、可用性和分区容错性以及系统设计的原则。

分布式存储系统中的一致性与可用性的较量一直是一个具有挑战性的问题。在实际场景中,我们可以借助CAP(Consistency、Availability、Partition tolerance)和BASE(Basically Available、Soft state、Eventually consistent)这两个理论框架来优化系统的设计和实现。下面将结合示例具体讲解。

CAP指导

CAP理论,即:

  • Consistency(一致性),指的是多个副本在任何时间点上的数据保持一致。在分布式系统中,当进行写操作时,要求所有副本都要看到最新的写入数据,以保持数据的一致性。换句话说,若在一个节点上修改了数据,并且采用了一致性的约束,那么在其他节点上对该数据的访问应该能看到这个更新。
  • Availability(可用性),指的是系统能够在任何时候都正常工作并提供服务。在分布式系统中,可用性要求系统能够继续处理请求并返回正常的响应,即使面临一些节点故障或其他不可预知的情况。可用性强调的是系统的可靠性和对用户请求的及时响应。
  • Partition tolerance(分区容错性),指的是系统能够继续正常工作,即使面临网络分区的情况下。网络分区是指在分布式系统中不可避免的网络通信故障,导致节点之间的通信无法正常进行。分区容错性要求系统能够处理这种分区情况,并保持数据的一致性和可用性。

preview

需要注意的是,CAP理论说的是在面对网络分区时,无法同时保证一致性、可用性和分区容错性,只能在它们之间进行权衡。在出现网络分区的情况下,必须要选择满足一致性和分区容错性的方案,或者选择满足可用性和分区容错性的方案。

根据CAP理论的原则,一般情况下,分布式系统会追求满足可用性和分区容错性,而对一致性的要求则会有所降低。这意味着在分布式系统中,可能会允许副本之间在某个时间段内出现不一致的情况。但随着时间的推移,系统会努力推进数据的最终一致性。

在这种情况下,我们可以利用CAP理论来进行设计决策。根据CAP理论,当面临网络分区的情况时,我们必须在一致性(Consistency)和可用性(Availability)之间做出权衡。在电商平台中,商品库存信息的一致性非常重要,因此我们可以选择牺牲一定的可用性,以保证数据的一致性。

为了实现数据的一致性,我们可以采用强一致性模型和同步复制的方式。每当进行商品库存的更新操作时,系统要求将数据写入所有的副本,只有当所有副本都成功写入后才返回成功。这样确保了节点之间的数据一致性。然而,由于要等待所有副本的写操作完成,可能会增加写操作的延迟,降低系统的可用性。

BASE指导

BASE理论,即:

  • Basically Available(基本可用),指的是在面对故障和分区情况时,系统仍然能够保持基本的可用性。即使系统发生部分故障或网络分区,仍能提供有限的功能和服务。基本可用性强调系统在故障情况下的稳定性和可靠性,确保用户仍能够获得一定程度的服务。
  • Soft state(软状态),指的是在分布式系统中的数据不需要强一致性要求,允许在一段时间内存在中间状态或不一致的状态。在分布式系统中,由于各个节点之间的异步通信和数据同步的延迟,节点上的数据可能会出现不同步或者存在一段时间的不一致。软状态允许系统容忍这种数据状态的不一致性,在一定时间内逐渐达到最终一致状态。
  • Eventually consistent(最终一致性),指的是分布式系统中的数据可能在某个时间点上呈现出不一致的状态,但最终会达到一致状态。即使在面对网络分区和故障的情况下,系统仍会努力保证数据最终达到一致的状态。最终一致性强调的是一种弱一致性的条件,在给定时间段内容忍数据的不一致,但最终会通过数据同步或其他机制达到一致性。
    在这里插入图片描述

BASE理论的核心思想是为了追求系统的可用性和性能,放松一致性的要求,以满足高可扩展性和分布式系统的特性。通过基本可用性、软状态和最终一致性的设计原则,可以实现更灵活、高效且容错的分布式系统。

为了增加系统的可用性,我们可以引入BASE理论中的思想。BASE理论认为,在面对网络分区和节点故障的情况下,我们可以放松一致性的要求,转而追求基本可用性(Basically Available)和最终一致性(Eventually consistent)。

在电商平台中,我们可以将商品库存信息的复制方式调整为异步复制。写操作只需写入一个副本,然后异步地进行数据的复制。这样可以提高系统的可用性,但可能会导致副本之间存在一段时间的不一致。为了保证最终一致性,我们可以定期对副本进行数据校验和同步,确保最终达到一致状态。

此外,为了应对节点故障,我们可以采用故障检测和恢复机制。系统应该及时检测到节点故障,并将故障节点上的数据迁移到其他正常节点上,以保持系统的高可用性。同时,可以使用冗余机制和备份策略,将数据备份到其他节点,以提高系统的容错性。

通过结合CAP和BASE理论,我们可以在设计和实现分布式存储系统中的一致性与可用性的较量中作出相应的优化。根据实际需求,权衡一致性和可用性可以采用不同的一致性模型、数据复制方式和故障处理机制。这样可以根据系统的实际情况,平衡性能、稳定性和可用性的需求。

综上所述:

如果想系统学习高并发知识,可以看《高并发系统实战派》,人人都会的高并发系统噢

  1. 一致性、可用性和分区容错性是CAP理论中的关键概念。对于分布式系统的设计和实现,我们需要根据实际需求和系统的特点,在这三个特性之间进行权衡和选择,以满足业务的需求和系统的性能要求。
  2. BASE理论并不是指导具体某种算法或方案的具体实现方式,而是一种思想和指导原则,具体的实践和技术选择仍需要根据具体场景和系统需求进行权衡和决策。

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

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

相关文章

CSDN竞赛68期题解

总结 近几期的题目质量有所提升,数据范围还是一如既往的没给。对于算法题,给定详细的数据范围,规范输入输出,再多给出几个样例以及样例说明,参赛的体验感才会提升。 题目列表 1.小球游戏 题目描述 某台有10个小球的…

[Python] Pylance 插件打开 Python 的类型检查

安装 Python 插件 2.打开一个 Python 文件 可以看到右下角有一个花括号和 Python 字样,点击花括号(不是 Python 字样)打开类型检查即可:

【问题随记】

ubuntu 14.04源更新(sources.list) deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ trusty-update…

echart图表X轴文字太长被隐藏标签解决方案

在Echart图标中,X轴的标签文字间隔默认是自动计算的,在标签文字长度太长的情况下,有可能标签会被隐藏掉,如图 这种显示显然是不符合严谨的业务需求。以下提供三种解决方案 第一种:竖排显示 效果: 在高度一…

汽车EBSE测试流程分析(四):反思证据及当前问题解决

EBSE专题连载共分为“五个”篇章。此文为该连载系列的“第四”篇章,在之前的“篇章(三)”中已经结合具体研究实践阐述了“步骤二,通过系统调研确定改进方案”等内容。那么,在本篇章(四)中&#…

web爬虫第五弹 - JS逆向入门(猿人学第一题)

0- 前言 爬虫是一门需要实战的学问。 而对于初学者来说,要想学好反爬,js逆向则是敲门砖。今天给大家带来一个js逆向入门实例,接下来我们一步一步来感受下入门的逆向是什么样的。该案例选自猿人学练习题。猿人学第一题 1- 拿到需求 进入页面…

据说这是最全的,App自动化测试思路总结,从0到1实施...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、编程语言选择 …

Open3d——根据距离参数给点云上渐变色

找了半天网上都没有开源的根据距离进行点云渐变色上色的代码,所以写一个方便自己和大家的使用~ 渐变色生成代码 输入点云shape为[N,3],我这里使用的是nuScenes数据集,生成的点云使用到中心点的距离作为参数,进行渐变,…

XML(eXtensible Markup Language)

目录 为什么需要XML? 一 XML语法 1.文档声明 2.元素 语法: 3.属性 4.注释 5.CDATA节 二 树结构 三 转义字符 四 DOM4J 1.XML解析技术 2.dom4j介绍 3.dom4j基本使用 XML 指可扩展标记语言(eXtensible Markup Language)。 XML 被设计用来传…

SQL-每日一题【1179. 重新格式化部门表】

题目 部门表 Department: 编写一个 SQL 查询来重新格式化表,使得新的表中有一个部门 id 列和一些对应 每个月 的收入(revenue)列。 查询结果格式如下面的示例所示: 解题思路 1.题目要求我们重新格式化表,…

leetcode 1480.一维数组的动态和

⭐️ 题目描述 🌟 leetcode链接:一维数组的动态和 ps: 动态数组求和其实就是当前 i 位置的值等于 0 - i 的求和,控制好循环条件即可。 代码: /*** Note: The returned array must be malloced, assume caller calls…

4000字,详解数据管理之简介篇

DAMA-DMBOK 2.0既 DAMA 数据管理知识体系指南共分为17章,是从事数据治理人员的参考宝典。也CDMP及CDGA、CDGP认证的考试用书。 我在这里将17个章节根据个人理解分为数据管理简介、数据管理框架、数据处理伦理、数据管理组件、数据管理组织、大数据与数据科学和数据…

阿里云容器服务助力极氪荣获 FinOps 先锋实践者

作者:海迩 可信云评估是中国信息通信研究院下属的云计算服务和软件的专业评估体系,自 2013 年起历经十年发展,可信云服务评估体系已日臻成熟,成为政府支撑、行业规范、用户选型的重要参考。 2022 年 5 月国务院国资委制定印发《…

FTP可能是免费且易于使用,但这就是问题所在

当团队里的某个人发现他们需要马上发送的文件太大,无法通过电子邮件发送时,就会陷入困境。另一个同事开始用电子邮件发送账号或密码,然后意识到,也许电子邮件不够安全,FTP替代,托管文件传输。 FTP可能是免费…

线扫激光算法原理

一:线扫激光算法原理 激光器发出的激光束经准直聚焦后垂直入射到物体表面上,表面的散射光由接收透镜成像于探测器的阵列上。光敏面于接收透镜的光轴垂直。如图: 当被测物体表面移动x,反应到光敏面上像点位移为x’。a为接收透镜到物体的距离(物距),b为接收后主面到成像…

HCIE-Security 安全策略技术——流量处理

一、防火墙安全策略原理及配置 1.包过滤技术 对需要转发的数据包,先获取包头信息,然后和设定的规则进行比较,根据比较结果对数据包进行转发和丢弃 2.包过滤技术进阶——安全策略 包过滤:五元组,ACL 安全策略&#…

主动带宽控制工具

停机和带宽过度使用是任何组织都无法避免的两个问题。随着企业采用 BYOD 文化,通过网络的流量负载可能很重,导致网络拥塞并使网络容易受到网络攻击。为了解决这个问题,企业需要全面的监控策略来保护网络,当看似大量的流量进入网络…

通过MySQL删除Hive元数据信息

之前遇到过一个问题,在进行Hive的元数据采集时,因为Hive表的文件已经被删除了,当时是无法删除表,导致元数据采集也发生了问题,所以希望通过删除Hive表的元数据解决上述问题。 之前安装时,经过特定的配置后…

Qt应用开发(基础篇)——数值微调输入框QAbstractSpinBox、QSpinBox、QDoubleSpinBox

目录 一、前言 二、QAbstractSpinBox类 1、accelerated 2、acceptableInput 3、alignment 4、buttonSymbols 5、correctionMode 6、frame 7、keyboardTracking 8、readOnly 9、showGroupSeparator 10、specialValueText 11、text 12、wrapping 13、信号 二、Q…

zabbix监控mysql容器主从同步状态并告警钉钉/企业微信

前言:被监控的主机已经安装和配置mysql主从同步,和zabbix-agent插件。 mysql创建主从同步:http://t.csdn.cn/P4MYq centos安装zabbix-agent2:http://t.csdn.cn/fx74i mysql主从同步,主要监控这2个参数指标&#xf…