raft 协议和etcd实战

news2024/11/17 21:17:31

文章目录

    • leader选举
    • 日志复制
    • 安全性
    • preVote 阶段
      • preVote 投票阶段
      • preVote阶段的作用
    • 集群成员变更
    • etcd raft实践
      • etcd raft写流程时序图
      • 问题
        • 如何保障消息的幂等性,不能重复提交
        • 如何保障消息的原子性,不能提交一半
        • raft wal日志的作用是
        • MVCC方式的作用
        • etcd 中如何实现读读并发的
        • etcd中ACID的特性
        • 要区分etcd中的事务以及boltdb中的事务的区别

leader选举

日志复制

安全性

  1. leader只能commit当前的term的日志,不能提交其他term的日志
  2. leader只能增加当前的日志,不能删除以前item提交的日志
  3. 只能选择日志最新的节点为leader
  4. 匹配特性,通俗来讲,就是要保证日志序列要一致

preVote 阶段

preVote 投票阶段

  1. 投票节点需要判断leader是否存在,并且心跳并没有超时
  2. 投票节点的时候需要判断被投票的节点的日志要大于本节点
  3. 被投票节点是否能够获得一半以上的点然后才能新增 term 然后再发起leader 选举

preVote阶段的作用

  1. 防止某个节点因为出现分区后,恢复后,再次发起leader选举,这样会影响到集群的稳定性(因为有新的term的话,那么leader就会退化为follow状态),此处因为他会先进入prevote阶段,因为此时该阶段回去判断是否日志索引记录多少,因此该节点不能进入leader选举流程(禁止进入leader选举,新增term)

  2. 如果出现网络分区(注意分区后节点数还是和分区前是一样的)
    如果新分区的节点需要经过preVote
    因为此时其他节点大概率还是保持和leader通信的

  3. 集群成员变更的时候,下线C-old节点的时候,可能会因为暂时失联再发起leader选举

集群成员变更

参考连接

etcd raft实践

etcd raft写流程时序图

在这里插入图片描述

问题

如何保障消息的幂等性,不能重复提交
  1. etcd中状态机(持久化数据库)中会存储“一致性索引consistent index”,这个是raft index(已提交日志索引) 的持久化,可以对比两个index可以防止重复提交情况,
  2. 如果说写入WAL日志成功了,然后写入状态机(持久化数据库)失败了,客户端返回失败了,客户端发起新的提交怎么办?这个就需要客户端也要保重幂等性,判断改请求是否已提交
如何保障消息的原子性,不能提交一半
  1. 如果宕机后,也可以重建日志(通过重放WAL日志),保障原子性
  2. 持久化数据库也会保障 “日志条目写入”以及“一致性索引consistent index”的原子性的写入(保证不会只写入其中一个),原理是通过 shading page 的方式实现,可自己查阅 资料
raft wal日志的作用是
  1. 如果宕机后,也可以重建日志(通过重放WAL日志),保障原子性
  2. 提高写入性能(顺序写入)
MVCC方式的作用
  1. 提高性能,可以实现并发的写,因为有不同的版本
  2. 可以实现查询历史版本
  3. 可以实现事务操作,每个事务都会有一个版本(大版本,小版本(事务中不同的操作都会有一个小版本))
etcd 中如何实现读读并发的
  1. etcd 中只会从buffer中读取,如果buffer中没有的话,再从状态机(持久化数据库)中查询
  2. buffer的查询不会阻碍到更新,因为更新是直接更新(持久化数据库),更新成功后 再进行buffer的更新
etcd中ACID的特性
  1. 原子性和持久性
    1. 如果宕机后,也可以重建日志(通过重放WAL日志),保障原子性
    2. 持久化数据库也会保障 “日志条目写入”以及“一致性索引consistent index”的原子性的写入(保证不会只写入其中一个),原理是通过 shading page 的方式实现,可自己查阅 资料
  2. 隔离性
    1. etcd 保证提交读的级别,都是当前读,不可保证可重复读,etcd 不会读到未提交读的部分
    2. 如果要保证可重复读,需要业务逻辑自己版本,cas操作
  3. 一致性
    1. 如果业务需要保证可重复读级别,就需要业务逻辑保证一致性
要区分etcd中的事务以及boltdb中的事务的区别
  1. etcd中的事务,可以实现读读、读写、写写并发,提高性能,不需要加锁
  2. 但是boltdb的事务,写写并发是需要加锁的,并且要根据版本号顺序的提交(提交和写入是异步的),写入只是写入内存,提交才需要写入日志中,并且写入和提交是要互斥的(防止写入一半就提交了)

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

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

相关文章

瑞吉外卖项目学习笔记(一)

项目展示: 一、软件开发整体介绍 1.1 软件开发流程 作为软件开发人员,我们的主要工作是在 编码阶段 1.2 角色分工 1.3 软件环境 二、瑞吉外面项目介绍 2.1 项目介绍 系统管理后台页面: 移动端页面: 2.2 产品原型展示 产品原型是…

2024 年科技裁员综合清单

推荐阅读: 独立国家的共同财富 美国千禧一代的收入低于父辈 创造大量就业机会却毁掉了财富 这四件事是创造国家财富的关键 全球财富报告证实联盟自始至终无能 美国人已陷入无休止债务循环中,这正在耗尽他们的财务生命 2024 年,科技行业…

二分例题(D.负重越野,I.路径规划)

这两天的训练赛都有一道二分的题&#xff0c;但是都没往二分上面想&#xff0c;同样不知道怎么二分。 D. Fast and Fat 思路 二分的关键也就是check函数怎么写了&#xff0c;求队伍最大速度&#xff0c;可以分为速度>mid和<mid两部分&#xff0c;再判断&#xff0c;能不…

课时138:变量进阶_变量实践_综合案例

2.1.3 综合案例 学习目标 这一节&#xff0c;我们从 免密认证、脚本实践、小结 三个方面来学习 免密认证 案例需求 A 以主机免密码认证 连接到 远程主机B我们要做主机间免密码认证需要做三个动作1、本机生成密钥对2、对端机器使用公钥文件认证3、验证手工演示 本地主机生成…

dolphinscheduler standalone安装

官方文档&#xff1a;https://dolphinscheduler.apache.org/en-us/docs/3.1.3/guide/installation/standalone 1.安装&#xff08;以放在/home为例&#xff09; 下载见&#xff1a;https://download.csdn.net/download/taotao_guiwang/89311365 tar -xvzf apache-dolphinsche…

《中国改革报》的发行范围有哪些?

《中国改革报》是国家发展和改革委员会主管的全国性综合类报纸&#xff0c;其发行范围广泛&#xff0c;涵盖了全国各地。 该报在全国范围内公开发行&#xff0c;读者群体包括政府部门、研究机构、企业界、学术界以及关注中国改革与发展的社会各界人士。 它通过订阅、零售等多…

力扣hot100学习记录(十)

21. 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 题意 将两个有序列表合并 思路 用两个指针分别指向两个链表最开始&#xff0c;每次把较小的拿出来&#xff0c;相应指针后移&#xff0c;直到一个链表…

Java 多线程(01)

运行一个 Java 程序就是跑一个 Java 进程&#xff0c;该进程至少有一个线程即主线程&#xff0c;而 main 方法就是主线程的入口&#xff1b; 一、常见多线程名词解释 并发&#xff1a;一个 CPU 核心上&#xff0c;通过快速轮转调度的方式&#xff0c;执行多个进程&#xff0c…

linux文件编程api: creat

1.基本信息 功能 创建新文件 头文件 #include<fcntl.h> 函数形式 int creat(const char *pathname, mode_t mode); 返回值 如果成功&#xff0c;则返回文件描述符号 如果失败&#xff0c;则返回-1 参数 pathname: 创建的文件名 mode: 新建文件时&#xff0c;文件权限…

Android LAME原生音频

前言 我想大家都做过录音的功能吧&#xff0c;首先想到的是不是MediaRecorder&#xff1f;今天我们不用MediaRecorder&#xff0c;而是使用LAME库自己编译音频编码模块&#xff0c;很明显&#xff0c;这个需要用到NDK。凡是涉及到音视频编解码这块的&#xff0c;都需要用到And…

BUG: VS Code C++输出中文乱码

BUG: VS Code C输出中文乱码 环境 Windows 11 VS Code 编辑器详情 在Windows 使用 cout 函数输出中文时出现乱码 问题的原因在cmd的显示编码和c程序编码的不同。cmd默认的是gbk编码&#xff0c;而VS Code 软件的CMD终端默认是utf-8编码&#xff0c;因而在输出中文文本时会出…

QQ名片满级会员展示生成HTML源码

源码介绍 QQ名片满级会员展示生成HTML源码&#xff0c;源码由HTMLCSSJS组成&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面&#xff0c;保存素材去选择QQ个性名片-选择大图模板-把图上传照片墙即可 源码效果 源码下载 蓝奏云&#xff1a;http…

唯众云课堂:领航智慧教育,赋能职教未来,打造高效人才培养新平台

随着《中国智慧教育发展报告 2023》的发布&#xff0c;智慧教育被正式定义为数字教育发展的高级阶段。然而&#xff0c;各职院在智慧教育的发展道路上&#xff0c;往往面临着诸多挑战&#xff0c;如缺乏一体化教学平台、优质教学资源不足等。唯众凭借深厚的产业洞察与教育实践经…

Pytorch中的torch.save()文件保存格式探索以及mmdetection加载预训练模型参数对不齐和收到意外参数报错解决方案

使用mmdetection时遇到的问题比较多&#xff0c;首先要对自己要使用的预训练模型有一定的了解&#xff0c;并且懂得使用各种分类模型时不同的模型不同任务执行阶段需要参数上的对其。&#xff08;比如mask-rcnn和它的三个头之间的参数&#xff09;。 首先&#xff0c;谈谈torc…

基于SpringBoot设计模式之结构型设计模式·适配器模式

文章目录 介绍开始使用委托的适配器&#xff08;媒体播放器&#xff09;架构图定义被适配者定义需求接口定义适配者 使用继承的适配器&#xff08;手机充电接口&#xff09;架构图定义被适配者定义需求接口定义适配者 测试样例 总结优点缺点 介绍 在程序世界中&#xff0c;经常…

Python | Leetcode Python题解之第115题不同的子序列

题目&#xff1a; 题解&#xff1a; class Solution:def numDistinct(self, s: str, t: str) -> int:m, n len(s), len(t)if m < n:return 0dp [[0] * (n 1) for _ in range(m 1)]for i in range(m 1):dp[i][n] 1for i in range(m - 1, -1, -1):for j in range(n …

词法与语法分析器介绍

概述 词法和语法可以使用正则表达式和BNF范式表达&#xff0c;而最终描述文法含义的事状态转换图 Lex与YACC 词法分析器Lex 词法分析词Lex&#xff0c;是一种生成词法分析的工具&#xff0c;描述器是识别文本中词汇模式的程序&#xff0c;这些词汇模式是在特殊的句子结构中…

再见PS,Canva Create正式上线

再见&#xff0c;Photoshop&#xff01; Canva Create 正式上线&#xff0c;太疯狂了&#xff01;&#xff01; Canva是一款著名的免费在线AI图像生成器 构想你的创意&#xff0c;然后将其添加到你的设计中。使用最佳的AI图像生成器&#xff0c;观察你的文字和短语变换成美丽…

探索Java的DNA-JVM字节码深度解析

引言 在Java的世界里&#xff0c;JVM&#xff08;Java虚拟机&#xff09;是我们程序运行的心脏。而字节码&#xff0c;作为JVM的血液&#xff0c;携带着程序的执行指令。今天&#xff0c;我们将深入探索Java字节码的奥秘&#xff0c;一窥JVM如何将人类可读的代码转化为机器可执…

【香橙派AIpro】开箱测评

1.板子开箱 哟&#xff0c;看起来还不错哦&#xff01;&#xff01;&#xff01; 收货清单&#xff1a; 主板*1 1.5m数据线*1 充电头*1 1.1.充电头 近65W的充电头&#xff0c;不错不错。 1.2.主板 1.2.1.上面 哇噢&#xff0c;还送了2.4/5G的WiFi和蓝牙天线。 emm&#xf…