Raft实现报告(20)

简介: Raft实现报告(20)

Raft实现报告(20)

客户端的交互

上节讲到了给每个执行的命令赋予序列号,那么接收到相同序列号的命令代表已经执行过了,不会重复执行。

无需将任何内容写入日志即可处理制度操作。

但是,如果没有额外的措施,这将冒着返回陈旧数据的风险,因为响应请求的leader可能已经被他不知道的新leader取代了。线性化读取不能返回陈旧数据,Raft需要两个额外的预防措施来保证这一点,而不是用日志。

首先,leader必须拥有提交的条目的最新信息,leader完整性的特性保证leader拥有所有一提交的条目,但是从其的起始term开始,它可能不知道那些是哪些。要找到他们,他需要从其任期内提交一个条目,Raft通过让每个leader在其任期开始向日志中提交一个空白的条目,来处理这个问题。

然后,leader必须在处理制度请求之前检查它是否已经被废除(如果选举了更新的leader,其信息可能是陈旧的)。Raft通过让leader在响应时只读请求之前与大多数集群交换心跳信息来处理这个问题。或者leader可以依靠心跳机制来提供一种合约形式,但这将依赖于安全时间。

实现与评估

Raft的实现大约2000行C++代码,不包括测试,注释,或空白行。源代码http://github.com/ logcabin/logcabin。而根据他们论文相关的独立实现也有25个第三方开源的,都处于不同的开发阶段。

http://raftconsensus.github.io.


相关文章
|
Unix Shell Linux
Linux 终端和进程的关系,以及在终端前后台切换进程
Linux 终端和进程的关系,以及在终端前后台切换进程
369 1
|
4月前
|
存储 网络协议 安全
HTTP 协议及会话跟踪机制详解
本文详解了 HTTP 协议的核心知识,包括其定义(超文本传输协议,基于 TCP,规定客户端与服务器通信规则)及与 HTTPS 的区别(安全性、端口、资源消耗)。 介绍了 GET 与 POST 请求的差异(参数限制、安全性、应用场景),以及 Restful 风格(通过 URL 定位资源,请求方式决定操作)。列举了常见 HTTP 状态码(如 200 成功、404 资源未找到),对比了转发与重定向的区别(服务器端一次请求 vs 客户端两次请求)。 还阐述了会话跟踪机制:Cookie 基于客户端存储,通过Set-Cookie和Cookie头实现,安全性较低;Session 基于服务端存储,依赖 C
393 1
|
6月前
|
Go 持续交付 开发者
Go语言包与模块(module)的基本使用-《Go语言实战指南》
本章深入讲解Go语言中的包(Package)和模块(Module)概念。包是代码组织的最小单位,每个`.go`文件属于一个包,通过`import`实现复用;主程序包需命名为`main`。模块是Go 1.11引入的依赖管理机制,支持自动版本管理和私有/远程仓库,无需依赖GOPATH。通过实际示例,如自定义包`mathutil`和第三方模块`gin`的引入,展示其使用方法。常用命令包括`go mod init`、`go mod tidy`等,帮助开发者高效管理项目依赖。最后总结,包负责功能划分,模块实现现代化依赖管理,提升团队协作效率。
273 15
|
Rust JavaScript Java
后端使用的语言是什么?
【10月更文挑战第12天】后端使用的语言是什么?
843 14
|
机器学习/深度学习 传感器 数据采集
深度学习之设备异常检测与预测性维护
基于深度学习的设备异常检测与预测性维护是一项利用深度学习技术分析设备运行数据,实时检测设备运行过程中的异常情况,并预测未来可能的故障,以便提前进行维护,防止意外停机和生产中断。
777 1
|
前端开发 JavaScript UED
JavaScript 线程:处理高并发任务的必备知识(上)
JavaScript 线程:处理高并发任务的必备知识(上)
JavaScript 线程:处理高并发任务的必备知识(上)
|
人工智能 算法 安全
使用libzip压缩文件和文件夹
使用libzip压缩文件和文件夹
263 3
|
Java API 数据安全/隐私保护
JavaSE——基础小项目-模拟ATM系统(项目主要目标、技术选型、架构搭建、具体实现、完整代码注释)(一)
JavaSE——基础小项目-模拟ATM系统(项目主要目标、技术选型、架构搭建、具体实现、完整代码注释)(一)
269 0
|
设计模式 安全 Java
Java设计模式—单例模式的实现方式和使用场景
那么为什么要有单例模式呢?这是因为有的对象的创建和销毁开销比较大,比如数据库的连接对象。所以我们就可以使用单例模式来对这些对象进行复用,从而避免频繁创建对象而造成大量的资源开销。
424 1
|
存储 设计模式 NoSQL
Redis里面的Key设计
Redis里面的Key设计
303 0