架构06-分布式共识

零、文章目录

架构06-分布式共识

1、分布式共识

(1)基本概念
  • **分布式共识:**在分布式系统中,多个节点之间达成一致的过程。
  • **复杂性来源:**网络的不可靠性和请求的并发性。
  • **应用场景:**如何确保重要数据长期存储在电脑上不会丢失。
(2)数据备份与系统可靠性
  • 磁盘备份:
    • 使用多块磁盘备份数据,降低数据丢失概率。
    • 例如,使用四块磁盘保存同一份数据,数据丢失的概率仅为0.0000625%。
  • 软件系统可靠性:
    • 单个节点系统宕机的原因多样,如程序错误、硬件损坏、网络分区等。
    • 通过多台机器拥有数据副本,提高系统的可靠性。
(3)系统可用性挑战
  • 动态数据同步:
    • 数据同步方法如2PC、3PC,确保数据在多个节点间一致。
    • **缺点:**增加Slave节点会增加系统可用性风险。
  • 状态转移 vs 操作转移:
    • **状态转移:**确保所有节点状态一致,但牺牲可用性。
    • **操作转移:**通过操作日志广播,允许内部状态不一致,但最终状态一致。
(4)高可用与高可靠性的平衡
  • Quorum机制:
    • 通过“少数服从多数”原则,容忍部分节点失联,提高系统可用性。
    • 例如,超过半数节点完成状态转换,即可认为数据变化成功。

2、Paxos算法

(1)Paxos算法简介
  • **提出者:**Leslie Lamport。
  • **地位:**分布式系统最重要的理论基础之一。
  • **背景:**Paxos算法的提出和被认可经历了多次波折。
(2)Paxos算法的工作流程
  • 节点角色:
    • **Proposer:**提出提案。
    • **Acceptor:**应答提案,决定提案是否被接受。
    • **Learner:**学习已达成共识的提案。
  • 工作流程:
    • 准备阶段(Prepare):
      • Proposer向所有Acceptor广播Prepare请求,附带提案ID。
      • Acceptor回复Promise应答,承诺不再接受ID小于等于n的Prepare请求和ID小于n的Accept请求。
    • 批准阶段(Accept):
      • Proposer收到多数Acceptor的Promise应答后,选择合适的值,广播Accept请求。
      • Acceptor在不违背承诺的前提下,接收并持久化提案值。
    • 共识达成:
      • Proposer收到多数Acceptor的Accepted应答后,共识达成,通知Learner。
(3)Paxos算法的局限性
  • 缺陷:
    • 只能对单个值形成决议。
    • 至少需要两次网络请求和应答,高并发下网络开销大。
    • **活锁问题:**多个提案节点互不相让,导致系统“反复横跳”。
    • **异常场景:**由于提案节点的完全平等和并发提案,系统复杂性增加。
  • 实际应用:
    • 实际应用中多使用Multi Paxos和Fast Paxos等改进版本。

3、Multi Paxos 的改进

(1)核心改进
  • **核心改进:**增加“选主”过程。
  • 选主机制:
    • 定时轮询(心跳)确定当前主节点。
    • 心跳超时后,节点使用 Basic Paxos 的准备、批准过程竞选主节点。
    • 得到多数派批准后,竞选成功。
  • 主节点角色:
    • 只有主节点可以提出提案。
    • 从节点接收到客户端请求后,将请求转发给主节点。
    • 主节点提案时,无需再次经过准备过程,只需批准即可。
(2)数据复制过程
  • 正常情况:
    1. 主节点将变更写入日志,广播给从节点。
    2. 从节点写入日志,回复确认消息。
    3. 主节点收到过半数确认后,提交变更,应答客户端,广播提交消息。
    4. 从节点提交变更,完成数据复制。
  • 异常情况:
    • **网络分区:**部分节点失联,但仍能正常工作的节点数量满足多数派要求。
    • **分区恢复:**主节点通过任期编号确定唯一性,回滚未提交的变更,同步失联期间的变更。
(3)安全性保证
  • **Safety(协定性):**确保选主结果唯一,不会出现多个主节点。
  • **Liveness(终止性):**选主过程最终能够结束。
  • **活锁问题:**理论上存在选主无法结束的风险,但实际工程实现中几乎不会出现。
(4)Raft 算法
  • **核心思想:**将共识问题分解为三个子问题:
    1. Leader Election:选主问题。
    2. Entity Replication:数据复制问题。
    3. Safety:安全性保证。
  • **应用:**etcd、LogCabin、Consul 等分布式程序的基础。

4、Gossip 协议

(1)特点
  • 适用于最终一致性场景。
  • 无中心化节点,节点平等。
  • 高鲁棒性,适合公众互联网。
(2)工作过程
  • 信息源选择固定周期,随机选择 k 个节点传播消息。
  • 收到消息的节点在下一个周期内,将消息发送给 k 个节点,直到全网一致。
(3)缺点
  • 状态不一致时间长。
  • 消息冗余,增加网络传输压力。
(4)传播方式
  • **反熵:**同步全部数据,消除节点差异。
  • **传谣:**仅发送变更信息,减少网络开销。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

USB 声卡全解析:提升音频体验的得力助手

在当今数字化的时代,音频领域的追求愈发多元。无论是热衷聆听高品质音乐的爱好者,还是在专业音频工作中精雕细琢的人士,亦或是在游戏世界里渴望极致音效沉浸的玩家,都始终在寻觅能让音频体验更上一层楼的妙法。而 USB 声卡&#x…

系统--线程互斥

1、相关背景知识 临界资源多线程、多执行流共享的资源,就叫做临界资源临界区每个线程内部,访问临界资源的代码互斥在任何时刻,保证有且只有一个执行流进入临界区,访问临界资源,对临界资源起到保护作用原子性不会被任何调度机制打断的操作,该操作只有两态,要么完成,要么…

【短视频矩阵系统==saas技术开发】

在数字媒体领域,短视频的崛起已不可忽视。对于商业实体而言,掌握如何通过短视频平台有效吸引潜在客户并提高转化率,已成为一项关键课题。本文旨在深入剖析短视频矩阵系统的构成与作用机制,以期为企业提供一套系统化的策略&#xf…

Python语法基础(八)

🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” 异常处理 这一个部分,我们来讲一下异常处理这部分。 异常特点 当程序执行的过程中,我们遇到了异常,而且异常未被处理,那么程序…

burp2

声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…

linux 获取公网流量 tcpdump + python + C++

前言 需求为,统计linux上得上下行公网流量,常规得命令如iftop 、sar、ifstat、nload等只能获取流量得大小,不能区分公私网,所以需要通过抓取网络包并排除私网段才能拿到公网流量。下面提供了一些有效得解决思路,提供了…

React 路由与组件通信:如何实现路由参数、查询参数、state和上下文的使用

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

爬虫第四篇:Xpath 路径表达式全解析:从网页基础到爬取百度贴吧图片实战

简介:本文围绕 Xpath 路径表达式展开讲解,先是介绍了网页相关基础如 html、css、vue 以及前后端分离的概念与示例,包括各部分的结构、作用及简单代码展示,随后详细阐述了 xml 的节点关系、选取节点、谓语等理论知识,最…

七牛云成功保存但无法显示和访问{“error“:“download token not specified“}

在使用七牛云存储图片时,前端通过链接访问图片时遇到错误: {"error":"download token not specified"} 具体表现为: 后端通过 access_key 和 secret_key 生成了上传和下载的 Token。前端将域名与 res.key 拼接后生成图…

linux下环境变量的使用

文章目录 环境变量一、环境变量的定义与特点二、环境变量的分类三、常用的环境变量四 环境变量相关指令五 c语言获取环境变量接口六 通过代码如何获取环境变量 环境变量 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数 一、环境变量…

2-2-18-9 QNX系统架构之文件系统(三)

阅读前言 本文以QNX系统官方的文档英文原版资料为参考,翻译和逐句校对后,对QNX操作系统的相关概念进行了深度整理,旨在帮助想要了解QNX的读者及开发者可以快速阅读,而不必查看晦涩难懂的英文原文,这些文章将会作为一个…

基于 MVC 架构的 SpringBoot 高校行政事务管理系统:设计优化与实现验证

摘 要 身处网络时代,随着网络系统体系发展的不断成熟和完善,人们的生活也随之发生了很大的变化,人们在追求较高物质生活的同时,也在想着如何使自身的精神内涵得到提升,而读书就是人们获得精神享受非常重要的途径。为了…

vue3-Import declaration conflicts with local declaration of dayjs

同步发布于我的网站 🚀 概述错误描述 原代码报错信息 原因分析解决方案 修改导入语句使用泛型 代码解释总结 概述 在使用 Vue3 和 dayjs 时,可能会遇到一个常见的错误:“Import declaration conflicts with local declaration of ‘dayjs’…

【ubuntu-22.04】ubuntu-22.04搭建openwrt-23.05编译环境操作说明

ubuntu-22.04镜像下载 Index of /releases/22.04.1 安装ubuntu系统 安装openwrt-23.05依赖包 sudo apt update sudo apt install build-essential clang flex bison g++ gawk \ gcc-multilib g++-multilib gettext git libncurses-dev libssl-dev \ python3-distutils pyth…

html+css网页设计马林旅行社移动端4个页面

htmlcss网页设计马林旅行社移动端4个页面 网页作品代码简单,可使用任意HTML辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取源码 1&#…

【算法】位运算合集

阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 零:位运算基础公式 零:五道基础题 1:位1的个数 2:比…

Android 硬件抽象层(HAL)全解析:智能设备硬件协同揭秘

在Android硬件抽象层(HAL)开发中,需要掌握许多底层技术,并熟悉如何将硬件驱动与Android系统的上层应用接口相集成。以下是HAL开发中需要掌握的核心技术和一些示例代码,以帮助理解其实现原理: 1. C/C编程和…

Linux如何将文件或目录打成rpm包?-- rpmbuild打包详解

👨‍🎓博主简介 🏅CSDN博客专家   🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入&#xff01…

推荐学习笔记:矩阵补充和矩阵分解

参考: 召回 fun-rec/docs/ch02/ch2.1/ch2.1.1/mf.md at master datawhalechina/fun-rec GitHub 业务 隐语义模型与矩阵分解 协同过滤算法的特点: 协同过滤算法的特点就是完全没有利用到物品本身或者是用户自身的属性, 仅仅利用了用户与…

java引用第三方jar包,打包全流程

前言: 本文是使用maven引入第三方jar包,通过mvn命令打包。 以下为引入第三方jar包,打包进项目jar中的全流程步骤。 1、引入第三方jar包 1、放置路径 一般来说,放到项目(子项目)的resources的lib目录下。 2、pom引入 如图所示…