如何理论上从零开始设计一个去中心化的分布式数据库集群

本文探讨了去中心化分布式数据库在没有全局管理者的情况下,如何利用Gossip协议维持节点间数据一致性。通过分析Cassandra、Redis和Hbase的实现方式,阐述了Gossip协议在节点信息同步和生产数据一致性中的应用。Cassandra使用Merkle Tree减少网络传输负担,而Redis和Hbase则依赖主从集群。文章强调在高一致性要求的生产环境中,Redis的主从备份策略更具优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网络上有句流行语 : 集齐七颗龙珠,便可召唤神龙。那么问题来了,如果从零开始设计一套分布式去中心化的数据库集群需要多少颗“龙珠”呢?答案是 6 颗,对你没听错,不是 998 ,也不是 888 ,只需 6 颗龙珠,你也可以从理论上拥有一个私人订制的分布式去中心化的数据库集群系统,还犹豫什么吗,赶快往下看。

       怎么设计?我们需要从一个用户的角度去看问题,什么叫用户的角度,说白了就是一个key-value对象时如何存储到数据库中,然后如何从一个数据库中读取出来,最后这个数据库要实现一定的容灾能力。

整个流程就是按照一个key-value从客户端发送过来。第一,这个key-value对象的逻辑数据结构是怎么设计的,这就用到了龙珠one:key-value的逻辑数据结构设计,个人觉得列族模型相对灵活。第二,该对象是如何找到对应的服务节点的,用到了龙珠two:分发策略设计,主要是一致性哈希。第三,数据到了服务节点后在数据库内部是如何存储的并且当要查询某个key对应的value值时是如何快速实现的,这个用到了龙珠tree:存储和查找key-value设计,哈希函数的应用是关键。第四,这份数据是怎样落地到磁盘的,这就用到了龙珠four:持久化策略设计,绕不开的是重做日志。第五,由于整个集群是去中心化的,保持节点信息和生产数据的一致性就成为个难题,这就用到了龙珠five:节点间一致性设计,核心就是Gossip协议实现最终的一致性。第六,是不管是不是分布式数据库都配置的那就是备份和容灾策略,用到了龙珠six:备份和负载均衡设计,相对于多份副本都在一个集群上,我更倾向于通过主从集群进行备份。

 

龙珠one:key-value的逻辑数据结构设计(列族模型)

    大家都知道分布式数据库的基本的逻辑数据结构都是key-value键值对设计,区别只在于value值的数据结构不同,我们看看三个标本数据库是怎么设计的。

    Cassandra是列族模型,简单来说就是在key下面还存在另一层维度,那就是列,一个key下面有多个列(而且数量可以不固定),每个列对应一个value值,所以你可以吧多个列和这些列对应的value值作为一个整体当做是这个key对应的value值。

    Redis呢?redisvalue值的数据结构是可变的,可以直接是个string,也可以是个容器比如listset等,当value是个容器时,跟cassandra的列族的概念差不多,都是key对应有多条记录,每条记录还有自己的唯一标识。

    Hbasecassandra很类似,都是列族模型。就不再细说了。

    个人觉得从实际情况来看列族模型更灵活。

龙珠two:分发策略设计(一致性哈希算法或者它的变种)

       所谓分布式,那就是以为着数据要分散存储在不同主机不同节点上,所以任何分布式数据库首先要解决的就是如何把客户端发送过来的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值