分布式理论基础

news2024/10/28 19:32:51

文章目录

  • 1、理论基础
  • 2、CAP定理
    • 1_一致性
    • 2_可用性
    • 3_分区容错性
    • 4_总结
  • 3、BASE理论
    • 1_Basically Available(基本可用)
    • 2_Soft State(软状态)
    • 3_Eventually Consistent(最终一致性)
    • 4_总结

1、理论基础

在计算机科学领域,分布式一致性是一个相当重要的问题。

分布式系统要解决的一个重要问题是数据复制。

数据复制为分布式系统带来了高可用、高性能,但也同时带来了分布式一致性挑战:在对一个副本数据进行更新时,必须确保也更新其他副本,否则不同副本的数据将不一致。

如何解决这个问题 ?

一种思路是:阻塞 “写” 操作,直到数据复制完成。

但这个思路在解决一致性问题的同时,又带来了 “写” 操作性能低的问题。

如果有高并发的 “写” 请求,则在使用这个思路之后,大量 “写” 请求阻塞,导致系统整体性能急剧下降。

如何既保证数据的一致性,又不影响系统运行的性能,是每一个分布式系统都需要重点考虑和权衡的问题。

如何实现一种既能保证ACID特性,又能保证高性能的分布式事务处理系统是一个世界性难题。

在技术演进过程中,出现了诸如CAPBASE 这样的分布式系统理论。

2、CAP定理

1998年,加州大学的计算机科学家 Eric Brewer 提出,分布式系统有三个指标。

  • Consistency(一致性)
  • Availability(可用性)
  • Partition tolerance (分区容错性)

在这里插入图片描述

它们的第一个字母分别是 C、A、P。

Eric Brewer 说,这三个指标不可能同时做到,这个结论就叫做 CAP 定理。

CAP定理是分布式系统的指导理论,它指出:一个分布式系统不可能同时满足 一致性(C: Consistency)可用性(A: Availability) 分区容错性(P: PartitionTolerance) 这3个需求,最多只能同时满足其中两项。

1_一致性

Consistency (一致性):指 "all nodes see the same data at the same time",即更新操作成功并返回客户端后,所有节点在同一时间的数据完全一致,这就是分布式的一致性。

一致性的问题在并发系统中不可避免,对于客户端来说,一致性指的是并发访问时更新过的数据如何获取的问题。

从服务端来看,则是更新如何复制分布到整个系统,以保证数据最终一致。

这里的一致性是指强一致性,一般关系型数据库就具有强-致性特性。

2_可用性

Availability (可用性):指 "Reads and writes always succeed",即服务一直可用,而且是正常响应时间。

好的可用性主要是指系统能够很好的为用户服务,不出现用户操作失败或者访问超时等用户体验不好的情况。

3_分区容错性

Partition Tolerance (分区容错性):指 "the system continues to operate despite arbitrary message loss or failure of part of the system",即分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。

分区容错性要求能够使应用虽然是一个分布式系统,而看上去却好像是在一个可以运转正常的整体。

比如现在的分布式系统中有某一个或者几个机器宕掉或失联了,其他剩下的机器还能够正常运转满足系统需求,对于用户而言并没有什么体验上的影响。

因为分布式系统无法同时满足一致性、可用性、分区容错性这3个基本需求,所以我们在设计分布式系统时就必须有所取舍。

对于分布式系统而言,分区容错性是最基本的要求,因为既然是一个分布式系统,那么分布式系统中的组件必然会被部署到不同的节点,否则也就无所谓分布式系统了,因此必然会出现子网络。

而对于分布式系统而言,网络又必定会出现异常情况因此,分区容错性就成为了分布式系统必然需要面对和解决的问题。

4_总结

在分布式系统中,系统间的网络不能100%保证健康,一定会有故障的时候,而服务有必须对外保证服务。因此Partition Tolerance 不可避免。

当节点接收到新的数据变更时,就会出现问题了:

在这里插入图片描述

如果此时要保证一致性,就必须等待网络恢复,完成数据同步后,整个集群才对外提供服务,服务处于阻塞状态,不可用。

如果此时要保证可用性,就不能等待网络恢复,那 node01、node02 与 node03 之间就会出现数据不一致。

也就是说,在P一定会出现的情况下,A和C之间只能实现一个。

CP without A,即实现一致性和分区容错性。

  • 此组合为数据强一致性模式,即要求在多服务之间数据一定要一致,弱化了可用性。

  • 一些对数据要求比较高的场景(比如金融业务等)使用此模式,这种模式性能偏低。

  • 常用方案有 XA 两阶段提交、Seata AT 模式的“读已提交”级别等。

AP without C,即实现可用性和分区容错性。

  • 此组合为数据最终一致性模式,即要求所有服务都可用,弱化了一致性。

  • 互联网分布式服务多数基于AP,这种模式性能高,可以满足高并发的业务需求。

  • 常用方案有TCC、基于消息的最终一致性、Saga等。

CA without P,即实现一致性和可用性:

  • 如果不要求P(不允许分区),则C(强一致性)和A(可用性)是可以保证的。

  • 但放弃P的同时也就意味着放弃了系统的扩展性,也就是分布式节点受限,没办法部署子节点,这是违背分布式系统设计的初衷的。

系统架构师往往需要把精力花在如何根据业务特点在 C(一致性) 和 A(可用性) 之间做选择,即选择 CP 还是 AP

3、BASE理论

BASE是 Basically Available(基本可用)、Soft State(软状态) 和 EventuallyConsistency(最终一致性) 这3个短语的缩写。

BASE理论是对CAP中的一致性及可用性进行权衡的结果,其核心思想是:无法做到强一致性,那么可以通过牺牲强一致性来获得可用性。

BASE理论是对CAP的一种解决思路,包含三个思想:

1_Basically Available(基本可用)

基本可用是对 A(可用性) 的一个妥协,即在分布式系统出现不可预知故障时,允许损失部分可用性。比如在秒杀场景和雪崩的业务场景下进行降级处理,使核心功能可用,而不是所有的功能可用。

分布式系统在出现故障时,允许损失部分可用性,即保证核心可用。

2_Soft State(软状态)

软状态是相对于原子性而言的。

要求多个节点的数据副本是一致的,这是一种“硬状态”。

“软状态” 指的是:允许系统中的数据存在中间状态,并认为该状态不影响系统的整体可用性,即允许系统在多个不同节点的数据副本上存在数据延时。

在一定时间内,允许出现中间状态,比如临时的不一致状态。

3_Eventually Consistent(最终一致性)

不可能一直是 “软状态” ,必须有个时间期限。

在时间期限过后,应当保证所有副本保持数据一致性,从而达到数据的最终一致性。

这个时间期限取决于网络延时、系统负载、数据复制方案设计等因素。

虽然无法保证强一致性,但是在软状态结束后,最终达到数据一致。

不只是分布式系统使用最终一致性,关系型数据库在某个功能上也使用最终一致性。

比如在备份时,数据库的复制过程是需要时间的,在这个复制过程中,业务读取的值就是“旧”的。

当然,最终还是达到了数据一致性。

4_总结

总体来说,BASE 理论面向的是大型高可用、可扩展的分布式系统。

不同于 ACID,BASE 理论提出通过牺牲强一致性来获得可用性,并允许在一定时间内的不一致,但是最终达到一致。

在实际的分布式场景中,不同业务对数据的一致性要求不一样。因此在设计时,往往结合使用 ACID 和 BASE 理论。

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

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

相关文章

技术周总结 10.21~10.27周日

文章目录 一、10.24 周四 程序员节2.1)问题01: Memory Analysis Tool的使用方法 二、10.27 周日2.1) J2EE架构J2EE 的核心组件与技术J2EE 的多层架构J2EE 的优缺点J2EE 的应用场景 2.2)web应用开发中的 "web服务器" 和 …

AGI 之 【Dify】 之 Dify 在 Windows 端本地部署调用 Ollama 本地下载的大模型,实现 API 形式进行聊天对话

AGI 之 【Dify】 之 Dify 在 Windows 端本地部署调用 Ollama 本地下载的大模型,实现 API 形式进行聊天对话 目录 AGI 之 【Dify】 之 Dify 在 Windows 端本地部署调用 Ollama 本地下载的大模型,实现 API 形式进行聊天对话 一、简单介绍 二、创建一个聊…

ReactNative TurboModule(3)

ReactNative TurboModule 简述 ReactNative新架构的两个核心支柱是TurboModule和Fabric渲染器,前者的功能是提供一个Native的模块,比如蓝牙之类的,后者则是提供一个自定义Native UI组件的能力,ReactNative本身虽然提供了非常多的…

Python 中 {} 是 set 还是 dict

先说结论: {} 是 dict 字典。 一、描述 在 Python 中,我们可以用如下,表示一个集合 set my_set {1, 2, 3, 4, 5, 6} 也可以用如下,表示一个字典 dict my_dict {1:10, 2:20, 3:30, 4:40} 不管是集合还是字典,都…

【Ubuntu20.04 Visual Studio Code安装】【VSCODE】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、打开VSCOE官网二、下载VSODE的Ubuntu版本三、安装VSCODE软件包四、导入工作空间(添加工作空间目录)五、安装插件:1.安装简体中文包2.安装ros插件…

NSSCTF刷题篇web部分

源码泄露 [FSCTF 2023]寻找蛛丝马迹 这个源码泄露,可以记录一下,涉及的知识点比较多 打开环境 查看源码, 第一段flag 乱码,恢复一下 乱码恢复网站:乱码恢复 (mytju.com) 剩下的就只说方法 http://node4.anna.nss…

python实现放烟花效果庆祝元旦

马上就要2025年元旦啦,提前祝大家新年快乐 完整代码下载地址:https://download.csdn.net/download/ture_mydream/89926458

uaGate SI——实现OT与IT的安全连接

对于许多制造商来说,诸如工业物联网(IIoT)、信息物理系统(CPS)和大数据等概念已经开始与其智能工厂的愿景紧密相连。智能工厂是将信息技术(IT)的数字世界与运营技术(OT)的…

H5的Canvas绘图——使用fabricjs绘制一个可多选的随机9宫格

📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,最近一直被测试…

node升级package.json中的版本

由于项目使用时间过老,升级对应包版本,可以使用新功能 1.使用npm-check-updates这个工具,先全局安装 npm install -g npm-check-updates2.检查package.json中dependencies的最新版本 ncu3.更新dependencies到新版本 ncu -u也是一样的 npx…

微知SOP-定位Linux crash问题的几个常用方面和常用命令?

文章目录 1 背景2 问题描述和SOP2.1 进入目录2.2 安装crasn和vmlinux2.3 使用crash命令进入debug目录2.4 收集主要信息2.5 收集task关键信息2.6 查看堆栈信息2.7 使用反汇编查看crash所在行2.8 根据寄存器获取一些关键数据2.9 根据堆栈获取信息2.10 加载内核模块2.11 收集其他t…

宿舍管理新篇章:基于Spring Boot的系统开发

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示: 图4-1系统工作原理…

零基础学linux文件管理

目录 引言 基础知识 回顾C语言 fopen fclose 更改进程路径:chdir fwrite可以用来写入 sizeof字符串 C语言默认打开三个输入输出流 过渡到系统 系统调用:open “位字段”或“位掩码” open的使用 关闭文件:close 写入&#xff1…

【C++】继承与模板

继承 1.继承的概念 概念:继承(inheritace)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称之为派生类。继承呈现了面向对象程序设计的…

AI创作者与人类创作者的协作模式

公主请阅 1. AI创作者的崛起1.1 AI创作者的工作原理1.2 AI创作者的优势 2. 人类创作者的独特价值2.1 创造性与情感2.2 伦理与价值观2.3 文化与背景 3. AI与人类的协作模式3.1 协同创作3.2 内容编辑3.3 数据驱动的创作3.4 跨媒体协作 4. AI与人类协作的挑战4.1 技术局限性4.2 版…

Linux学习笔记 | sudo命令的基本使用

sudo命令 sudo 命令是 Unix 和 Linux 系统中用于执行需要超级用户权限(即 root 权限)操作的工具。它允许系统管理员授予某些用户(或用户组)以 root 或其他指定用户的权限来运行特定命令,而无需知道 root 用户的密码。…

在Java中,需要每120分钟刷新一次的`assetoken`,并且你想使用Redis作为缓存来存储和管理这个令牌

学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……) 2、学会Oracle数据库入门到入土用法(创作中……) 3、手把手教你开发炫酷的vbs脚本制作(完善中……) 4、牛逼哄哄的 IDEA编程利器技巧(编写中……) 5、面经吐血整理的 面试技…

Uni-App-02

条件编译 条件编译概念 不同的运行平台终归有些专有的特性,无法实现跨平台完全兼容,例如:微信小程序导航栏右上角的关闭图标。 uni-app提供了一种“条件编译”机制,可以针对特定的平台编译执行特定的代码,否则不执行。…

高翔【自动驾驶与机器人中的SLAM技术】学习笔记(十二)拓展图优化库g2o(一)框架

【转载】理解图优化,一步步带你看懂g2o框架 文章来源:理解图优化,一步步带你看懂g2o框架 小白:师兄师兄,最近我在看SLAM的优化算法,有种方法叫“图优化”,以前学习算法的时候还有一个优化方法…

Spring Web MVC 入门

1. 什么是 Spring Web MVC Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从从⼀开始就包含在Spring框架中。它的 正式名称“SpringWebMVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为"Spring MVC". 什么是Servlet呢? Ser…