分布式高级知识点
-
分布式一致性算法:
-
Paxos
-
Paxos 是一种分布式一致性算法,用于在分布式系统中达成共识。它可以保证,即使在存在节点故障的情况下,系统也能就某个值达成一致。
Paxos 算法的基本思想是,首先选出一个协调者(leader)。协调者负责向其他节点发送提案(proposal)。其他节点收到提案后,会对其进行投票。如果协调者收到了来自大多数节点的投票,那么它就会宣布提案被接受。
Paxos 算法可以保证,即使在存在节点故障的情况下,系统也能就某个值达成一致。这是因为,即使协调者发生故障,其他节点也可以选出一个新的协调者来继续进行投票。
-
Raft
-
Raft 是一种分布式一致性算法,用于在分布式系统中达成共识。它与 Paxos 算法非常相似,但它更简单、更容易理解。
Raft 算法的基本思想是,首先选出一个领导者(leader)。领导者负责向其他节点发送心跳(heartbeat)。其他节点收到心跳后,会对其进行回复。如果领导者在一段时间内没有收到来自大多数节点的回复,那么它就会认为自己已经宕机,并会触发新的领导者选举。
Raft 算法可以保证,即使在存在节点故障的情况下,系统也能就某个值达成一致。这是因为,即使领导者发生故障,其他节点也可以选出一个新的领导者来继续进行心跳。
-
Zab
-
Zab 是一种分布式一致性算法,用于在分布式系统中达成共识。它与 Paxos 和 Raft 算法非常相似,但它更适合于使用 ZooKeeper 的系统。
Zab 算法的基本思想是,首先选出一个领导者(leader)。领导者负责向其他节点发送提案(proposal)。其他节点收到提案后,会对其进行投票。如果领导者收到了来自大多数节点的投票,那么它就会宣布提案被接受。
Zab 算法可以保证,即使在存在节点故障的情况下,系统也能就某个值达成一致。这是因为,即使领导者发生故障,其他节点也可以选出一个新的领导者来继续进行投票。
Viewstamped Replication
Viewstamped Replication (VR) 是一种分布式一致性算法,用于在分布式系统中达成共识。它与 Paxos、Raft 和 Zab 算法不同,它使用一种称为视图戳(viewstamp)的机制来保证一致性。
VR 算法的基本思想是,首先选出一个主节点(primary)。主节点负责向其他节点发送视图戳。其他节点收到视图戳后,会将其存储在本地。当主节点向其他节点发送提案时,它会附带上视图戳。其他节点收到提案后,会将其与本地存储的视图戳进行比较。如果提案的视图戳大于本地存储的视图戳,那么其他节点就会接受该提案。
VR 算法可以保证,即使在存在节点故障的情况下,系统也能就某个值达成一致。这是因为,即使主节点发生故障,其他节点也可以选出一个新的主节点来继续发送视图戳。
-
详细介绍 Viewstamped Replication
-
Viewstamped Replication (VR) 是一种分布式一致性算法,用于在分布式系统中达成共识。它与 Paxos、Raft 和 Zab 算法不同,它使用一种称为视图戳(viewstamp)的机制来保证一致性。
VR 算法的基本思想是,首先选出一个主节点(primary)。主节点负责向其他节点发送视图戳。其他节点收到视图戳后,会将其存储在本地。当主节点向其他节点发送提案时,它会附带上视图戳。其他节点收到提案后,会将其与本地存储的视图戳进行比较。如果提案的视图戳大于本地存储的视图戳,那么其他节点就会接受该提案。
VR 算法可以保证,即使在存在节点故障的情况下,系统也能就某个值达成一致。这是因为,即使主节点发生故障,其他节点也可以选出一个新的主节点来继续发送视图戳。
VR 算法的详细步骤如下:
1. 主节点向其他节点发送视图戳。
2. 其他节点收到视图戳后,会将其存储在本地。
3. 主节点向其他节点发送提案,并附带上视图戳。
4. 其他节点收到提案后,会将其与本地存储的视图戳进行比较。
5. 如果提案的视图戳大于本地存储的视图戳,那么其他节点就会接受该提案。
6. 如果提案的视图戳小于或等于本地存储的视图戳,那么其他节点就会拒绝该提案。
7. 主节点收到来自大多数节点的接受后,就会宣布提案被接受。
8. 其他节点收到主节点宣布提案被接受的消息后,就会将该提案应用到本地。VR 算法可以保证,即使在存在节点故障的情况下,系统也能就某个值达成一致。这是因为,即使主节点发生故障,其他节点也可以选出一个新的主节点来继续发送视图戳。
VR 算法的优点:
* 简单、易于理解
* 性能好
* 可扩展性强VR 算法的缺点:
* 需要一个主节点
* 主节点发生故障时,系统会有一段时间的不可用 -
分布式事务:
-
两阶段提交(2PC)
-
两阶段提交(2PC)是一种分布式事务协议,它确保所有参与者要么都提交事务,要么都回滚事务。2PC有以下两个阶段:
准备阶段:协调者向所有参与者发送一个准备请求。每个参与者执行事务并决定是否可以提交。如果可以提交,则参与者向协调者发送一个准备响应。如果不能提交,则参与者向协调者发送一个中止响应。
提交/回滚阶段:协调者收集所有参与者的响应。如果所有参与者都准备提交,则协调者向所有参与者发送一个提交请求。如果任何参与者中止,则协调者向所有参与者发送一个回滚请求。 -
三阶段提交(3PC)
-
三阶段提交(3PC)是一种分布式事务协议,它比2PC更加可靠,但开销也更大。3PC有以下三个阶段:
准备阶段:与2PC的准备阶段相同。
预提交阶段:协调者向所有参与者发送一个预提交请求。每个参与者执行事务并决定是否可以提交。如果可以提交,则参与者向协调者发送一个预提交响应。如果不能提交,则参与者向协调者发送一个中止响应。
提交/回滚阶段:协调者收集所有参与者的响应。如果所有参与者都预提交,则协调者向所有参与者发送一个提交请求。如果任何参与者中止,则协调者向所有参与者发送一个回滚请求。XA事务
XA事务是一种分布式事务协议,它允许一个事务跨越多个资源管理器。XA事务有以下几个特点:
XA资源管理器:XA资源管理器是一个管理资源的事务管理器。它可以是数据库、文件系统或其他类型的资源。
XA协调器:XA协调器是一个协调XA事务的事务管理器。它负责确保所有XA资源管理器要么都提交事务,要么都回滚事务。
XA事务分支:XA事务分支是一个在单个XA资源管理器中执行的事务的一部分。XA事务的执行过程如下:
1. XA应用程序向XA协调器启动一个XA事务。
2. XA协调器向每个XA资源管理器创建一个XA事务分支。
3. XA应用程序在每个XA资源管理器中执行XA事务分支。
4. XA应用程序向XA协调器提交XA事务。
5. XA协调器向每个XA资源管理器提交XA事务分支。XA事务比2PC和3PC更加复杂,但它也更加灵活和强大。XA事务可以跨越多个资源管理器,并且可以处理更复杂的事务。
总结
2PC、3PC和XA事务都是分布式事务协议,它们都有自己的优缺点。2PC简单高效,但可靠性较差。3PC更加可靠,但开销也更大。XA事务更加灵活和强大,但复杂度也更高。
在选择分布式事务协议时,需要考虑以下因素:
* 事务的可靠性要求
* 事务的性能要求
* 事务的复杂度
* 参与事务的资源类型根据这些因素,可以选择最合适的分布式事务协议。
-
-
分布式锁:
-
基于数据库的分布式锁
-
基于数据库的分布式锁是通过在数据库中创建一个唯一索引的表来实现的。客户端在获取锁之前,需要先向表中插入一条记录。如果插入成功,则客户端获得锁。如果插入失败,则说明锁已被其他客户端持有。
基于数据库的分布式锁具有以下几个优点:.
简单易用:基于数据库的分布式锁的实现原理简单,易于理解和使用。
性能良好:基于数据库的分布式锁的性能良好,即使在高并发的情况下也能保持较高的吞吐量。
可靠性高:基于数据库的分布式锁具有较高的可靠性,即使数据库出现故障,锁也不会丢失。基于数据库的分布式锁也有一些缺点:
可扩展性差:基于数据库的分布式锁的可扩展性较差,随着客户端数量的增加,数据库的负载会越来越重。
不适用于跨数据库的场景:基于数据库的分布式锁不适用于跨数据库的场景,因为每个数据库都有自己的锁表。 -
基于Redis的分布式锁
-
基于Redis的分布式锁是通过在Redis中设置一个键值对来实现的。客户端在获取锁之前,需要先向Redis中设置一个键值对。如果设置成功,则客户端获得锁。如果设置失败,则说明锁已被其他客户端持有。
基于Redis的分布式锁具有以下几个优点:
简单易用:基于Redis的分布式锁的实现原理简单,易于理解和使用。
性能良好:基于Redis的分布式锁的性能良好,即使在高并发的情况下也能保持较高的吞吐量。
可扩展性好:基于Redis的分布式锁的可扩展性好,可以很容易地通过增加Redis服务器的数量来提高性能。
适用于跨数据库的场景:基于Redis的分布式锁适用于跨数据库的场景,因为Redis是一个独立的存储系统。基于Redis的分布式锁也有一些缺点:
可靠性较低:基于Redis的分布式锁的可靠性较低,如果Redis服务器宕机,锁就会丢失。
不适用于对强一致性要求较高的场景:基于Redis的分布式锁不适用于对强一致性要求较高的场景,因为Redis是一个弱一致性的系统。基于ZooKeeper的分布式锁
基于ZooKeeper的分布式锁是通过在ZooKeeper中创建一个临时节点来实现的。客户端在获取锁之前,需要先在ZooKeeper中创建一个临时节点。如果创建成功,则客户端获得锁。如果创建失败,则说明锁已被其他客户端持有。
基于ZooKeeper的分布式锁具有以下几个优点:
强一致性:ZooKeeper保证所有服务器上的数据都是一致的,因此基于ZooKeeper的分布式锁具有强一致性。
高可用性:ZooKeeper是一个高可用的系统,即使部分服务器宕机,它仍然能够继续提供服务。因此,基于ZooKeeper的分布式锁具有高可用性。
可扩展性好:ZooKeeper是一个可扩展的系统,可以很容易地添加或删除服务器。因此,基于ZooKeeper的分布式锁具有可扩展性。基于ZooKeeper的分布式锁也有一些缺点:
ZooKeeper的学习成本较高:ZooKeeper是一个复杂的系统,学习成本较高。
ZooKeeper的部署和维护成本较高:ZooKeeper需要部署和维护一个集群,因此成本较高。总结
基于数据库的分布式锁、基于Redis的分布式锁和基于ZooKeeper的分布式锁各有优缺点。在选择分布式锁时,需要根据具体场景来选择合适的锁机制。
示例代码
基于数据库的分布式锁
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException;public class DatabaseDistributedLock { private static final String LOCK_TABLE = "my_lock"; private Connection conn; public DatabaseDistributedLock() throws SQLException { conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/my_database", "root", "password"); } public void lock() throws SQLException { // 创建锁表 String sql = "CREATE TABLE IF NOT EXISTS
-
相关文章:
分布式高级知识点
分布式一致性算法: Paxos Paxos 是一种分布式一致性算法,用于在分布式系统中达成共识。它可以保证,即使在存在节点故障的情况下,系统也能就某个值达成一致。 Paxos 算法的基本思想是,首先选出一个协调者(leader)。协调者负责向其他节点发送提案(proposal)。其他节点收…...
Linux 命令之 dpkg 的简单使用
查询已安装的软件包及其依赖关系 dpkg -s name...
Ubuntu20.04服务器使用教程(安装教程、常用命令、故障排查)持续更新中.....
安装教程(系统、NVIDIA驱动、CUDA、CUDNN、Pytorch、Timeshift、ToDesk) 制作U盘启动盘,并安装系统 在MSDN i tell you下载Ubuntu20.04 Desktop 版本,并使用Rufus制作UEFI启动盘,参考UEFI安装Ubuntu使用GPTUEFI模式安…...
访问学者J1签证的申请流程
访问学者J1签证是许多人前往美国进行学术研究和文化交流的重要途径之一。申请J1签证需要经过一系列步骤和程序,让知识人网小编带大家来了解一下申请流程吧。 首先,申请者需要确认自己符合J1签证的资格要求。这包括被美国的赞助机构或组织接受,…...
51单片机(STC8)-- GPIO输入输出
文章目录 I/O口相关寄存器端口数据寄存器端口模式配置寄存器(PxM0,PxM1)端口上拉电阻控制寄存器(PxPU)关于I/O的注意事项 配置I/O口I/O设置demoI/O端口模式LED控制(I/O输出)按键检测(I/O输入) S…...
【实用安装教程】在win系统下制作Mac OS镜像启动U盘
第一步:制作Mac OS系统引导镜像启动U盘 准备一个8G(或以上)的U盘插入到win系统的电脑上 去下载TransMac(Mac启动盘制作工具)v10.4按照说明安装好 插入准备好的U盘,U盘数据要转移,打开TransMac,右键U盘选…...
职场唠嗑-国家教学
文章目录 职场晋升潜规则:让上司看到自己工作能力职场生存指南:脆弱无罪,眼泪如何变利器关于具备谋取好职位的资格实习生在职场的基本“规矩”比能力更能决定人生的,是你对工作的态度跳槽:看别人家的“饭”端自家的碗职…...
【温故而知新】JavaScript数据结构详解
一、概念 JavaScript是一种弱类型的编程语言,它提供了一些内置的数据结构来存储和组织数据。 在计算机科学中,数据结构是一种特定的方式来组织和存储数据,以便于有效地访问和修改数据。在JavaScript中,数据结构是指相互之间存在…...
matlab如何标定相机内外参和畸变参数
关于内外参矩阵和畸变矩阵可以学习 https://blog.csdn.net/qq_30815237/article/details/87530011?spm1001.2014.3001.5506 在APP中找到 camera Calibrator 点击 Add Images,导入拍照图片。标定20张左右就够了,然后角度变一下,但不需要变太…...
【卫星科普】什么是农业一号卫星和农业二号卫星?
农业一号卫星和农业二号卫星是中国自主研发的两颗重要卫星,主要用于农业领域的监测和研究。 农业一号卫星是中国第一颗具备红边波段传感器的卫星,也是世界上第一颗具备红边波段的宽视场多光谱中高分辨率卫星。这对农业农村遥感监测非常重要,…...
imgaug库指南(一):从入门到精通的【图像增强】之旅
文章目录 引言imgaug简介安装和导入imgaug代码示例imgaug的强大之处和用途小结结尾 引言 在深度学习和计算机视觉的世界里,数据是模型训练的基石,其质量与数量直接影响着模型的性能。然而,获取大量高质量的标注数据往往需要耗费大量的时间和…...
vue封装基础input组件(添加防抖功能)
先看一下效果: // 调用页面 <template><div><!-- v-model:伪双向绑定 --><my-input v-model"inputVal" label"姓名" type"textarea" /></div> </template><script> import…...
小程序一次性订阅消息(消息通知):java服务端实现
文章目录 引言一、消息订阅1.1 小程序订阅消息功能介绍1.2 消息分类1.2.1 新版一次性订阅消息Beta1.2.2 一次性订阅消息(用户通过弹窗订阅)1.2.3 长期订阅消息(用户通过弹窗订阅)1.2.4 设备订阅消息 二、获取模板ID1.登录[微信公众…...
百度自由DIY小程序源码:PHP+MySQL组合开发 带完整的搭建教程
随着移动互联网的快速发展,小程序已成为企业与用户互动的重要平台。然而,对于许多中小企业和开发者来说,从零开始开发一款小程序需要投入大量的时间和资源。 以下是部分代码示例: 系统特色功能一览: 1.高度自定义&…...
Vue中的选项式 API 和组合式 API,两者有什么区别
Vue中的选项式 API(Option API)和组合式 API(Composition API)是两种不同的组件编写方式,它们各有特点和适用场景: 选项式 API(Option API): 传统方法:Vue最初的编程范式…...
Linux下误删除后的恢复操作测试之extundelete工具使用
一、工具介绍 extundelete命令的功能可用于系统删除文件的恢复。在使用前,需要先将要恢复的分区卸载,以防数据被意外覆盖。 语法格式:extundelete [参数] 文件或目录名 常用参数: --after 只恢复指定时间后被删除的文件 --bef…...
table表格中使用el-popover 无效问题解决
实例只针对单个的按钮管用在表格里每一列都有el-popover相当于是v-for遍历了 所以我们在触发按钮的时候并不是单个的触发某一个 主要执行 代码 <el-popover placement"left" :ref"popover-${scope.$index}"> 动态绑定了ref 关闭弹窗 执行deltask…...
c++类全面讲解
文章目录 前言类的基本概念基本结构类与结构体的区别示例代码 类的属性和方法属性(成员变量)方法(成员函数)访问修饰符示例代码 类的构造函数和析构函数构造函数析构函数示例代码 类的构造函数重载重载构造函数示例代码 类中的拷贝…...
使用Python和Pygame库创建简单的的彩球效果
简介 Pygame是一款强大的游戏开发库,可以用于创建各种有趣的图形效果。为了更好地了解Pygame的功能,今天我们将要做的是在屏幕上随机生成一些彩色的小球,并使它们以不同的速度和方向移动。当小球碰到屏幕边缘时,它们将反弹。 功能…...
第2课 使用FFmpeg读取rtmp流并用openCV显示视频
本课对应源文件下载链接: https://download.csdn.net/download/XiBuQiuChong/88680079 这节课我们开始利用ffmpeg和opencv来实现一个rtmp播放器。播放器的最基本功能其实就两个:显示画面和播放声音。在实现这两个功能前,我们需要先用ffmpeg连接到rtmp服…...
保姆级教程:用MNN在Android上部署你的第一个图像分类App(从模型转换到实时摄像头识别)
从零构建Android端智能图像分类应用:MNN实战全流程解析 在移动互联网时代,将AI能力嵌入移动端应用已成为提升用户体验的关键。想象一下这样的场景:用户打开手机就能实时识别植物种类、辨别商品真伪,或是自动分类相册中的照片——这…...
superpowers skill 3.1: using-git-worktrees
智能体工作流 安装 $ npx skills add https://github.com/obra/superpowers --skill using-git-worktrees摘要 具有智能目录选择和安全验证的隔离 Git 工作树。 通过检查现有目录、CLAUDE.md 偏好设置或询问用户来自动检测工作树目录位置;支持项目本地ÿ…...
VSCode毛玻璃效果实现:CSS backdrop-filter原理与性能调优指南
1. 项目概述:当代码编辑器遇上毛玻璃美学如果你和我一样,每天有超过8小时的时间是在Visual Studio Code(以下简称VSCode)中度过的,那么你肯定不止一次地折腾过它的主题和外观。从默认的深色主题到各种炫酷的Material D…...
权限割裂、数据延迟、协同断点——Gemini Workspace整合失败的90%源于这4个配置盲区
更多请点击: https://intelliparadigm.com 第一章:权限割裂、数据延迟、协同断点——Gemini Workspace整合失败的90%源于这4个配置盲区 在企业级部署 Gemini Workspace 时,大量团队遭遇“功能可登录但协作不可用”的隐性故障。根本原因并非 …...
从斯普特尼克时刻到产业政策:美国科技竞争力焦虑的深层剖析
1. 从“斯普特尼克时刻”到竞争力焦虑:一场持续了半个世纪的美国辩论2011年1月25日,时任美国总统奥巴马在国情咨文演讲前,将美国当时面临的挑战称为又一个“斯普特尼克时刻”。这个比喻精准地戳中了一代美国工程师、企业家和政策制定者的神经…...
Python 爬虫高级实战:爬虫接口限流自适应调节
前言 网络目标站点普遍具备严格的接口访问限流、频率校验、IP 频次风控、接口令牌校验等防护机制,常规固定延时、固定并发的爬虫模式极易触发封禁、接口 429 限流、会话失效、IP 拉黑等问题。人工配置延时、手动调整并发阈值的传统方式,无法适配站点动态…...
Encounter/Innovus GIFT TCL 脚本流程索引清单
目录 一、 布局阶段 (Placement) 二、 布线阶段 (Routing) 三、 时序阶段 (Timing) 四、 电源阶段 (Power) 五、 IO 与端口处理 六、 调试与辅助工具 一、 布局阶段 (Placement) 脚本名称 核心用途 调用场景 userAddAllHInsts.tcl 为源模块中的每个扇出添加缓冲器 解决高扇…...
工程师视角:最低成本脱碳路径与气候解决方案的工程化思维
1. 项目概述:一封关于气候与经济的公开信最近在EE Times上读到一封写给埃隆马斯克的公开信,作者格伦温瑞布提出了一些关于气候变化和联邦预算赤字的想法,挺有意思的。这封信的核心不是空谈环保理念,而是从一个工程师和务实主义者的…...
如何高效使用Fast-GitHub加速插件:5个提升GitHub访问速度的实用技巧
如何高效使用Fast-GitHub加速插件:5个提升GitHub访问速度的实用技巧 【免费下载链接】Fast-GitHub 国内Github下载很慢,用上了这个插件后,下载速度嗖嗖嗖的~! 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 还…...
开源密钥管理器VSV:一个加密文件搞定多环境密钥管理
1. 项目概述:一个面向开发者的加密密钥管理器最近在折腾一个内部项目,需要管理不同环境(开发、测试、生产)的数据库密码、API密钥这些敏感信息。一开始图省事,直接写在了.env文件里,结果在代码评审时被同事…...
