系统设计学习(一)分布式系统

分布式系统

CAP 理论

CAP 理论是分布式系统设计中的一个基本原则,它提供了一个思考和权衡一致性、可用性和分区容错性之间关系的框架。 CAP 理论的三个要素如下:

  1. 一致性(Consistency):在分布式系统中的多个副本或节点之间,保持数据的一致性。也就是说,如果有多个客户端并发地读取数据,在任何时间点上,它们都应该能够观察到相同的数据。
  2. 可用性(Availability):系统在任何时间点都能正常响应用户请求,即使部分节点挂了,如果一个系统不能提供响应或响应时间过长,则认为系统不可用。
  3. 分区容忍性(Partition tolerance):指系统在遇到网络分区或节点失效的情况下,仍能够继续工作并保持数据的一致性和可用性。

CAP 理论指出,在分布式系统中,不能同时满足一致性、可用性和分区容错性这三个特性,只能是 CP 或者是 AP(在分布式系统中,分区是无法避免的,当分区发生时,我们必须在一致性和可用性之间做出选择)。

  • CP:强一致性和分区容错性设计。这样的系统要求保持数据的一致性,并能够容忍分区故障,但可用性较低,例如在分区故障期间无法提供服务。
  • AP:高可用性和分区容错性设计。这样的系统追求高可用性,而对一致性的要求较低。在分区故障期间,它可以继续提供服务,但数据可能会出现部分不一致。
在 C 一致性要求下,就必须要拒绝用户的请求,而拒绝了用户的请求就违背了 A 可用性,所以 C 和 A 在分布式环境下是永无无法同时满足的,分布式系统要么是 CP 模式,要么是 AP 模式。
BASE理论

BASE 理论是对分布式系统CAP理论中一致性与可用性权衡的进一步解释,它更注重实际业务中如何通过放松一致性来获得高可用性。 BASE 是指:

  1. 基本可用性(Basically Available):系统保证在出现故障或异常情况下依然能够正常对外提供服务,尽管可能会有一定的性能损失或功能缺失。在分布式系统中,为了保证系统的可用性,有时会牺牲一致性。
  2. 软状态(Soft State):系统中的数据的状态并不是强一致的,而是柔性的。在分布式系统中,由于网络延迟、节点故障等因素,数据可能存在一段时间的不一致。
  3. 最终一致性(Eventually Consistent):系统会保证在一段时间内对数据的访问最终会达到一致的状态。即系统允许数据副本在一段时间内存在不一致的状态,但最终会在某个时间点达到一致。

BASE 理论强调系统的可用性和性能,尽可能保证系统持续提供服务,而不是追求强一致性。在实际应用中,为了降低分布式系统的复杂性和提高性能,可以采用一些方法来实现最终一致性,如版本管理、异步复制等技术手段。

CAP理论常被用于说明分布式系统设计的极限和理论上的权衡,而BASE理论则更多地指导具体实践,如何在CAP理论所描述的限制下构建灵活且健壮的系统。

分布式共识理论

共识算法如Paxos、Raft和Zab等,解决分布式系统中多节点间如何就某个值(如配置信息、状态)达成一致性的问题。

Raft算法:“任期号”(Term)和"索引"(Index)是维护一致性和日志顺序的关键概念。

任期号:是一个单调递增的整数,它标记了集群领导权变动的时间段。每次选举都会产生一个新的任期号,并且任期号随着时间推移只会增加不会减少。这个机制有助于防止“脑裂”现象,即防止多个节点同时认为自己是合法的领导者。

在Raft算法中,当一个Follower节点在一段时间内没有收到当前Leader的心跳包时,它会成为Candidate并开始新一轮的选举,此时任期号加一。如果该节点获得大多数节点的投票,那么它就会成为新的Leader,并以新的任期号开始发送心跳和日志条目给其他节点。任期号也用于解决网络分区和消息延迟问题。例如,一个过时的Leader(其身份属于旧任期)尝试向集群中的其他节点发送命令,但由于任期号比当前任期低,这些节点会拒绝执行这些命令并告知该Leader其任期已经过时。

索引:是日志条目在日志中的位置,表征了特定日志条目在整个日志序列中的顺序。索引保证了日志条目可以按照严格的顺序进行复制和应用到状态机上。

当一个Leader接收到客户端的请求时,它会生成一个带有当前任期号和唯一索引的日志条目。然后,Leader会将包含此日志条目的信息复制到集群中的其他节点。一旦条目被成功复制到大多数节点,它就可以被提交并应用到状态机上。Leader可以使用索引和任期号来确定不一致的位置,并通过发送缺失的条目来恢复日志的一致性。

日志同步的概念:服务器接收客户的数据更新/删除请求,这些请求会落地为命令日志。只要输入状态机的日志命令相同,状态机的执行结果就相同。所以Raft的核心就是leader发出日志同步请求,follower接收并同步日志,最终保证整个集群的日志一致性。

核心流程:

  • 首先选出leader,leader节点负责接收外部的数据更新/删除请求;
  • 然后日志复制到其他follower节点,同时通过安全性的准则来保证整个日志复制的一致性;
  • 如果遇到leader故障,followers会重新发起选举出新的leader;

具体流程:

Leader接收所有客户端请求,然后转化为log复制命令,发送通知其他节点完成日志复制请求。每个日志复制请求包括状态机命令 & 任期号,同时还有前一个日志的任期号和日志索引。状态机命令表示客户端请求的数据操作指令,任期号表示leader的当前任期。

follower收到日志复制请求的处理流程:

(1)follower会使用前一个日志的任期号和日志索引来对比自己的数据:

  • 如果相同,接收复制请求,回复ok;
  • 否则回拒绝复制当前日志,回复error;

(2)leader收到拒绝复制的回复后,继续发送节点日志复制请求,不过这次会带上更前面的一个日志任期号和索引;

(3)如此循环往复,直到找到一个共同的任期号&日志索引。此时follower从这个索引值开始复制,最终和leader节点日志保持一致;

(4)日志复制过程中,Leader会无限重试直到成功。如果超过半数的节点复制日志成功,就可以任务当前数据请求达成了共识,即日志可以commite提交了;

两个特点:

(1)如果在不同日志中的两个条目有着相同索引和任期号,则所存储的命令是相同的,这点是由leader来保证的;

(2)如果在不同日志中的两个条目有着相同索引和任期号,则它们之间所有条目完全一样,这点是由日志复制的规则来保证的;

参考:https://zhuanlan.zhihu.com/p/610671151

应用

在设计分布式系统时,根据具体的场景和需求,可能会结合这两种理论。例如,一个电商平台可能会在订单处理系统中优先考虑一致性(CAP的C),而在商品浏览中优先保证可用性和最终一致性(BASE)。这样,即使在面对网络问题和服务器故障时,用户仍能够浏览商品,而订单处理则采取措施确保交易数据的准确性。

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

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

相关文章

【保姆级】Protobuf详解及入门指南

目录 Protobuf概述 什么是Protobuf 为什么要使用Protobuf Protobuf实战 环境配置 创建文件 解析/封装数据 附录 AQin.proto 完整代码 Protobuf概述 什么是Protobuf Protobuf(Protocol Buffers)协议😉 Protobuf 是一种由 Google 开…

PostgreSQL数组查询是否存在某个值

语法 值 ANY (字段);例子 查询ids中包含id5的数据 select * from student where 5 ANY (ids)mybatis select * from student where #{id} ANY (ids)

CrossOver2024实现Mac/Linux上快速运行Win软件和游戏

作为软件产品专家,我对各类软件都有较为深入的了解,下面介绍CrossOver2024这款软件的功能特点。 CrossOver2024是一款功能强大的类虚拟机软件,它的设计目标是在Mac和Linux系统上实现Windows软件和游戏的快速运行。这款软件不仅具有出色的兼容…

Windows下安装Kafka3

本文讲述Windows(win10)下安装Kafka3的方法。基本流程跟《CentOS下安装Kafka3》一样,也是一样需要先安装Java环境,再部署部署Kafka。 首先在官网 Apache Kafka 下载Kafka二进制压缩包。无论是在CentOS还是在Windows下都是下载该压缩包,里面已…

微信小程序实现上下手势滑动切换

效果图 思路 实现一个微信小程序的复合滚动页面&#xff0c;主要通过Swiper组件实现垂直方向的轮播功能&#xff0c;每个轮播项内部使用Scroll-View组件来展示可垂直滚动的长内容&#xff0c;如图片和文本。 代码 <!-- wxml --> <view class"swiper-container…

【硬件工程师面经整理28_其它】

【硬件工程师面经整理27_其它】-CSDN博客By Along 文章目录 1 怎么画时钟线2 LVTTL和LVCMOS电平的是否可以直接互连&#xff1f;3 IC设计流程半波振子的知识&#xff0c;如何拓展带宽 1 怎么画时钟线 时钟线通常用一条带箭头的直线来表示&#xff0c;箭头指向信号变化的方向。…

Vue 中的 key:列表渲染的秘诀

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

编程笔记 html5cssjs 011 HTML内连框架 个人简历二

编程笔记 html5&css&js 011 HTML内连框架 个人简历二 一、代码二、解释 这段HTML代码定义了一个个人简历的页面布局和样式。页面分为多个部分&#xff0c;包括基本信息、自我评价、工作经历、教育经历、项目经历和期望的职业方向。每个部分都使用了自定义的样式&#x…

Flutter入门学习——Flutter和Dart

因为工作的需要&#xff0c;也为了个人发展&#xff0c;现在的话&#xff0c;转战Flutter跨端开发了&#xff0c;虽然目前的项目只发了android端&#xff0c;但是那天尝试了一下Ios的打包流程&#xff0c;也能运行&#xff0c;只是IOS那边的打包稍微复杂一些。 差不多学习了一…

vue+elementUI用户修改密码的前端验证

用户登录后修改密码&#xff0c;密码需要一定的验证规则。旧密码后端验证是否正确&#xff1b;前端验证新密码的规范性&#xff0c;新密码规范为&#xff1a;6-16位&#xff0c;至少含数字/字母/特殊字符中的两种&#xff1b;确认密码只需要验证与新密码是否一致&#xff1b; 弹…

Linux进程概念(1)

一、冯诺依曼体系结构 学过计组的同学应该都很熟悉这个结构&#xff0c;可以说这是计算机的基础了&#xff1a; 其实我们日常就经常使用到该结构中的各个部分&#xff1a; 输入单元&#xff1a;包括键盘, 鼠标&#xff0c;扫描仪等。 输出单元&#xff1a;显示器&#xff0c;…

粒子群算法优化RBF神经网络气体浓度预测

目录 完整代码和数据下载链接:粒子群算法优化RBF神经网络气体浓度预测,pso-rbf气体浓度预测(代码完整,数据齐全)资源-CSDN文库 https://download.csdn.net/download/abc991835105/88937920 RBF的详细原理 RBF的定义 RBF理论 易错及常见问题 RBF应用实例,粒子群算法优化R…

后勤管理系统|基于SSM 框架+vue+ Mysql+Java+B/S架构技术的后勤管理系统设计与实现(可运行源码+数据库+设计文档+部署说明+视频演示)

目录 文末获取源码 前台首页功能 员工注册、员工登录 个人中心 公寓信息 员工功能模块 员工积分管理 管理员登录 ​编辑管理员功能模块 个人信息 ​编辑员工管理 公寓户型管理 ​编辑公寓信息管理 系统结构设计 数据库设计 luwen参考 概述 源码获取 文末获取源…

Docker基础教程 - 12 常用容器部署-Nginx

更好的阅读体验&#xff1a;点这里 &#xff08; www.doubibiji.com &#xff09; 12 常用容器部署-Nginx 下面介绍一下常用容器的部署。可以先简单了解下&#xff0c;用到再来详细查看。 在 Docker 中部署 Nginx&#xff0c;并通过挂载方式将 Nginx 的配置文件和站点目录挂…

python 字典 集合 基础内容

‘’‘1. 字典的长度是多少 2. 请修改’java’ 这个key对应的value值为98 3. 删除 c 这个key 4. 增加—个key-value对, key值为 php, value是90 5. 获取所有的key值,存储在列表里 6. 获取所有的value值,存储在列表里 7. 判断 javascript 是否在字典中 8. 获得字典里所有value 的…

开发指南006-后端配置文件

后端配置文件分为两层&#xff0c;一是部署目录中的内容如下&#xff1a; 这里最重要的是端口号&#xff0c;同一个目录下可以是一个jar包多个配置文件&#xff0c;启动批处理中&#xff0c;按一个配置文件启动一个程序的方式启动多个服务。例如上面目录里的启动批处理文件可以…

Asp .Net Web Forms 系列:配置图片防盗链的几种方法

通过 URL Rewrite Module 组件 URL Rewrite Module 是一个用于在 ASP.NET Web Forms 或其他基于 IIS 的 Web 应用程序中重写 URL 的强大工具。这个模块允许你将复杂的、不易于记忆或不利于搜索引擎优化的 URL 转换为更简洁、更友好的格式。通过 URL 重写&#xff0c;你可以提高…

【存储】ZYNQ+NVMe小型化全国产存储解决方案

文章目录 1、背景2、基础理论3、设计方案3.1、FPGA设计方案3.1.1、NVMe控制器实现3.1.2、NVMe控制器实现 3.2 驱动软件设计方案3.2.1 读写NVMe磁盘软件驱动3.2.2 NVMe磁盘驱动设计3.2.3 标准EXT4文件系统设计 3.3 上位机控制软件设计方案 4、测试结果4.1 硬件测试平台说明4.2 测…

同步通信与异步通信

同步通信&#xff1a;发送方发出数据后&#xff0c;等接收方发回响应以后才发下一个数据包的通讯方式。 异步通信&#xff1a;发送方发出数据后&#xff0c;不等接收方发回响应&#xff0c;接着发送下个数据包的通讯方式。 像IIC 、SPI这类是同步通信(凡是带有时钟信号的基本上…

ava开发从入门到精通(一):Java日志

目录&#xff1a; Slf4j Log4j LogBack ELK 1、Slf4j slf4j 的全称是 Simple Loging Facade For Java&#xff0c;即它仅仅是一个为 Java 程序提供日志输出的统一接口&#xff0c;并不是一个具体的日志实现方案&#xff0c;就比如 JDBC 一样&#xff0c;只是一种规则而已。所以…