设计要求
整个任务要求基于 Raft 构建一个可以容错的 Key/Value 存储服务。细分为如下两个具体的任务:
- Part A:Key/value service without log compaction
- Part B:Key/value service with log compaction
本文整理自 OSTEP 第 28 章。
本文梳理了 Redis 启动服务器的流程,并且简要介绍了 Redis 事件处理机制的原理以及对应的源码实现。
Redis 作为一个高性能的缓存,必须要有一个高性能的事件处理机制支撑其性能。同时,Redis 的事件处理机制不考虑扩展性(不用于 Redis 以外的应用),保证了实现的简洁性,阅读和分析的难度不大。
本文的 Redis 版本是 redis-6.0.9,源码主要在 server.c
和 ae.c
中。
基于 Raft 协议(包含 snapshot 机制),实现一个可以容错的分区 Key/Value 数据库。有以下几个具体的要求:
最近写完了 MIT-6.824 的 Lab,收获非常多。所有 Lab 的内容加在一起是实现一个基于 Raft 的分布式可分片的容错 Key/Value Service,对于编写并发代码以及调试分布式程序有了更深刻的认识。写这几篇文章的目的是为了总结实现过程中的思路以及遇到的问题,如果能够对他人的实现有一点点启发,那就更好了 :)