<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[yumWant2debug的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/yumWant2debug</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; yumWant2debug]]></copyright><item><title><![CDATA[【续】ZNS SSD模拟器进行YCSB测试]]></title><link>https://blog.youkuaiyun.com/yumWant2debug/article/details/136376402</link><guid>https://blog.youkuaiyun.com/yumWant2debug/article/details/136376402</guid><author>yumWant2debug</author><pubDate>Thu, 29 Feb 2024 22:47:12 +0800</pubDate><description><![CDATA[由于官方YCSB测试需要硬盘搭载文件系统，使用ZenFS进行测试，进行BUG修复及支持。]]></description><category></category></item><item><title><![CDATA[极端情况下的活性问题]]></title><link>https://blog.youkuaiyun.com/yumWant2debug/article/details/132976374</link><guid>https://blog.youkuaiyun.com/yumWant2debug/article/details/132976374</guid><author>yumWant2debug</author><pubDate>Mon, 18 Sep 2023 14:45:01 +0800</pubDate><description><![CDATA[现在故障发生了，节点5宕机了，同时节点4只和节点2保持连接，节点1、2、3互相保持连接。这种情况下节点1、3收不到节点4的心跳，会发起Pre-Vote请求，但由于节点2能收到节点4的心跳，所以节点2不会同意Pre-Vote请求，因此节点1、3无法满足超过半数节点同意Pre-Vote请求的条件，该请求以失败告终。如图所示的4节点Raft集群有一个节点和其他三个网络不太稳定，假设它能发送消息给别的节点，但收不到其他节点的消息，那么它将一直收不到心跳消息，这会导致该节点转为候选者，然后自增任期并发起新的选举。]]></description><category></category></item><item><title><![CDATA[Raft配置变更及Pre-Vote]]></title><link>https://blog.youkuaiyun.com/yumWant2debug/article/details/132942900</link><guid>https://blog.youkuaiyun.com/yumWant2debug/article/details/132942900</guid><author>yumWant2debug</author><pubDate>Sun, 17 Sep 2023 21:28:37 +0800</pubDate><description><![CDATA[随着时间推移，需要进行节点配置变更，需要安全、自动的方式添加节点到集群.通常系统配置是由每台服务器的id和地址组成，之所以不能直接从旧配置切换到新配置，在于可能导致出现矛盾的多数派。如图系统中本来以3台服务器的配置运行，此时系统管理员添加两台服务器。如果系统管理员直接修改配置，那么集群中的节点可能无法完全在同一时间做到配置切换，这会导致服务器S1和S2形成旧集群的多数派，而同一时间服务器S3、S4、S5切换到新配置，会产生两个不同的多数派。]]></description><category></category></item><item><title><![CDATA[Raft实现线性一致性及优化]]></title><link>https://blog.youkuaiyun.com/yumWant2debug/article/details/132922962</link><guid>https://blog.youkuaiyun.com/yumWant2debug/article/details/132922962</guid><author>yumWant2debug</author><pubDate>Sat, 16 Sep 2023 22:13:02 +0800</pubDate><description><![CDATA[领导者向所有跟随者发送新一轮的心跳，如果收到多数派的响应，那么领导者就知道，在它发出心跳的那一刻，不可能有一个任期更大的领导者存在。实现线性一致性的一种办法是，领导者将读请求当作写请求处理即读请求也走Raft，领导者收到读请求时同样写入一条日志，等到raft集群将该日志复制、提交并应用到状态机后，返回读请求结果。可以这样优化的时间在于，Raft算法保证一个新的领导者至少在选举超时时间electionTimeout后才被选举出来，所以在租期时间内，可以认为选举不会发生，领导者仍然是真正的领导者。]]></description><category></category></item><item><title><![CDATA[客户端协议]]></title><link>https://blog.youkuaiyun.com/yumWant2debug/article/details/132922823</link><guid>https://blog.youkuaiyun.com/yumWant2debug/article/details/132922823</guid><author>yumWant2debug</author><pubDate>Sat, 16 Sep 2023 20:03:01 +0800</pubDate><description><![CDATA[在响应客户端之前宕机，该命令已经执行成功，只是回复客户端的过程中宕机，客户端没有收到命令执行的回复，会寻址下一个领导者处理请求，同一个命令会被执行两次，这是不可接受的。Raft算法要求由领导者处理客户端请求，如果客户端不知道领导者是谁，那么它会和任意一台服务器通信；如果通信的节点不是领导者，那么它会告诉领导者是谁。如果请求id已在日志中，说明这是重复的请求，此时忽略新的命令，直接返回已执行的命令的响应。，客户端会重新发出请求到其他服务器上，最终定位到新的领导者，用新的领导者处理请求，直到命令被执行。]]></description><category></category></item><item><title><![CDATA[Raft处理旧领导者]]></title><link>https://blog.youkuaiyun.com/yumWant2debug/article/details/132907765</link><guid>https://blog.youkuaiyun.com/yumWant2debug/article/details/132907765</guid><author>yumWant2debug</author><pubDate>Fri, 15 Sep 2023 23:07:41 +0800</pubDate><description><![CDATA[当分区后，会出现一种状况，分区的一方没有收到领导者，可能会导致选举Term一直上升，因为无法达到超过半数的选票即3张，因此导致Term一直上涨，等到分区恢复后,由于它的Term最大，导致其他节点不能获得选票，在不断增加Term后，最后才能选出Leader。由于新领导者的选举会更新超过半数服务器的任期，因此旧的领导者即便收到客户端请求也不能提交新的日志，因为它会联系至少一台具有新任期的多数派集群的节点，并发现自己的任期太旧，然后自己转为跟随者继续工作。]]></description><category></category></item><item><title><![CDATA[Raft清理不一致的日志]]></title><link>https://blog.youkuaiyun.com/yumWant2debug/article/details/132779578</link><guid>https://blog.youkuaiyun.com/yumWant2debug/article/details/132779578</guid><author>yumWant2debug</author><pubDate>Fri, 15 Sep 2023 16:29:52 +0800</pubDate><description><![CDATA[领导者将从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处还是没有日志，检查失败。]]></description><category></category></item><item><title><![CDATA[Raft领导者变更的安全性]]></title><link>https://blog.youkuaiyun.com/yumWant2debug/article/details/132700662</link><guid>https://blog.youkuaiyun.com/yumWant2debug/article/details/132700662</guid><author>yumWant2debug</author><pubDate>Wed, 06 Sep 2023 15:03:03 +0800</pubDate><description><![CDATA[领导者变更的安全性]]></description><category></category></item><item><title><![CDATA[Raft日志复制]]></title><link>https://blog.youkuaiyun.com/yumWant2debug/article/details/132678386</link><guid>https://blog.youkuaiyun.com/yumWant2debug/article/details/132678386</guid><author>yumWant2debug</author><pubDate>Tue, 05 Sep 2023 00:02:47 +0800</pubDate><description><![CDATA[Raft日志复制]]></description><category></category></item><item><title><![CDATA[Raft 领导者选举]]></title><link>https://blog.youkuaiyun.com/yumWant2debug/article/details/132674670</link><guid>https://blog.youkuaiyun.com/yumWant2debug/article/details/132674670</guid><author>yumWant2debug</author><pubDate>Mon, 04 Sep 2023 21:38:02 +0800</pubDate><description><![CDATA[raft领导者选举介绍]]></description><category></category></item><item><title><![CDATA[商人过河问题]]></title><link>https://blog.youkuaiyun.com/yumWant2debug/article/details/125347206</link><guid>https://blog.youkuaiyun.com/yumWant2debug/article/details/125347206</guid><author>yumWant2debug</author><pubDate>Mon, 04 Sep 2023 19:50:23 +0800</pubDate><description><![CDATA[n名商人带n个随从乘船渡河，一只小船能容纳k人，由他们自己划行。随从们秘密商定，在河的任一岸，一旦随从的人数比商人多，就杀人越货。当然如何渡船的方案则由商人们决定，那么怎样才能确保商人安全渡河呢。]]></description><category></category></item><item><title><![CDATA[C 零长数组]]></title><link>https://blog.youkuaiyun.com/yumWant2debug/article/details/132122419</link><guid>https://blog.youkuaiyun.com/yumWant2debug/article/details/132122419</guid><author>yumWant2debug</author><pubDate>Sat, 05 Aug 2023 17:27:12 +0800</pubDate><description><![CDATA[可以看到arr的地址和a的地址差4字节，即len的内存后紧跟着a，申请了20字节长度的空间，可以通过arr->a访问这块空间。零长数组一般与结构体结合，实现变长数组，放在结构体最后，相当于申请一段len长度的空间，可以直接通过数组名访问变长空间。]]></description><category></category></item><item><title><![CDATA[ZenFS+rocksdb+nvmevirt搭建ZNS SSD模拟环境]]></title><link>https://blog.youkuaiyun.com/yumWant2debug/article/details/131355223</link><guid>https://blog.youkuaiyun.com/yumWant2debug/article/details/131355223</guid><author>yumWant2debug</author><pubDate>Sun, 25 Jun 2023 12:01:09 +0800</pubDate><description><![CDATA[在虚拟机中搭建ZNS SSD实验环境并通过rocksdb进行测试。是一款比较新的SSD 仿真器(emulator)，通过内核模块来模拟ZNS SSD，论文中性能更好，模拟的准确度更接近真实设备，且支持kv-ssd。在NVMeVirt可以通过Makefile中不同的参数配置SSD类型，也可以在ssd_config里配置SSD参数。Zenfs是rocksdb的一个插件，可以减少系统写放大，支持ZNS，自带性能测试工具。]]></description><category></category></item><item><title><![CDATA[Linux ringbuffer分析]]></title><link>https://blog.youkuaiyun.com/yumWant2debug/article/details/130993217</link><guid>https://blog.youkuaiyun.com/yumWant2debug/article/details/130993217</guid><author>yumWant2debug</author><pubDate>Thu, 01 Jun 2023 18:50:36 +0800</pubDate><description><![CDATA[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。]]></description><category></category></item><item><title><![CDATA[awk -v OFS无效]]></title><link>https://blog.youkuaiyun.com/yumWant2debug/article/details/130976621</link><guid>https://blog.youkuaiyun.com/yumWant2debug/article/details/130976621</guid><author>yumWant2debug</author><pubDate>Wed, 31 May 2023 20:25:28 +0800</pubDate><description><![CDATA[通过上面的例子可以发现的是在定义了OFS之后，处理的文本并没有按照我们的预想一样进行正确的输出，而是第二次增加了$1=$1之后，才能输出。因为OFS是对字段进行操作的，只有我们队字段进行了操作，上面的结果才能正确的显现出来。除了利用$1=$1之外，我们还可以利用NF+=0同样可以实现类似的效果。awk可以定义输出的分隔符，其中默认的输出分隔符。]]></description><category></category></item><item><title><![CDATA[SPDK介绍（一）——用户态驱动]]></title><link>https://blog.youkuaiyun.com/yumWant2debug/article/details/130904783</link><guid>https://blog.youkuaiyun.com/yumWant2debug/article/details/130904783</guid><author>yumWant2debug</author><pubDate>Mon, 29 May 2023 15:40:21 +0800</pubDate><description><![CDATA[SPDK介绍]]></description><category></category></item><item><title><![CDATA[sed单双引号问题]]></title><link>https://blog.youkuaiyun.com/yumWant2debug/article/details/130893705</link><guid>https://blog.youkuaiyun.com/yumWant2debug/article/details/130893705</guid><author>yumWant2debug</author><pubDate>Fri, 26 May 2023 20:38:36 +0800</pubDate><description><![CDATA[shell解释 单引号不进行变量替换 双引号进行变量替换。]]></description><category></category></item><item><title><![CDATA[虚拟机centos7.9安装k8sCannot find a valid baseurl for repo: base/7/x86_64]]></title><link>https://blog.youkuaiyun.com/yumWant2debug/article/details/129532617</link><guid>https://blog.youkuaiyun.com/yumWant2debug/article/details/129532617</guid><author>yumWant2debug</author><pubDate>Tue, 14 Mar 2023 16:46:15 +0800</pubDate><description><![CDATA[报错Cannot find a valid baseurl for repo: base/7/x86_64。（ifconfig下网卡名）解决方法：添加DNS。]]></description><category></category></item><item><title><![CDATA[Linux链接]]></title><link>https://blog.youkuaiyun.com/yumWant2debug/article/details/129286172</link><guid>https://blog.youkuaiyun.com/yumWant2debug/article/details/129286172</guid><author>yumWant2debug</author><pubDate>Wed, 01 Mar 2023 17:30:44 +0800</pubDate><description><![CDATA[1).删除符号连接f3,对f1,f2无影响；2).删除硬连接f2，对f1,f3也无影响；3).删除原文件f1，对硬连接f2没有影响，导致符号连接f3失效；4).同时删除原文件f1,硬连接f2，整个文件会真正的被删除。]]></description><category></category></item><item><title><![CDATA[Longest increasing subsequence(LIS)最长增序子序列二分查找]]></title><link>https://blog.youkuaiyun.com/yumWant2debug/article/details/129105956</link><guid>https://blog.youkuaiyun.com/yumWant2debug/article/details/129105956</guid><author>yumWant2debug</author><pubDate>Sat, 18 Feb 2023 23:32:12 +0800</pubDate><description><![CDATA[桩的数量是最长子序列的长度。每当一张牌放在一堆纸上时，将一个后指针放在前一堆的顶牌上（假设它具有比新牌更低的价值）。它的反向是对增长最长的子序列算法的回答。与耐心排序算法的不同之处在于，不需要在允许的最左边的堆上放置新卡。若当前元素比所有堆的第一个元素大，创建新的堆并加入到堆数组中，否则将当前元素加入到第“比当前元素小的堆数量”个堆。每张后续卡片放置在一些现有的堆上，其顶部卡的值不大于新卡的值，或者放在所有现有桩的右侧，从而形成新的堆。比较当前指向的元素和每个堆的第一个元素，计算出比当前元素小的堆数量。]]></description><category></category></item></channel></rss>