架构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)传播方式
  • **反熵:**同步全部数据,消除节点差异。
  • **传谣:**仅发送变更信息,减少网络开销。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux基础病毒编写

linux目录介绍 /bin二进制可执行命令/etc系统管理和配置文件/etc/rc.d启动的配置文件和脚本 /home用户主目录的基点/lib标准程序设计库,又叫动态链接共享库 /sbin超级管理命令,这里存放的是系统管理员使用的管理程序 /tmp公共的临时文件存储点 /root系统…

使用Apache HttpClient上传文件

Apache HttpClient是一个强大且灵活的库,用于处理Java中的HTTP请求。 它支持多种HTTP方法,并能处理不同类型的请求体,包括文件上传。本 教程将演示如何使用Apache HttpClient来向服务器上传文件。 Maven依赖 要使用Apache HttpClient&…

uni-app写的微信小程序每次换账号登录时出现缓存上一个账号数据的问题

uni-app写的微信小程序每次更换另外账号登录时出现缓存上一个账号数据的问题? 1, 清除缓存数据:在 onShow 钩子中,我们将 powerStations、list 和 responseRoles 的值重置为初始状态,以清除之前的缓存数据。 2&…

初始Python篇(9)—— 函数

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏: Python 目录 函数的定义及调用 函数的概念 函数的定义 函数的调用 水仙花数等自幂数的练习 函数相关参数的概念 函数的返回值 变…

【题解】—— LeetCode一周小结48

🌟欢迎来到 我的博客 —— 探索技术的无限可能! 🌟博客的简介(文章目录) 【题解】—— 每日一道题目栏 上接:【题解】—— LeetCode一周小结47 25.网络延迟时间 题目链接:743. 网络延迟时间 …

RK3568国产处理器 + TensorFlow框架的张量创建实验案例分享

一、实验目的 本节视频的目的是了解张量定义、了解张量的表示形式、并学习基于TensorFlow框架的张量创建方法。 二、实验原理. 张量定义 1、张量是多维数组,这个定义常见于各种人工智能软件。 2、张量是某种几何对象,不会随着坐标系的改变而改变。 3…

SpringMVC:SpringMVC的bean加载机制

问题分析 入门案例的内容已经做完了,在入门案例中我们创建过一个SpringMvcConfig的配置类,再回想前面咱们学习Spring的时候也创建过一个配置类SpringConfig。这两个配置类都需要加载资源,那么它们分别都需要加载哪些内容? 我们先来看下目前…

张伟楠动手学强化学习笔记|第一讲(上)

张伟楠动手学强化学习笔记|第一讲(上) 人工智能的两种任务类型 预测型任务 有监督学习无监督学习 决策型任务 强化学习 序贯决策(Sequential Decision Making) 智能体序贯地做出一个个决策,并接续看到新的观测,知道最终任务结…

Navicat连接SQL Server

Navicat连接SQL Server 安装自带的SQL Server客户端 去到Navicat安装目录,找到安装程序,安装即可。 安装对应版本的Microsoft ODBC Driver for SQL Server 打开Navicat输入对应的SQL Server相关信息 然后点测试连接,提示连接成功。

子模块、Fork、NPM 包与脚手架概述

子模块 在 Git 仓库中嵌套另一个仓库,通过引用的方式引入到主项目,版本管理依赖 Git 提交记录或分支,更新需手动拉取并提交,适用于共享代码并保持项目独立性。 优点:子模块支持直接查看和修改,保持子模块…

将一个数组逆序输出。-多语言

目录 C 语言实现 方法 1: 交换元素 方法 2: 使用辅助数组 方法 3: 使用递归 方法 4: 使用标准库函数(C99及以上) 总结 Python 实现 方法 1: 交换元素 方法 2: 使用切片 方法 3: 使用 reversed() 函数 方法 4: 使用 list.reverse() 方法 方法…

传智杯 A字符串拼接

链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述 键盘输入两个字符串,将这两个字符串进行拼接后输出。 输入描述: 键盘输入两个字符串 输出描述: 输出两个字符串拼接后的结果 示例1 输入 hello nihao 输出 helloni…

js高级-ajax封装和跨域

ajax简介及相关知识 原生ajax AJAX 简介 AJAX 全称为 Asynchronous JavaScript And XML,就是异步的 JS 和 XML。 通过 AJAX 可以在浏览器中向服务器发送异步请求,最大的优势:无刷新获取数据。 按需请求,可以提高网站的性能 AJ…

WEB开发: 丢掉包袱,拥抱ASP.NET CORE!

今天的 Web 开发可以说进入了一个全新的时代,前后端分离、云原生、微服务等等一系列现代技术架构应运而生。在这个背景下,作为开发者,你一定希望找到一个高效、灵活、易于扩展且具有良好性能的框架。那么,ASP.NET Core 显然是一个…

D82【python 接口自动化学习】- pytest基础用法

day82 pytest初体验 学习日期:20241128 学习目标:pytest基础用法 -- pytest初体验 学习笔记: 文件命名规范 py测试文件必须以test_开头(或_test结尾)测试方法必须以test开头测试类必须以Test开头,并且…

前端面试热门题(二)[html\css\js\node\vue)

Vue 性能优化的方法 Vue 性能优化的方法多种多样,以下是一些常用的策略: 使用v-show替换v-if:v-show是通过CSS控制元素的显示与隐藏,而v-if是通过操作DOM来控制元素的显示与隐藏,频繁操作DOM会导致性能下降。因此&am…

HarmonyOS4+NEXT星河版入门与项目实战(23)------实现手机游戏摇杆功能

文章目录 1、案例效果2、案例实现1、代码实现2、代码解释4、总结1、案例效果 2、案例实现 1、代码实现 代码如下(示例): import router from @ohos.router import {ResizeDirection } from @ohos.UiTest import curves

MySQL--视图

目录 1 认识视图 1.1 视图的定义 1.1 创建视图 1.2 查询 1.3 修改 1.4 删除 1.5 视图的优缺点 1.5.1 优点 1.5.2 缺点 1.6 视图的类型 1.7 视图与物化视图 2 视图检查选项 2.1 CASCADED 2.2 LOCAL 3 视图更新及作用 3.1 视图案列结合 3.1.1 屏蔽敏感数据 3.1…

【工具】JS解析XML并且转为json对象

【工具】JS解析XML并且转为json对象 <?xml version1.0 encodingGB2312?> <root><head><transcode>hhhhhhh</transcode></head><body><param>ccccccc</param><param>aaaaaaa</param><param>qqqq<…

全球气候变化驱动因素预测,Python机器学习与深度学习

全球气候变化是现代社会面临的最重要的环境挑战之一&#xff0c;影响了气温、降水、海平面、生态系统等多个方面。气候变化的驱动因素主要包括温室气体排放、气溶胶浓度、火灾频发、海冰融化、叶绿素变化、植被变化和海洋温度上升等。这些因素在全球范围内交互作用&#xff0c;…