| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> MIT 6.824 学习(三)【KV Raft】 -> 正文阅读 |
|
[网络协议]MIT 6.824 学习(三)【KV Raft】 |
一、概述实验内容来自 MIT 6.824 的 lab3,Lab 3 实现的方式主要参考 raft 作者博士论文 论文 的第六章内容。
根据论文中的描述,需要通过 clientID 以及 sequenceNum 来保证处理的幂等,从而保证一致性。
二、实现2.1 KV Server首先实现基本的 KV Raft Server 的结构体:
2.2 GetRaft KV 的读操作,在 KV 层次的实现比较简单,主要在于 Raft 的响应,得到Raft的响应之后,只需要获取 KV 中的键值对。 对于 Raft 的读操作主要包括两种:
Leader 的数据是最准确的可以直接返回,但是有一种意外的情况就是发生网络分区之后节点错误的任务自己还是Leader 而造成返回旧数据,所以Leader读取数据需要先确保和其他节点的 LeaderShip。
etcd 实现的Follower read是有效的一种一致性读的实现方式。读请求可以发给follower,follower先去leader查询最新的committed index,然后等待自身的committed index增长为读请求发生时的leader的committed index(也就是 apply 了 Leader commit Index 之前所有的日志),从而保证能从follower中读到最新的数据。
2.3 Put/Append对于写操作就是触发 Raft 进行写入,达成共识之后,写入 applyCh ,上层 KV 执行写入操作。和上述写操作也类似。
三、扩展3.1 LSM Tree3.1.1 基础结构LSM Tree 是 Log-Structured-Merge-Tree,是许多 key-value 型数据库所依赖的核心数据结构,通过顺序写的方式来提升写入的效率。 LSM Tree 主要包括三个部分:
内存中的存储表,对于数据的写入,会先顺序的写入这张表,为了防止断电导致的数据丢失,会把数据写入到 WAL 中。 为了提高查询的效率会按照Key有序地组织这些数据,LSM树对于具体如何组织有序地组织数据并没有明确的数据结构定义,例如Hbase使跳跃表来保证内存中key的有序。
当 MemTable 到达一定的大小之后,就会生成 Immutable MemTable 然后顺序的写入磁盘,也就是 MemTable 转变为 SSTable 的一种中间态,MemTable 可以继续处理写请求不造成阻塞。
LSM tree 包含一个持久化在硬盘上的数据结构,称为 Sorted Strings Table (SSTable)。顾名思义,SSTable 保存了排序后的数据(实际上是按照 key 排序的 key-value 对)。 因为对于日志的操作是 append 的操作,所以是可以顺序写入的,但是会存在一些问题:
3.1.2 Compact因为日志是追加的写,所以 SSTable 会不断膨胀,产生上述的问题1,其实很大一部分存留的 key 是不需要的,所以可以通过整理来压缩。 合并的过程比较简单,就是类似于 map 的覆盖,每条数据都以最新的 segment 为准,遍历所有的 kv,保留最新的 kv 值,复杂度为 O(N)。 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/29 11:16:36- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |