最近,在努力看看 Go 底层代码库。但是,我的习惯还是要从实际的开发经验去学习就准备去写一个基于 Redis 协议和Raft 的一个分布式KV存储的NoSQL做为练手。
因此,选择啦一些优秀的开源项目做为参考:
- titan A Distributed Redis Protocol Compatible NoSQL Database
- tidb TiDB is an open source distributed HTAP database compatible with the MySQL protocol
- tikv Distributed transactional key-value database, originally created to complement TiDB
- etcd Distributed reliable key-value store for the most critical data of a distributed system
- badger Fast key-value DB in Go.
以上项目有很大的参考性意义。
第一阶段:
编写基础的TCP接受功能,能满足 Redis 自带压力测试工具 redis-benchmark 的压力测试
通过 基础的 net 库测试 、 evio 库、badger 读写 进行性能测试
主要代码参考:
- [evio]( https://github.com/tidwall/evio )
- [net]( https://golang.google.cn/pkg/net/ ) Examples
第二阶段:
主要查阅啦 titan 的源代码,了解啦Redis协议(RESP)的解析方法。
主要代码目录是:
encoding 包代码 Redis 协议解析
client.go 获取TCP请求内容
第三阶段:
Etcd Raft 代码查看
主要代码参考:
- etcd
第四阶段:
代码整合开发具备:
基础的:SET/GET/PONG 命令支持