AppBoxFuture: Raft快照及日志截断回收

  AppBoxFuture的存储引擎依赖Raft一致性协议来保证各个分区副本的一致性,如果不处理Raft日志将不断增长,因此需要特定的机制(定期或每处理一定数量的日志)来回收那些无用的日志数据。通过学习Raft协议内的Log Compaction,并参考TiKV等实现,作者初步实现了分区快照与日志截断回收功能。

一、快照流程:

  每个分区对应一个Raft组,由不同的Raft节点分布在集群的不同机器上,每个RaftNode都在循环处理Ready(如下图所示):

  • 在达到快照创建条件时(上图步骤6),即满足一定周期(如6小时)且期间应用的已递交日志数量达到阈值(如10000条),RaftNode通知对应的状态机创建快照,这里主要是利用RocksDB的Snapshot及SstFileWriter将当前分区所涉及的KV数据写入相应的sst文件内。在状态机创建快照成功后,RaftNode通知对应的RaftStorage截断并回收日志,由于目前Raft日志同样使用RocksDB存储,所以可以利用RocksDB的DeleteRange功能批量删除无用的日志。

  • 如果同一Raft组内的某一节点所在的机器Down机了较长的时间,在此期间此组内的Leader达到快照条件创建了快照并回收了日志。之后Down掉的机器重新启动,Follower与Leader通信后要求追加Down机期间的日志,但Leader快照前的日志已删除,Leader会发送Raft快照给Follower,这里需要注意的是Leader先发送状态机创建的各个sst文件,都发送完了再发送RaftSnapshot消息。

  • Follower在收到快照消息时(上图步骤3),先清理当前分区所涉及的所有旧数据,然后通知对应的状态机恢复快照数据,这里主要是利用RocksDB的IngestExternalFile将各个sst文件快速导入存储内。

创建与接收的快照文件目前存储在运行时snapshot目录内。

二、简单测试:

1. 启动集群并新建测试用实体模型

参考前篇“告别单体架构,迎接分布式时代”启动一个新集群,并且登录至IDE创建新实体。

2. 关闭集群某一节点模拟Down机

直接Control+C关闭某一节点。

3. 新建一个服务插入5000条记录

在IDE内新建服务用于插入5000条记录(用于触发快照条件),调用此服务后可看到控制台输出如下图所示的创建快照日志。

4. 重新启动Down机节点

通过如下命令重启Down机节点,可看到控制台输出如下图所示的恢复快照日志。

sudo ./appbox

5. 验证Down机节点快照恢复

通过tools/dbscan工具查看快照数据是否已恢复。

tools/dbscan --db=data(数据所在目录) --cf=TableCF --take=10000 --prefix=000020017000

dbscan的参数--prefix=十六进制字串, 可以只匹配相同前缀的KV记录

三、本篇小结:

  本篇介绍了Raft快照及日志截断回收的流程及相应的测试,GitHub上的运行时已更新可供测试。作者开发AppBoxFuture到十月一日就整一年了,期间曾多次想放弃,好在顶着巨大的压力总算解决了这最后一个技术难点,到此基本上原型验证是没有大问题了,下一步的重点是完善必要功能、稳定性及性能优化,并且考虑是开源该项目还是商业化运作。

(0)

相关推荐

  • 4800 Star!一文看懂分布式数据库 YugabyteDB

    Yugabyte DB 是一个全球部署的分布式数据库,和国内的 TiDB 和国外的 CockroachDB 类似,也是受到 Spanner 论文启发,所以在很多地方这几个数据库存在不少相似之处. 与 ...

  • 不可思议,竟然还有人不会查看GC垃圾回收日志?

    回复"面试"获取全套面试资料 日志的重要性,不需要过多强调了.通过日志,我们可以发现程序可能有内存(泄露)问题.本文从案例出发,具体介绍这些日志信息,以期帮助大家更好地了解垃圾回收 ...

  • 广华日志漫笔99977(97)

    刚开始做流量的时候,不要想着我每天怎么搞个100个200个,就想着我每天怎么能搞到10个精准,我怎么能每天搞到10个精准流量,当你真的做到了这一点,当你真正做到了这一点,那你就超越了大部分人. 等人啊 ...

  • 广华日志漫笔99977(96)

    当一个人一单变成了讲台,当一个人一单穿着西装打着领带站上了演讲台,这就说明什么,说明他一辈子也不会再说一句实话了,说明他一辈子再也不会说一句实话了. 改变命运最快的方法就是做推广,改变命运最快的方法就 ...

  • 广华日志漫笔99977(95)

    为什么很多兄弟姐妹她迷恋于做视频,因为她的流量90%都是通过视频来的,为什么很多兄弟姐妹她迷恋于做音频,因为它的流量很多都是通过做音频来的,那为什么有很多兄弟姐妹迷恋于做文章,因为它的流量都是通过文章 ...

  • 广华日志漫笔99977(94)

    别人为什么会在我们这里买的?因为他刷音频的时候看到的是你的音频,他刷视频的时候看到的是你的视频,他刷文章的时候刷到的是你的文章,这样子的话他们干的几率是不是就会大一些? 我理解的赚钱就是把项目卖给需要 ...

  • 广华日志漫笔99977(93)

    这个项目10年前有了,10年后还有这个项目,100年前有了,100年后也有,这就说明什么,说明这个项目是有生命力的项目有生命力的项目是肯定可以赚钱的,所以说还是要长期持有这类项目. 没有对事物的过程的 ...

  • 广华日志漫笔99977(92)

    参加培训不赚钱,你去卖培训你去做培训,你去给做培训的拉皮条才赚钱. 你这个项目出单了,你就不要去发这个收入截图,为什么不要去发呢?因为你一发就激发了人性的了,所有的同行都来举报你所有的同行都来抹黑你, ...

  • 用盐酸肼还原回收金与铂:将配好的盐酸肼缓...

    用盐酸肼还原回收金与铂:将配好的盐酸肼缓慢的加入到已稀释的含金.铂王水溶液(或含金废王水溶液)中,即将氯金酸猛烈地还原成紫色金粉,同时大量放热并释放岀氮气(反应容器体积应几倍于溶液体积,以防反应剧烈时 ...

  • 贵金属废料回收时通常采用的有效溶解方法:...

    贵金属废料回收时通常采用的有效溶解方法:①钯.银常用硝酸溶解.②金常用王水.氯水(氯气通入水溶液中)或硫脲处理溶解.③金.银常用氰化钾(钠)或硫代硫酸钠(或钾)处理.④钯.银.金.铂常用王水溶解〈银以 ...