分布式数据库,挂掉两台机器会发生什么

本文探讨分布式数据库在挂掉一台或两台机器时的可用性和数据安全性。分布式数据库通过Paxos或Raft协议解决主备架构的容灾问题,但在某些模型下,挂掉两台机器可能导致数据不可用。文章分析了不同调度策略对可用性的影响,强调了业务可用性与数据可用性的区别,并提出表组、本地索引等技术在提升稳定性中的作用。最后指出,云服务相比自建数据库在物理分布和性能一致性上更具优势。
摘要由CSDN通过智能技术生成

挂一部分机器,不会丢数据、不会不可服务,是对现代数据库的一个比较基本的要求。

对于早期的单机数据库,一般使用主备架构。主备架构有很多的缺陷,并且这些缺陷是无解的。穿过主备架构里各种“优化”的名词,最后也无非是选择一碗毒药而已,这几个毒药包括:

  1. 脑裂,两个节点同时写入的冲突数据无法合并,只能丢掉一部分。想要不脑裂?那只能牺牲可用性。
  2. 同步复制,备机不可用的情况下,算不算写入成功?算,可能丢数据;不算,备机不可用==集群不可用,牺牲可用性。
  3. 异步复制,这完全躺平了,不考虑一致性。
  4. 所谓semi-sync等方案,也属于主备架构的一种。
  5. 业务自己去容错,做针对自己业务场景的对账、补偿等方案。

其实可以看出,主备架构是CAP理论做取舍的重灾区,一致性和可用性之间的关系特别矛盾。所谓一致性和可用性“兼顾”的主备方案,实际上是“兼不顾”。

最佳实践:在这个时代,但凡数据有一定的重要性,都不应该选择主备架构的产品。

分布式数据库,除了扩展性之外,解决传统数据库主备结构的容灾问题也是其主要任务。Paxos\Raft(包括其他变种协议)成为了主流选择。其共通点是,每份数据会存在三个副本,并且能够保证在一个副本挂掉的情况下,不影响可用性,并且不会出现任何一致性问题(脑裂、丢数据、丢更新等)。

本文无意去解析Paxos\Raft协议,此类文章已多如牛毛。但有个疑问是,是否一个数据库只要使用了Paxos\Raft协议,那就一定是安全稳定可靠的呢?

我们将探讨几个问题:

  1. 除了协议本身,还有什么样的因素影响分布式数据库的可用性
  2. 如何计算不同架构的分布式数据库的可用性
  3. KV层的可用性和关系型数据库的可用性是否等价
  4. 数据库的可用性和应用的可用性是否是等价的

从1+1=2说起

我们先从一个最简单的例子说起。假如有以下的数据库结构:

请问,当挂一个节点和两个节点的情况下,可用性分别是? 显而易见,挂一台机器的情况下,可用性是100%;挂两台机器的情况下,可用性是0%,所有数据都不可用,如果这两台机器被彻底的摧毁,那代表所有数据都丢失了。

调度就是一个填图游戏

假如我们有6台机器,我们想将数据库部署在这6台机器上,进一步提升扩展性和容灾性:

  1. 为了提升扩展性,我们会对数据进行分片
  2. 每个分片需要存在三个副本
  3. 为了保证容灾,每个分片的三个副本需要分配在不同的机器上

假如我们把数据切成了12个分片,共有12*3=36份副本:

下面我们来做一个填图游戏,将上面的副本填充到下面的6台机器中(需满足上面的约束,并且每台机器分配到6个副本),你能想到多少不同的填充方式:

模型1,完全的随机调度

我们均匀的将12个leader副本分散在集群中,每个节点分配到两个leader副本,除了这两个限定条件,分片与分片之间的调度是无关系的。

目前市面上常见的使用分布式KV+SQL的分布式数据库,一般使用的都是此类模型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值