未分类 · 2024年5月28日 0

深入了解无冲突复制数据类型 (CRDTs)【】

原作:Redis,2022年3月17号

原文:redis.com/blog/diving-i

异地双活分布式(Active-Active Geo-Distribution )架构允许将 Redis 数据库集群实例和数据中心放置在靠近用户的位置,无论他们身在何处。将只读副本放置在离用户更近的位置是启用实时响应的正确方法。但对于写入密集型应用程序,这还不够。那如何开发异地双活分布式群集呢?

无冲突复制数据类型 (CRDTs) 简介

CRDT(也称为收敛复制数据类型或交换复制数据类型)是一系列复制数据类型,具有一组通用属性,使操作始终收敛到所有副本之间一致的最终状态。为了确保冲突永远不会发生(没有冲突解决的概念)并在应用程序中导致问题,对 CRDT 数据类型的操作必须遵循一组特定的代数属性。

当你创建启用了CRDT 的Redis数据库时,CRDT 在 Redis Enterprise 中生效,因为标准Redis命令会被替换为与之等效的 CRDT 命令。让我们看一下具有 CRDT 等效项的 Redis 数据结构,以及异地双活分布式复制带来的细微差别。

Redis Sets

Redis Sets 类似于标准库中你最喜欢的编程语言提供的功能,提供专门的操作来添加和删除元素、检查元素是否是集合的一部分,以及执行集合交集、并集和差分。下面是调用实际 Redis 命令时的结果:

// Create a set:
> SADD fruits apple pear banana
3
// Test if it contains apple:
> SISMEMBER fruits apple
1

去除其中一种水果:

> SREM fruits banana
1
// Test if it’s still present:
> SISMEMBER fruits banana
0

在启用了 CRDT 的 Redis 企业数据库中运行相同的命令将显示相同的行为,但背后发生的完全不同。

在 CRDT 数据库中,所有副本节点都可以独立地将更改应用于“fruits”键。这使你能够编写真正的地理分布式应用程序。缺点是写入值时也会遇到“复制滞后”。此方法有利于为地理分布式应用程序和实现数据一致性提供显著帮助。

CRDT Sets & Redis Enterprise

在启用了 Redis 企业版 CRDT 的数据库中,Sets操作在几个附加规则下生效,其中两个最重要的规则适用与合并来自不同节点的操作时:

  1. 添加胜于删除。
  2. 删除操作仅适用于执行命令的副本已看到的元素。

第二条规则有时称为“观察到的删除”(observed remove)规则,这意味着你只能删除在发出命令时能够观察到的项。

有关复制滞后和一致性模型的说明

虽然最终所有副本节点都将收敛到相同的最终状态,但在短期内,比如说发送到 ReplicaEU 的命令可能尚未传播到 ReplicaUS。这种情况虽然通常很短暂,但这就是 CRDT 数据结构必须对冲突解决策略进行硬编码的原因。同一 CRDT 数据库中的所有副本将不断同步其状态,以提供尽可能一致的数据集视图,但需要注意的是,CRDT 对于确保网络分区时的高可用性也很有用。

这意味着要在系统中实现更好的弹性,你需要考虑在长时间间隔内系统尚未完全同步的可能性。这使得 CRDT 成为最终一致性的一种形式。这通常被描述为强最终一致性,因为它比基于仲裁配额(quorum quotas)的更常见的复制类型更有效。(详参Redis page on Active-Active Geo-Distribution)。

为什么使用 CRDT?

CRDT 将复制作为交换操作执行。这具有理想的效果(对于分布式系统),因为能做到复制顺序无关。以任意顺序复制从根本上重新构建了许多分布式系统争用条件,并且其有用性随着异步(例如,分布)的增加而增加。在许多系统中,某些数据的拷贝需要存储在副本上。此类系统包括:

文章来源于互联网:深入了解无冲突复制数据类型 (CRDTs)

打赏 赞(0) 分享'
分享到...
微信
支付宝
微信二维码图片

微信扫描二维码打赏

支付宝二维码图片

支付宝扫描二维码打赏

文章目录