0%

本文梳理了 Redis 启动服务器的流程,并且简要介绍了 Redis 事件处理机制的原理以及对应的源码实现。

Redis 作为一个高性能的缓存,必须要有一个高性能的事件处理机制支撑其性能。同时,Redis 的事件处理机制不考虑扩展性(不用于 Redis 以外的应用),保证了实现的简洁性,阅读和分析的难度不大。

本文的 Redis 版本是 redis-6.0.9,源码主要在 server.cae.c 中。

阅读全文 »

设计要求

基于 Raft 协议(包含 snapshot 机制),实现一个可以容错的分区 Key/Value 数据库。有以下几个具体的要求:

  • 每个 Replica Group 负责存储一部分 K/V 数据,通过 Raft 实现一致性。
  • Shard Master 负责管理配置信息,决定如何分片,通过 Raft 实现一致性。
  • 客户端通过 Shard Master 得知所有的分片信息,Replica Group 定期拉取最新的配置。
  • 支持分片在不同的 Replica Group 中移动,应对 Replica Group 下线或者重新上线的情况。
  • 在变更配置的过程中,如果一个 key 不需要迁移,可以继续提供对外服务。
  • 变更配置后,原有的节点不需要保存过期的数据。
阅读全文 »

最近写完了 MIT-6.824 的 Lab,收获非常多。所有 Lab 的内容加在一起是实现一个基于 Raft 的分布式可分片的容错 Key/Value Service,对于编写并发代码以及调试分布式程序有了更深刻的认识。写这几篇文章的目的是为了总结实现过程中的思路以及遇到的问题,如果能够对他人的实现有一点点启发,那就更好了 :)

阅读全文 »