The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
Aidenboss

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

  •  
  •   Aidenboss · Mar 27, 2022 · 2184 views
    This topic created in 1513 days ago, the information mentioned may be changed or developed.

    一直在迭代自己的 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 replies    2022-03-28 12:40:51 +08:00
    ToBeHacker
        1
    ToBeHacker  
       Mar 27, 2022
    大概看了一遍,非常赞
    Aidenboss
        2
    Aidenboss  
    OP
       Mar 28, 2022
    @ToBeHacker 感谢支持。 😀😀😀
    dacapoday
        3
    dacapoday  
       Mar 28, 2022
    看到部分指令和 Redis 类似,有考虑直接兼容现有的 Redis Client 吗?
    LoNeFong
        4
    LoNeFong  
       Mar 28, 2022
    已 star
    Aidenboss
        5
    Aidenboss  
    OP
       Mar 28, 2022
    @LoNeFong 感谢支持
    Aidenboss
        6
    Aidenboss  
    OP
       Mar 28, 2022
    @dacapoday 好问题。首先 SDB 和 redis 定义还不太一样。然后 redis 的协议对 SDB 还是比较累赘的。所以目前没有支持的打算。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   840 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 21:00 · PVG 05:00 · LAX 14:00 · JFK 17:00
    ♥ Do have faith in what you're doing.