分布式系统的设计中会涉及到许多的协议、机制用来解决可靠性问题、数据一致性问题等,Quorum 机制就是其中的一种。我们通过分布式系统中的读写模型来简单介绍它。
分布式系统中的读写模型
分布式系统是由多个节点(指代一台服务器、存储设备等)构成,由于网络异常、宕机等节点并不能保证正常工作,特别是在节点数量很大的时候,出现异常状况的节点几乎是肯定的。为了保证系统的正常运行,能够提供可靠的服务,分布式系统中对于数据的存储采用多份数据副本(注:这里的副本并非只用来备份,它可参与提供系统服务)来保证可靠性,也就是其中一个节点上读取数据失败了那么可以转向另外一个存有相同数据副本的节点读取返回给用户。这个过程对于用户来说是透明的。那么随之而来的就会带来数据的副本数据的不一致性,例如:用户提交一次修改后,那么原先保存的副本显然就与当前数据不一致了。解决这个问题最简单的方法 Read Only Write All ,就是在用户提交修改操作后,系统确保存储的数据所有的副本全部完成更新后,再告诉用户操作成功;而读取数据的时候只需要查询其中的一个副本数据返回给用户就行了。 在很少对存储的数据进行修改的情形下(例如存档历史数据供以后分析),这种解决方案很好。如遇到经常需要修改的情形,写操作时延时现象就很明显,加上并发或者连续的执行的话效率就可想而知了。实质,这是由于 Write 和 Read 负载不均衡所致,Read 很轻松,Write 深表压力!
那么有没有一种方案能够不需要更新完全部的数据,但又保证返回给用户的是有效数据的解决方案呢?Quorum机制便是一种选择。
从小学的抽屉原理说起
为什么从抽屉原理说起?一来大家对这个比较熟悉,二来它与Quorum机制有异曲同工的地方。回顾抽屉原理,2个抽屉每个抽屉最多容纳2个苹果,现在有3个苹果无论怎么放,其中的一个抽屉里面会有2个苹果。那么我们把抽屉原理变变型,2个抽屉一个放了2个红苹果,另一个放了2个青苹果,我们取出3个苹果,无论怎么取至少有1个是红苹果,这个理解起来也很简单。我们把红苹果看成更新了的有效数据,青苹果看成未更新的无效数据。便可以看出来,不需要更新全部数据(并非全部是红苹果)我们就可以得到有效数据,当然我们需要读取多个副本完成(取出多个苹果)。这就是Quorum机制的原型,其实质是将Write All 的负载均衡到 Read Only 上。
Quorum机制
苹果抽屉理论只是对它的理解,引用参考文献中对Quorum的定义:
简单概括说来就是, Quorum 是一种集合 , l 中任意取集合S,R ,S,R 都存在交集。当然,本文并不打算多讲它的数学定义方面的理解,这里只是提供个信息,看不懂也没事联系到前面的分布式读写模型就能很容易理解这个了。
回到文章的开头,我们来看看是怎么运用Quorum机制来解决读写模型中读写的负载均衡。其实,关键的是更新多少个数据副本后,使得读取时总能读到有效数据?回想我们的的红苹果,假设总共有 N 个数据副本,其中 k 个已经更新,N-k 个未更新的,那么我们任意读取 N-k+1 个数据的时候就必定至少有1个是属于更新了的k个里面的,也就是 Quorum 的交集,我们只需比较 读取的 N-k+1 中版本最高的那个数据返回给用户就可以得到最新更新的数据了。
那么对于写模型呢?我也只需要完成 k个副本的更新后,就可以告诉用户操作完成而不需要 Write All 了,当然告诉完用户完成操作后,系统内部还是会慢慢的把剩余的副本更新,这对于用户是透明的。可以看到,我们把 Write 身上的部分负载转移到了Read上,Read读取多个副本,使得Write不会过于劳累,不好的是弱化了分布式系统中的数据一致性。至于转移多少负载比较合适,这个需要根据分布式系统的具体需求中对数据一致性的要求。不过,CAP 理论告诉我们没有完美的方案。
相关推荐
Corosync使用Quorum机制来决定集群状态,当检测到节点故障时,能迅速调整集群配置,防止脑裂现象(Split Brain)发生。 3. DRBD (Distributed Replicated Block Device) DRBD是一种分布式存储解决方案,可实时同步...
Cassandra使用Quorum机制来实现高可用性,Quorum是指在分布式系统中,需要大多数节点同意才能确认写操作的成功。 Cassandra支持两种一致性模型:强一致性(Strong Consistency)和最终一致性(Eventual Consistency...
Write-all-read-one是一种简单的Quorum机制实现,其中写操作需要所有副本参与,而读操作只需要访问任一副本即可。 **2.4.3 Quorum定义** Quorum的定义是系统中满足一致性的最小集合,通常要求至少包含一半以上的...
- **Quorum机制**:为了保证强一致性,每次写操作必须得到半数以上的服务器响应,这被称为Quorum机制。 - **会话和心跳**:客户端与Zookeeper服务器建立会话,通过心跳保持连接,检测服务器状态。 3. **Zookeeper...
本文档中介绍的关键知识点涵盖了分布式系统的核心概念、数据分布策略、副本协议、lease机制、Quorum机制、日志技术、两阶段提交协议、基于MVCC的分布式事务以及Paxos协议和CAP理论等。 在分布式系统的模型部分,...
在实时流数据处理中,Quorum机制可以确保流数据写入分布式存储系统后,只要法定人数的副本写入成功,就认为写入成功。 ### 状态管理与故障恢复 状态管理对于实时流数据处理来说非常重要,它涉及维护流数据处理过程...
GPFS供应三套不同的quorum机制来推断系统当前的状态,其中File Descriptor Quorum是系统内置的,不能做配置,另外两种Node quorum(仲裁节点机制)和Tiebreaker Disk quorum(仲裁磁盘机制)方式只能二者选其一,...
1. **Quorum机制**:Corosync通过Quorum机制确保集群的稳定运行。当超过半数的节点正常工作时,集群可以继续提供服务。1.4.9版本可能对Quorum算法进行了优化,以提高在复杂网络环境下的决策效率和稳定性。 2. **...
总的来说,云原生数据库通过创新的架构设计,如日志优化、链式复制、Quorum机制、计算与存储分离等,解决了传统数据库在云环境中的性能问题,提高了数据一致性和可用性,降低了运维成本。这些技术的出现,不仅推动了...
GPFS 提供三套不同的 quorum 机制来判断系统当前的状态,其中 File Descriptor Quorum 是系统内置的,不能做配置,另外两种 Node quorum(仲裁节点机制)和 Tiebreaker Disk quorum(仲裁磁盘机制)方式只能二者选其...
ZooKeeper 的集群规则是通过 quorum 机制来实现的,quorum 机制可以保证 ZooKeeper 的高可用性。 ZooKeeper 的服务器角色可以分为 Leader、Follower 和 Observer 三种役割, ZooKeeper 的会话管理可以实现客户端与...
6. **Quorum 机制**:为了保证高可用性,Zookeeper 采用了 Quorum 机制,通常部署为奇数个服务器节点。只有半数以上的节点同意,操作才能成功,这样即使部分节点故障,系统仍然可以正常工作。 7. **API 设计**:...
- **Quorum机制**:为了确保数据的高可用性,BookKeeper采用多数投票的Quorum机制。这意味着每次写操作都需要被多数Bookie确认,以防止数据丢失或不一致。 - **ZooKeeper集成**:BookKeeper依赖于ZooKeeper进行元...
Dynamo采用了多种算法来解决数据存储和处理的难题,包括改进的一致性哈希算法以实现数据均衡分布,参数可调的弱quorum机制以进行数据备份,向量时钟以处理数据冲突,Gossip协议以进行成员资格及错误检测,Hinted ...
3. Quorum:ZooKeeper 通过Quorum机制保证数据的一致性和高可用性,每个ZooKeeper 集群由多个服务器节点组成,大多数服务器节点的共识决定ZooKeeper 的决策。 二、ZooKeeper 的主要功能 1. 命名服务:ZooKeeper ...
31.分布式文档系统_图解写一致性原理以及quorum机制深入剖析.avi将深入讨论ES如何保证写入数据的一致性,其中quorum机制是关键。70.内核原理探秘_继续优化写入流程实现durability可靠存储(translog,flush).avi则...
数据库高可用架构设计的目标是平衡数据一致性和服务可用性,通过不断的技术创新,如Aurora的共享存储和Quorum机制,以及MGR的多主复制和冲突检测,来提升系统的可靠性和性能。随着云技术的发展,未来的数据库高可用...
5. **Quorum机制**:ZooKeeper采用Quorum机制保证高可用性,集群中的每个服务器都参与投票决策,确保大多数服务器的状态一致。 **ZooKeeper 3.4.14安全更新** 1. **漏洞修复**:这个版本的主要目标是对已知的安全...
它的工作流程包括数据的读写和一致性保证,通过 Ensemble(一组 Bookie)和 Quorum 机制确保即使在部分 Bookie 故障时也能保证数据完整性。 4. 横向扩展与一致性: - Pulsar 和 Kafka 都支持横向扩展,但 Pulsar ...
云原生: CnosDB 有原生的分布式设计、数据分片和分区、存算分离、Quorum 机制、Kubernetes 部署和完整的可观测性,具有最终一致性,能够部署在公有云、私有云和混合云上。提供多租户的功能,有基于角色的权限控制。...