Raft

  • TinyKV Project3 MultiRaftKV

    这一节中,最难的就是 Project 3B,引无数英雄竞折腰!!当然撑过 3B,你就解放了。 Membership Change 在 Project3A 中我们需要实现 Leade…

    2023年3月2日
    2.0K0
  • TinyKV Project2 RaftKV

    这篇文章系统总结了 TinyKV Project2 中 RaftKV 的实现思路,内容从 RawNode、Raft、RaftLog 三个核心模块的职责划分讲起,逐步梳理各种 `MessageType` 的含义、状态机驱动方式,以及 Ready/Advance 机制如何承接消息发送、持久化和状态推进。后半部分继续扩展到 TinyKV 的上层架构,说明 RaftStore、PeerMsgHandler、PeerStorage 如何管理 region、proposal 和 snapshot,并详细拆解日志 compact、snapshot 生成与安装的完整流程,最后还补充了 PreVote、ReadIndex 和 LeaseRead 等 Raft 相关优化点。

    2023年3月2日
    2.7K1
  • Raft 成员变更的相关问题

    这篇文章围绕 Raft 成员变更中的几个关键问题展开,重点梳理为什么直接按普通日志方式应用配置变更会带来双 leader 风险,以及 ConfChange 为什么通常在持久化后即可生效而不必等到 apply。正文随后系统介绍了 Joint Consensus 和单步成员变更两种方案,分析它们如何通过保证新旧配置的 quorum 存在交集来避免一致性问题,并进一步讨论单步成员变更已知的 bug、no-op 修正方法,以及新节点追赶日志、Learner、leader 移除自己等实现层面的可用性问题。

    2022年2月20日
    5.1K5
  • Talent Plan TinyKV 白皮书

    这篇文章记录了作者参加 PingCAP Talent Plan TinyKV 学习营、完成 TinyKV 项目后的整体复盘,并汇总了配套白皮书、经验和踩坑总结。正文先说明比赛结果、性能评分异常的猜测以及白皮书各章节入口,随后从硬件准备、测试方式和心态管理谈起,分析 TinyKV 在文档完整性、测试覆盖度和事务实现理解上的几个难点,并给出各个 Project 的难度排序与推荐完成顺序。文章最后补充了参考资料、批量跑测试脚本,以及对整个 TinyKV 学习过程的个人反思。

    2022年1月9日
    10.1K49
  • 2021 MIT 6.824 札记

    这篇文章总结了作者完成 2021 MIT 6.824 四个实验过程中的设计思路和踩坑经验,内容覆盖 MapReduce、Raft、KV Raft 和 Sharded KV。正文先说明 Lab 1 中 task 分发与超时重试的实现方式,再重点展开 Lab 2 里 Raft 的后台线程、超时控制、日志同步、持久化和 snapshot 处理,以及常见的死锁、过期回复和 Figure 8 等关键问题;后半部分继续介绍基于 Raft 的 KV 服务如何做请求去重、日志压缩,以及在分片 KV 场景下如何处理 shard controller、配置变更和 shard 迁移。

    2021年8月9日
    8.1K0