自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 【续】ZNS SSD模拟器进行YCSB测试

由于官方YCSB测试需要硬盘搭载文件系统,使用ZenFS进行测试,进行BUG修复及支持。

2024-02-29 22:47:12 427

原创 极端情况下的活性问题

现在故障发生了,节点5宕机了,同时节点4只和节点2保持连接,节点1、2、3互相保持连接。这种情况下节点1、3收不到节点4的心跳,会发起Pre-Vote请求,但由于节点2能收到节点4的心跳,所以节点2不会同意Pre-Vote请求,因此节点1、3无法满足超过半数节点同意Pre-Vote请求的条件,该请求以失败告终。如图所示的4节点Raft集群有一个节点和其他三个网络不太稳定,假设它能发送消息给别的节点,但收不到其他节点的消息,那么它将一直收不到心跳消息,这会导致该节点转为候选者,然后自增任期并发起新的选举。

2023-09-18 14:45:01 106

原创 Raft配置变更及Pre-Vote

随着时间推移,需要进行节点配置变更,需要安全、自动的方式添加节点到集群.通常系统配置是由每台服务器的id和地址组成,之所以不能直接从旧配置切换到新配置,在于可能导致出现矛盾的多数派。如图系统中本来以3台服务器的配置运行,此时系统管理员添加两台服务器。如果系统管理员直接修改配置,那么集群中的节点可能无法完全在同一时间做到配置切换,这会导致服务器S1和S2形成旧集群的多数派,而同一时间服务器S3、S4、S5切换到新配置,会产生两个不同的多数派。

2023-09-17 21:28:37 182

原创 Raft实现线性一致性及优化

领导者向所有跟随者发送新一轮的心跳,如果收到多数派的响应,那么领导者就知道,在它发出心跳的那一刻,不可能有一个任期更大的领导者存在。实现线性一致性的一种办法是,领导者将读请求当作写请求处理即读请求也走Raft,领导者收到读请求时同样写入一条日志,等到raft集群将该日志复制、提交并应用到状态机后,返回读请求结果。可以这样优化的时间在于,Raft算法保证一个新的领导者至少在选举超时时间electionTimeout后才被选举出来,所以在租期时间内,可以认为选举不会发生,领导者仍然是真正的领导者。

2023-09-16 22:13:02 209

原创 客户端协议

在响应客户端之前宕机,该命令已经执行成功,只是回复客户端的过程中宕机,客户端没有收到命令执行的回复,会寻址下一个领导者处理请求,同一个命令会被执行两次,这是不可接受的。Raft算法要求由领导者处理客户端请求,如果客户端不知道领导者是谁,那么它会和任意一台服务器通信;如果通信的节点不是领导者,那么它会告诉领导者是谁。如果请求id已在日志中,说明这是重复的请求,此时忽略新的命令,直接返回已执行的命令的响应。,客户端会重新发出请求到其他服务器上,最终定位到新的领导者,用新的领导者处理请求,直到命令被执行。

2023-09-16 20:03:01 43

原创 Raft处理旧领导者

当分区后,会出现一种状况,分区的一方没有收到领导者,可能会导致选举Term一直上升,因为无法达到超过半数的选票即3张,因此导致Term一直上涨,等到分区恢复后,由于它的Term最大,导致其他节点不能获得选票,在不断增加Term后,最后才能选出Leader。由于新领导者的选举会更新超过半数服务器的任期,因此旧的领导者即便收到客户端请求也不能提交新的日志,因为它会联系至少一台具有新任期的多数派集群的节点,并发现自己的任期太旧,然后自己转为跟随者继续工作。

2023-09-15 23:07:41 46

原创 Raft清理不一致的日志

领导者将从nextIndex[2]=11处开始检查,一直检查到nextIndex[2]=4处,附带的日志条目信息为index=3且term=1,与领导者匹配。(3) 如此往复,直到领导者的nextIndex[1]=5,带上前一个日志的唯一标识:索引为4且任期为4的信息。(1) 一开始领导者根据自己的日志长度,记录nextIndex[1]= 10+1 =11,带上前一个日志条目的唯一标识:索引为10且任期为6.检查发现跟随者1的索引为10处没有日志,检查失败。跟随者1的索引为9处还是没有日志,检查失败。

2023-09-15 16:29:52 52

原创 Raft领导者变更的安全性

领导者变更的安全性

2023-09-06 15:03:03 52

原创 Raft日志复制

Raft日志复制

2023-09-05 00:02:47 96

原创 Raft 领导者选举

raft领导者选举介绍

2023-09-04 21:38:02 130 1

原创 商人过河问题

n名商人带n个随从乘船渡河,一只小船能容纳k人,由他们自己划行。随从们秘密商定,在河的任一岸,一旦随从的人数比商人多,就杀人越货。当然如何渡船的方案则由商人们决定,那么怎样才能确保商人安全渡河呢。

2023-09-04 19:50:23 335

原创 C 零长数组

可以看到arr的地址和a的地址差4字节,即len的内存后紧跟着a,申请了20字节长度的空间,可以通过arr->a访问这块空间。零长数组一般与结构体结合,实现变长数组,放在结构体最后,相当于申请一段len长度的空间,可以直接通过数组名访问变长空间。

2023-08-05 17:27:12 56 1

原创 ZenFS+rocksdb+nvmevirt搭建ZNS SSD模拟环境

在虚拟机中搭建ZNS SSD实验环境并通过rocksdb进行测试。是一款比较新的SSD 仿真器(emulator),通过内核模块来模拟ZNS SSD,论文中性能更好,模拟的准确度更接近真实设备,且支持kv-ssd。在NVMeVirt可以通过Makefile中不同的参数配置SSD类型,也可以在ssd_config里配置SSD参数。Zenfs是rocksdb的一个插件,可以减少系统写放大,支持ZNS,自带性能测试工具。

2023-06-25 12:01:09 1697 1

原创 Linux ringbuffer分析

Linux源码解压后可在源码目录下Documentation/trace/ring-buffer-design.txt中找到设计。ring_buffer位于linux-5.7/include/linux/ring_buffer.h中。kfifo位于linux-5.7/include/linux/kfifo.h中。ring_buffer实际使用trace_buffer结构体,定义如下。面试被问到网卡RingBuffer数据结构,瞎猜猜错了,学习一下。本博客针对Linux5.7。

2023-06-01 18:50:36 376

原创 awk -v OFS无效

通过上面的例子可以发现的是在定义了OFS之后,处理的文本并没有按照我们的预想一样进行正确的输出,而是第二次增加了$1=$1之后,才能输出。因为OFS是对字段进行操作的,只有我们队字段进行了操作,上面的结果才能正确的显现出来。除了利用$1=$1之外,我们还可以利用NF+=0同样可以实现类似的效果。awk可以定义输出的分隔符,其中默认的输出分隔符。

2023-05-31 20:25:28 146

原创 SPDK介绍(一)——用户态驱动

SPDK介绍

2023-05-29 15:40:21 654

原创 sed单双引号问题

shell解释 单引号不进行变量替换 双引号进行变量替换。

2023-05-26 20:38:36 116

原创 虚拟机centos7.9安装k8sCannot find a valid baseurl for repo: base/7/x86_64

报错Cannot find a valid baseurl for repo: base/7/x86_64。(ifconfig下网卡名)解决方法:添加DNS。

2023-03-14 16:46:15 292

原创 Linux链接

1).删除符号连接f3,对f1,f2无影响;2).删除硬连接f2,对f1,f3也无影响;3).删除原文件f1,对硬连接f2没有影响,导致符号连接f3失效;4).同时删除原文件f1,硬连接f2,整个文件会真正的被删除。

2023-03-01 17:30:44 37

原创 Longest increasing subsequence(LIS)最长增序子序列二分查找

桩的数量是最长子序列的长度。每当一张牌放在一堆纸上时,将一个后指针放在前一堆的顶牌上(假设它具有比新牌更低的价值)。它的反向是对增长最长的子序列算法的回答。与耐心排序算法的不同之处在于,不需要在允许的最左边的堆上放置新卡。若当前元素比所有堆的第一个元素大,创建新的堆并加入到堆数组中,否则将当前元素加入到第“比当前元素小的堆数量”个堆。每张后续卡片放置在一些现有的堆上,其顶部卡的值不大于新卡的值,或者放在所有现有桩的右侧,从而形成新的堆。比较当前指向的元素和每个堆的第一个元素,计算出比当前元素小的堆数量。

2023-02-18 23:32:12 65

原创 shell统计文本词频

写一个 bash 脚本以统计一个文本文件 words.txt 中每个单词出现的频率。使用 awk + print 函数将 1、2 列位置互换。uniq -c 表示在每列旁边显示该行重复出现的次数。words.txt只包括小写字母和 ’ ’。sort -nr 表示依照数值的大小降序排序。单词间由一个或多个空格字符分隔。每个单词只由小写字母组成。sort+uniq进行排序。

2023-02-17 21:43:31 125

原创 连续两次递归的顺序

连续两次递归调用与栈的关系

2022-12-06 17:20:04 414

原创 Linux双系统一个系统进不去需要修改启动参数

Linux双系统一个系统进不去需要改启动参数 如何在可进入的系统修改启动参数

2022-11-24 20:58:12 521

原创 Linux内核链表代码分析

《Linux内核设计实现》中链表部分代码分析

2022-10-22 17:50:45 205 1

原创 格密码学Efficient Lattice (H)IBE In The Stand Model学习

经典的IBE(Identity-Based Encryption)算法初识比较晦涩,因此在此处记录一下。

2022-06-15 20:14:24 482

原创 ruby安装compass网络问题

安装sass出现网络问题解决:更换镜像站 cmd输入gem sources --add https://gems.ruby-china.com/

2020-03-11 20:38:27 110

转载 UNIX网络编程中第一个例子中的问题

执行./configure 报错没有权限换为 bash ./configurecd libfree后make报错vi或vim 进入inet_ntop 添加 #definecd libroute后make报错没有那个文件或目录作者说是只有系统支持4.4 BSD风格的routing socketLinux可以忽略网上有说添加 if_dl.h到/usr/include/net文件可以mak...

2019-12-16 00:06:03 543

转载 CentOs7 下执行bash ./configure 报错没有合适的C编译器

./configure时报错 configure: error: no acceptable C compiler found in $PATHSee `config.log' for more details.安装gccSee `config.log’ for more details.)安装gccsudo yum install gcc 或root下 yum install gcc...

2019-12-15 23:28:50 688

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除