V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
Aidenboss
V2EX  ›  Go 编程语言

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

  •  
  •   Aidenboss · 2022-03-27 00:18:55 +08:00 · 1541 次点击
    这是一个创建于 761 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一直在迭代自己的 SDB

    1.x 版本发布后,SDB 已经是一个可靠的数据库了。并在 2022.03.10 增加了 cli 功能,提供 SDB 的易用性。之后我们便开始思考如何为 SDB 增加分布式的能力。

    参考 redis 的实现,SDB 优先实现了主从架构,也在 v2.0.0 正式发布。

    实现的过程比较曲折,golang 语言下可靠的 raft 库并不多,只找到了两种候选方案,并对候选方案做了以下结论:

    • hashicorp raft
      • 使用在 etcd 中,拥有广泛的使用者。然而接入下来发现,写入性能并不高。查阅了该项目的官方文档,他们只要提供的是可靠性,而不是性能。
    • dragonboat raft
      • 由国人所写,号称是最快的 multi raft 库。

    为了支持国人项目,SDB 选择了 dragonboat raft ,写入的 QPS 从 12k 下降到了 5k ,但读能力是不受影响的,而且也可以水平扩展读能力,收益还是大于损耗的。

    架构图如下: architecture

    • SDB 集群中同时只有一个 master 节点,提供写入和读取的能力。以及 N 个 slave 节点提供读取能力。
    • 当有读取请求的时候,可以请求集群中的任意节点,该节点会直接返回存储于该节点的数据。在主从节点数据同步的过程中,会因为同步时延带来数据的不一致。
    • 当有写入请求的时候,可以请求阶段中的任意节点。如果请求的节点是主节点,则直接发起提案。若请求的节点是从节点,则该节点会将写入请求转发到主节点中,由主节点发提案。
    • 当需要使用读写分离的时候,可以创建多个 sdb grpc client ,连接对应的节点即可实现。
    6 条回复    2022-03-28 12:40:51 +08:00
    ToBeHacker
        1
    ToBeHacker  
       2022-03-27 11:14:03 +08:00
    大概看了一遍,非常赞
    Aidenboss
        2
    Aidenboss  
    OP
       2022-03-28 00:14:11 +08:00
    @ToBeHacker 感谢支持。 😀😀😀
    dacapoday
        3
    dacapoday  
       2022-03-28 10:08:31 +08:00
    看到部分指令和 Redis 类似,有考虑直接兼容现有的 Redis Client 吗?
    LoNeFong
        4
    LoNeFong  
       2022-03-28 10:53:06 +08:00
    已 star
    Aidenboss
        5
    Aidenboss  
    OP
       2022-03-28 12:40:12 +08:00
    @LoNeFong 感谢支持
    Aidenboss
        6
    Aidenboss  
    OP
       2022-03-28 12:40:51 +08:00
    @dacapoday 好问题。首先 SDB 和 redis 定义还不太一样。然后 redis 的协议对 SDB 还是比较累赘的。所以目前没有支持的打算。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1946 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 16:22 · PVG 00:22 · LAX 09:22 · JFK 12:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.