tikv raft中快照的实现

【概述】 raft中快照的实现逻辑

【问题】 当raft收到一个快照的请求后,是单独的线程池运行打快照的逻辑吗?这个会阻塞raft的请求吗?快照是使用rocksdb的snapshot然后遍历kv生成sst文件吗?快照的版本是如何跟raft apply id绑定的?

看下这个
TiKV Raft 快照全流程丨TiKV 源码解读(二十二) - 社区小助手 的专栏 - 专栏 - TiKV Raft 快照全流程丨TiKV 源码解读(二十二) | TiDB 社区

1 个赞

我看了这篇文章之后,还是对这些地方不是很清楚,所以发帖请教一下

Raft 收到快照请求后由独立线程池处理,不会阻塞 Raft 主线程,快照通过 RocksDB 的 Snapshot 遍历 KV 生成 SST 文件,并与 Raft 的 apply index 强关联以确保版本一致性。

记得在哪里看了一篇文章。raft机制有点像copy on write。。不会阻塞其它线程的

mulitpe Raft …

Log snapshot 是一个 Raft
Data apply 是另外一个Raft

Look this picture…

阻塞式的处理,是不是让整个 tikv 塞住,然后挂掉?反向思考,就可以了…
RocksDB 也有 WriteStall 的限流保护…
生产过多,消费过少,不平衡就都不行

1 个赞

来了这个论坛 才发现 国内其他DB真的弱

1 个赞

学到了

1 个赞

any doc can explain?

2 个赞

哈哈,我去找找文档。

1 个赞

Raft 快照多由独立线程池处理,不阻塞请求;基于 RocksDB 快照生成 SST,版本与 apply id 绑定标记数据位点。

1 个赞

这个案例对实际项目开发很有帮助,已收藏。

嗯,同时保证分布式一致性和性能

很好的技术总结,对理解这个概念帮助很大。

在 TiDB 的 TiKV 组件中,Raft 处理快照请求的机制涉及 独立线程池 、非阻塞设计 、RocksDB 快照与 SST 生成 以及Raft Apply ID 的版本绑定

tidb也不是完美的,如果超大数据量还是不能用

还是在mvcc层实现的一致性读,一个数据会根据具体事务存在多个版本,以提供快照

学习了,楼主的分析思路很清晰,对我很有启发。

raft log的保留时间是由什么决定的?

应该是要等大多数节点回应算是阻塞吧