当前位置: 首页 > news >正文

分布式高级知识点

  • 分布式一致性算法:

  • 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签证的资格要求。这包括被美国的赞助机构或组织接受&#xff0c…...

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组件(添加防抖功能)

先看一下效果&#xff1a; // 调用页面 <template><div><!-- v-model&#xff1a;伪双向绑定 --><my-input v-model"inputVal" label"姓名" type"textarea" /></div> </template><script> import…...

小程序一次性订阅消息(消息通知):java服务端实现

文章目录 引言一、消息订阅1.1 小程序订阅消息功能介绍1.2 消息分类1.2.1 新版一次性订阅消息Beta1.2.2 一次性订阅消息&#xff08;用户通过弹窗订阅&#xff09;1.2.3 长期订阅消息&#xff08;用户通过弹窗订阅&#xff09;1.2.4 设备订阅消息 二、获取模板ID1.登录[微信公众…...

百度自由DIY小程序源码:PHP+MySQL组合开发 带完整的搭建教程

随着移动互联网的快速发展&#xff0c;小程序已成为企业与用户互动的重要平台。然而&#xff0c;对于许多中小企业和开发者来说&#xff0c;从零开始开发一款小程序需要投入大量的时间和资源。 以下是部分代码示例&#xff1a; 系统特色功能一览&#xff1a; 1.高度自定义&…...

Vue中的选项式 API 和组合式 API,两者有什么区别

Vue中的选项式 API&#xff08;Option API&#xff09;和组合式 API&#xff08;Composition API&#xff09;是两种不同的组件编写方式&#xff0c;它们各有特点和适用场景&#xff1a; 选项式 API&#xff08;Option API&#xff09;: 传统方法&#xff1a;Vue最初的编程范式…...

Linux下误删除后的恢复操作测试之extundelete工具使用

一、工具介绍 extundelete命令的功能可用于系统删除文件的恢复。在使用前&#xff0c;需要先将要恢复的分区卸载&#xff0c;以防数据被意外覆盖。 语法格式&#xff1a;extundelete [参数] 文件或目录名 常用参数&#xff1a; --after 只恢复指定时间后被删除的文件 --bef…...

table表格中使用el-popover 无效问题解决

实例只针对单个的按钮管用在表格里每一列都有el-popover相当于是v-for遍历了 所以我们在触发按钮的时候并不是单个的触发某一个 主要执行 代码 <el-popover placement"left" :ref"popover-${scope.$index}"> 动态绑定了ref 关闭弹窗 执行deltask…...

c++类全面讲解

文章目录 前言类的基本概念基本结构类与结构体的区别示例代码 类的属性和方法属性&#xff08;成员变量&#xff09;方法&#xff08;成员函数&#xff09;访问修饰符示例代码 类的构造函数和析构函数构造函数析构函数示例代码 类的构造函数重载重载构造函数示例代码 类中的拷贝…...

使用Python和Pygame库创建简单的的彩球效果

简介 Pygame是一款强大的游戏开发库&#xff0c;可以用于创建各种有趣的图形效果。为了更好地了解Pygame的功能&#xff0c;今天我们将要做的是在屏幕上随机生成一些彩色的小球&#xff0c;并使它们以不同的速度和方向移动。当小球碰到屏幕边缘时&#xff0c;它们将反弹。 功能…...

第2课 使用FFmpeg读取rtmp流并用openCV显示视频

本课对应源文件下载链接&#xff1a; https://download.csdn.net/download/XiBuQiuChong/88680079 这节课我们开始利用ffmpeg和opencv来实现一个rtmp播放器。播放器的最基本功能其实就两个:显示画面和播放声音。在实现这两个功能前&#xff0c;我们需要先用ffmpeg连接到rtmp服…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...