SDB 2.0.0 发布,增加了主从架构

yemingfeng · · 902 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

一直在迭代自己的 [SDB]( https://github.com/yemingfeng/sdb/)。 1.x 版本发布后,SDB 已经是一个可靠的数据库了。并在 2022.03.10 增加了 cli 功能,提供 SDB 的易用性。之后我们便开始思考如何为 SDB 增加分布式的能力。 参考 redis 的实现,SDB 优先实现了主从架构,也在 v2.0.0 正式发布。 实现的过程比较曲折,golang 语言下可靠的 raft 库并不多,只找到了两种候选方案,并对候选方案做了以下结论: - [hashicorp raft]( https://github.com/hashicorp/raft) - 使用在 etcd 中,拥有广泛的使用者。然而接入下来发现,写入性能并不高。查阅了该项目的官方文档,他们只要提供的是可靠性,而不是性能。 - [dragonboat raft]( https://github.com/lni/dragonboat) - 由国人所写,号称是最快的 multi raft 库。 为了支持国人项目,SDB 选择了 dragonboat raft ,写入的 QPS 从 12k 下降到了 5k ,但读能力是不受影响的,而且也可以水平扩展读能力,收益还是大于损耗的。 架构图如下: <img alt="architecture" src="https://github.com/yemingfeng/sdb/raw/master/docs/architecture.png" width="50%" height="50%"/> - SDB 集群中同时只有一个 master 节点,提供写入和读取的能力。以及 N 个 slave 节点提供读取能力。 - 当有读取请求的时候,可以请求集群中的任意节点,该节点会直接返回存储于该节点的数据。在主从节点数据同步的过程中,会因为同步时延带来数据的不一致。 - 当有写入请求的时候,可以请求阶段中的任意节点。如果请求的节点是主节点,则直接发起提案。若请求的节点是从节点,则该节点会将写入请求转发到主节点中,由主节点发提案。 - **当需要使用读写分离的时候,可以创建多个 sdb grpc client ,连接对应的节点即可实现。**

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

902 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传