分布式键值系统的核心组件与技术 #22
armingli
announced in
Programming
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
数据分区
使用
一致性哈希
进行数据分区。数据复制
为了实现高可用性和可靠性,数据必须在
N
个服务器上异步
复制。N
是一个可配置的参数。当一个键被映射到哈希环上的某个位置后,从这个位置开始顺时针遍历环,找到先遇到的N个服务器来存储副本。使用虚拟节点时,最先找到的N个节点对应的物理服务器数量有可能小于N,针对该问题,在执行遍历逻辑时,只选择不重复的服务器。
一致性
数据被复制到多个节点上,副本之间必须同步。
仲裁一致性(Quorum Consensus)可以保证读写操作的一致性。
一致性模型:
强一致性模型通常是通过强调一个副本在当前写操作成功之前不再接收新读写操作来实现的。它可能会阻塞新的操作,对于高可用系统不完美。
推荐最终一致性模型,Dynamo和Cassandra也是采用该模型。
不一致性的解决方案
版本控制和向量时钟用来解决这些不一致问题。
处理故障
Gossip协议
,是更好的方案。Gossip协议发现故障后,系统需要采取某种机制来确保可用性。
一种叫**“松散仲裁”(Sloppy Quorum)1的技术被用来提高可用性。这种技术选择在哈希环上最先发现的W个正常工作的服务器进行写操作,并选择在哈希环上最先发现的R个正常工作的服务器进行读操作。忽略发生故障的服务器。
如果一个服务器因为网络或故障不可用,另一个服务器会临时处理请求,当该服务器恢复运行时,变更会被推送回来以实现数据一致性。这个过程叫暗示性传递**(Hinted Handoff)。
如果副本永久不可用了,通过实现反熵协议(Anti-entropy Protocol)来保持副本同步。反熵需要比较副本上的每条数据并将每个副本更新到最新的版本。Merkle树用来检测不一致性并最小化数据传输量。
在多个数据中心之间复制数据至关重要。
写路径
基于Cassandra架构:
读路径
基于Cassandra架构:
系统架构图
get(key)
和put(key, value)
。Footnotes
Dynamo: Amazon’s Highly Available Key-value Store ↩ ↩2
SStable ↩
Beta Was this translation helpful? Give feedback.
All reactions