【分布式系统与一致性协议】
分布式系统与一致性协议
- CAP原理
- AP
- CP
- CA
- 总结
- BASE理论
- 一致性
- 拜占庭将军问题
分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。
分布式系统的设计目标一般包含如下:
- 可用性:可用性是分布式系统的核心需求,
- 可扩展性:增加机器后不会改变或减少改变系统行为,并且能获得近似线性性能提升
- 容错性:系统发生错误时,具有对错误进行规避以及从错误中恢复的能力
- 性能:对外服务的响应延时和吞吐率要能满足用户的需求
虽然分布式架构可以组建一个强大的集群,但实际工作中遇到的挑战要比传统单体架构大得多,具体表现如下:
- 节点之间的网络通信是不可靠的,存在网络延时和丢包等情况
- 存在节点工作出错的情况,节点自身随时也有宕机的可能
- 同步调用使系统变得不具备扩展性
CAP原理
C:Consistency(一致性)。强一致,就是所有节点上的数据时刻保持同步。原子读写,即所有读写都应该看起来是原子的,或串行的。所有的读写请求好像是经过全局排序一样,写后面的毒一定能读到前面所写的内容。
A:Availability(可用性)。任何非故障节点都应该在有限时间内给出请求的响应,不论请求是否成功。
P:Tolerance to the partition of network(分区容忍性)。当部分节点之间无法通信时,在丢失任意多消息的情况下,系统仍然能够正常工作。
在任何分布式系统中,可用性,一致性和分区容忍性是相互矛盾的,三者不可兼得,最多只能取其二。CAP理论只适用于原子读写场景,不支持数据库事务之类的场景。
P案例:G0与G1无法进行通信是可以容忍的。如果出现了分区问题,我们的分布式存储系统还需要继续运行
C案例:对系统G0写操作b,如果能读到b,则为一致性,如果读G1为a则不符合一致性,所以此时G0需要向G1发送消息。当然数据系统故障了,不返回任何数据,也是符合一致性的
A案例:只要收到用户的请求,服务器就必须给出回应。即使两个分布式节点数据不一致,需要返回数据
AP
AP满足但C不满足,如果要高可用和分区容错,那么就要放弃一致性了。因为一旦发生网络分区P,节点之间将无法通信,为了满足高可用A,每个节点只能用本地数据提供服务,这样就会导致数据的不一致性(!C)。经典案例:Eureka
CP
CP满足但A不满足,如果要求各个服务器上数据是强一致的C,然而网络分区P会导致同步时间无限延长,那么如果以来可用性就得不到保障了。经典案例:Zookeeper
坚持数据ACID(原子性,一致性,隔离性,持久性)的传统数据库以及对结果一致性非常敏感的应用(例如:金融业务)通常会做这样的选择
CA
CA满足但是P不满足,如果不存在网络分区,那么强一致性和可用性是可以同时满足的。
总结
但是在分布式系统内,实际上P是必然的,如果不选P,一旦发生分区错误,整个分布式系统完全无法使用了,这是不符合需要的,所以对于分布式系统,我们只能考虑当分区发生错误时,如果选择一致性和可用性。所以最后只有CP和AP系统了。
BASE理论
BASE:Basic Availability,Soft state,Eventually Consistency。是由CAP理论衍生出来的,即使无法做到强一致性(Strong Consistency),但应用可以采用适合的方式达到最终一致性(Eventual Consitency)。
一致性
拜占庭将军问题
描述:拜占庭帝国(Byzantine Empire)军队的几个师驻扎在敌城外,每个师都由各自的将军指挥。将军们只能通过信使相互沟通。在观察敌情之后,他们必须制定一个共同的行动计划,如进攻(Attack)或者撤退(Retreat),且只有当半数以上的将军共同发起进攻时才能取得胜利。然而, 其中一些将军可能是叛徒,试图阻止忠诚的将军达成一致的行动计划。 更糟糕的是,负责消息传递的信使也可能是叛徒,他们可能篡改或伪造消息,也可能使得消息丢失

相关文章:
【分布式系统与一致性协议】
分布式系统与一致性协议 CAP原理APCPCA总结BASE理论 一致性拜占庭将军问题 分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。 分布式系统的设计目标一般包含如下: 可用性:可用性是分…...
音视频领域的未来发展方向展望
文章目录 音视频领域的未来发展方向全景音视频技术虚拟现实和增强现实的区别 人工智能技术可视化智能分析智能语音交互图像识别和视频分析技术 语音处理智能推荐技术远程实时通信 流媒体技术未来方向 音视频领域的未来发展方向 全景音视频技术:全景音视频技术是近年…...
时间同步/集群时间同步/在线/离线
目录 一、能够连接外网 二、集群不能连接外网--同步其它服务器时间 一、能够连接外网 1.介绍ntp时间协议 NTP(Network Time Protocol)网络时间协议,是用来使计算机时间同步的一种协议,它可以使计算机对其服务器或时钟源做同步…...
基于BP神经网络对MNIST数据集检测识别(numpy版本)
基于BP神经网络对MNIST数据集检测识别 1.作者介绍2.BP神经网络介绍2.1 BP神经网络 3.BP神经网络对MNIST数据集检测实验3.1 读取数据集3.2 前向传播3.3 损失函数3.4 构建神经网络3.5 训练3.6 模型推理 4.完整代码 1.作者…...
HTML5-创建HTML文档
HTML5中的一个主要变化是:将元素的语义与元素对其内容呈现结果的影响分开。从原理上讲这合乎情理。HTML元素负责文档内容的结构和含义,内容的呈现则由应用于元素上的CSS样式控制。下面介绍最基础的HTML元素:文档元素和元数据元素。 一、构建…...
Vue中Axios的封装和API接口的管理
一、axios的封装 在vue项目中,和后台交互获取数据这块,我们通常使用的是axios库,它是基于promise的http库,可运行在浏览器端和node.js中。他有很多优秀的特性,例如拦截请求和响应、取消请求、转换json、客户端防御XSR…...
MLIR面试题
1、请简要解释MLIR的概念和用途,并说明MLIR在编译器领域中的重要性。 MLIR(Multi-Level Intermediate Representation)是一种多级中间表示语言,提供灵活、可扩展和可优化的编译器基础设施。MLIR的主要目标是为不同的编程语言、领域专用语言(DSL)和编译器…...
***杨辉三角_yyds_LeetCode_python***
1.题目描述: 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例 2: 输入: numRows …...
Mac使用DBeaver连接达梦数据库
Mac使用DBeaver连接达梦数据库 下载达梦驱动包 达梦数据库 在下载页面随便选择一个系统并下载下来。 下载下来的是zip的压缩包解压出来就是一个ISO文件,然后我们打开ISO文件进入目录:/dameng/source/drivers/jdbc 进入目录后找到这几个驱动包&#x…...
spring.expression 随笔0 概述
0. 我只是个普通码农,不值得挽留 Spring SpEL表达式的使用 常见的应用场景:分布式锁的切面借助SpEL来构建key 比较另类的的应用场景:动态校验 个人感觉可以用作控制程序的走向,除此之外,spring的一些模块的自动配置类,也会在Cond…...
从Cookie到Session: Servlet API中的会话管理详解
文章目录 一. Cookie与Session1. Cookie与Session2. Servlet会话管理操作 二. 登录逻辑的实现 一. Cookie与Session 1. Cookie与Session 首先, 在学习过 HTTP 协议的基础上, 我们需要知道 Cookie 是 HTTP 请求报头中的一个关键字段, 本质上是浏览器在本地存储数据的一种机制,…...
docker数据管理与网络通信
一、管理docker容器中数据 管理Docker 容器中数据主要有两种方式:数据卷(Data Volumes)和数据卷容器( DataVolumes Containers) 。 1、 数据卷 数据卷是一个供容器使用的特殊目录,位于容器中。可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻…...
怎么查询电脑的登录记录及密码更改情况?
源头是办公室公用的电脑莫名其妙打不开了,问别人也都不知道密码是多少 因为本来就没设密码啊!(躺倒) 甚至已经想好了如果是50万想攻破电脑,被po抓住要怎么花这笔钱了 是我想太多 当然最后也没解决,莫名…...
《三》TypeScript 中函数的类型
TypeScript 允许指定函数的参数和返回值的类型。 函数声明的类型定义:function 函数名(形参: 形参类型, 形参: 形参类型, ...): 返回值类型 {} function sum(x: number, y: number): number {return x y } sum(1, 2) // 正确 sum(1, 2, 3) // 错误。输入多余的或者…...
深入学习 Mysql 引擎 InnoDB、MyISAM
tip:作为程序员一定学习编程之道,一定要对代码的编写有追求,不能实现就完事了。我们应该让自己写的代码更加优雅,即使这会费时费力。 💕💕 推荐:体系化学习Java(Java面试专题&#…...
【华为OD统一考试B卷 | 100分】阿里巴巴找黄金宝箱(V)(C++ Java JavaScript Python)
题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0~N的箱子,每个箱子上面贴有一个数字。 阿里巴巴念出一个咒语数字k(k<N),找出连续k个宝箱数字和的最大值,并输出该最大值。 输入描述 第一行输入一个数字字串,数字之间…...
六步快速搭建个人网站
目录 第一步、选择搭建平台WordPress 第二步、选域名 1)域名在哪买? 2)域名怎么选? 3)以阿里云为例,讲解怎么买域名 第三步、选择服务器 第四步、申请主机、安装WordPress 第五步、选择WordPress模…...
TypeScript 中的 type 关键字有什么用?
创建类型别名 在 TypeScript 中,type 关键字用于创建类型别名(Type Alias)。类型别名可以给一个类型起一个新的名字,使代码更具可读性和可维护性。 类型别名可以用于定义各种类型,包括基本类型、复合类型和自定义类型…...
27 getcwd 的调试
前言 同样是一个 很常用的 glibc 库函数 不管是 用户业务代码 还是 很多类库的代码, 基本上都会用到 获取当前路径 不过 我们这里是从 具体的实现 来看一下 测试用例 就是简单的使用了一下 getcwd rootubuntu:~/Desktop/linux/HelloWorld# cat Test04Getcwd.c #inc…...
使用IDEA使用Git:Git使用指北——实际操作篇
Git使用指北——实际操作 🤖:使用IDEA Git插件实际工作流程 💡 本文从实际使用的角度出发,以IDEA Git插件为基座讲述了如果使用IDEA的Git插件来解决实际开发中的协作开发问题。本文从 远程仓库中拉取项目,在本地分支进行开发&…...
Simulink仿真数据管理指南:如何用Logging和Timetable格式进行高效后处理与可视化
Simulink仿真数据管理进阶:从Logging到自动化分析流水线设计 在工程仿真领域,数据管理往往成为制约效率提升的隐形瓶颈。当Simulink模型复杂度超过200个信号节点时,传统的"运行-导出-手动处理"模式会消耗工程师40%以上的时间在数据…...
Ciao故障排除终极指南:10个常见问题与解决方案大全
Ciao故障排除终极指南:10个常见问题与解决方案大全 【免费下载链接】ciao HTTP checks & tests (private & public) monitoring - check the status of your URL 项目地址: https://gitcode.com/gh_mirrors/ci/ciao Ciao是一款强大的HTTP(S) URL监控…...
前端状态管理:主流状态管理库对比与选型指南
前端状态管理:主流状态管理库对比与选型指南 前言 状态管理是前端开发中的核心问题。随着应用复杂度的增加,选择一个合适的状态管理库变得越来越重要。今天我就来给大家对比一下目前主流的状态管理库,帮助你做出最佳选择。 主流状态管理库概览…...
反射式红外光电管ITR9909:从基础测试到智能车竞赛应用实战
1. ITR9909反射式红外光电管基础入门 第一次拿到ITR9909这个小家伙时,我差点被它朴素的外表骗了。这个直径不到5mm的黑色塑料封装器件,看起来就像普通的三极管,但它的能力可不容小觑。作为智能车竞赛的老玩家,我发现它在信标检测…...
从SQL搬数据到智能分析:5级模型带你掌握数据分析AI Agent,收藏这份进阶指南!
本文介绍了数据分析AI Agent的概念及其与传统BI和ChatGPT的区别,提出了一个包含5个级别的成熟度模型来定位团队所处的阶段。文章重点解析了数据分析Agent的三层架构演进:Function Calling、ReAct模式和多Agent协作,并以电商实战案例展示了如何…...
八大网盘直链获取开源工具全面指南:如何高效管理你的云端文件下载
八大网盘直链获取开源工具全面指南:如何高效管理你的云端文件下载 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动…...
H3C交换机三层组网配置保姆级复盘:从拓扑设计到排错命令一条龙
H3C交换机三层组网实战指南:从规划到排错的完整工作流 当企业网络规模逐渐扩大,部门间的隔离与互通需求变得复杂时,二层交换网络往往显得力不从心。这时,三层交换技术的引入就成为网络工程师的必修课。本文将带你深入一个真实的办…...
英雄联盟玩家的智能工具箱:League Akari 如何提升你的游戏体验
英雄联盟玩家的智能工具箱:League Akari 如何提升你的游戏体验 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 想象一下这样的场景…...
别再死记硬背PID公式了!用Python+MATLAB手把手带你调参,搞定线性系统校正
别再死记硬背PID公式了!用PythonMATLAB手把手带你调参,搞定线性系统校正 记得第一次接触PID控制时,教授在黑板上写满微分方程和传递函数,而我只想知道——这些参数到底该怎么调?直到在实验室通宵调试平衡小车时&#x…...
终极跨平台桌面待办工具:My-TODOs如何重塑你的任务管理体验
终极跨平台桌面待办工具:My-TODOs如何重塑你的任务管理体验 【免费下载链接】My-TODOs A cross-platform desktop To-Do list. 跨平台桌面待办小工具 项目地址: https://gitcode.com/gh_mirrors/my/My-TODOs 你是否厌倦了复杂的任务管理软件?是否…...


