分布式高级知识点
-
分布式一致性算法:
-
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服…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...
vue3 daterange正则踩坑
<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...
ubuntu22.04 安装docker 和docker-compose
首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...
