分布式系统一致性模式揭秘

分布式系统将数据复制到多个服务器上,以获得更好的容错性、可扩展性和可靠性。一致性模式(一致性模型)是一组用于在分布式系统中进行数据存储和数据管理的技术。一致性模式决定了数据在分布式系统中的传播。因此,一致性模式将影响分布式系统的可扩展性和可靠性。在分布式系统中有许多一致性模式。选择哪种一致性模式取决于系统的需求和使用案例,因为每种一致性模式都有其优点和缺点。一致性模式必须是多数据中心系统架构的核心,因为在多个数据中心之间维护一致性并不是一个简单的任务。一致性模式可以大致分为以下几类:

  • 强一致性
  • 最终一致性
  • 弱一致性

对于重视高可用性和性能而不是一致性的分布式系统,最终一致性模型是最佳选择。当需要在分布式系统中无延迟地查看相同的数据视图时,强一致性是最佳的一致性模型。总的来说,每种一致性模型都适用于不同的使用案例和系统要求。强一致性 在强一致性模式中,对任何服务器执行的读操作必须始终检索包含在最新写操作中的数据。强一致性模式通常在多个服务器之间同步复制数据。换句话说,当在服务器上执行写操作时,其他每个服务器上的后续读操作必须返回最新写入的数据。强一致性的好处如下:

  • 简化应用程序逻辑。
  • 增加数据持久性。
  • 保证系统各处的一致数据视图。

强一致性的局限性如下:

  • 服务的可用性降低。
  • 延迟增加。
  • 资源密集型。
image.png

强一致性为了在数据复制中达到强一致性,工作流程如下:

  1. 服务器(客户端)对主数据库实例执行写操作。
  2. 主实例将写入的数据传播到副本实例。
  3. 副本实例向主实例发送确认信号。
  4. 主实例向客户端发送确认信号。

强一致性模型的典型用例如下:

  • 文件系统。
  • 关系数据库。
  • 如银行等金融服务。
  • 半分布式共识协议,如两阶段提交(2PC)。
  • 完全分布式共识协议,如Paxos。

例如,用户的银行账户余额的任何变化都必须立即复制以提高持久性和可靠性。Google的Bigtable和Google的Spanner数据库是强一致性的实际应用。最终一致性 在最终一致性模式中,当对服务器执行写操作时,对其他服务器执行的立即后续读操作不一定返回最新写入的数据。系统最终会收敛到相同的状态,其他服务器在后续的读操作中会返回最新的数据。最终一致性模式通常在多个服务器之间异步复制数据。用通俗的话说,任何数据更改只会最终在系统中传播,预期在数据收敛发生之前都会出现旧的数据视图。最终一致性可以通过多主或无主复制拓扑实现。系统通常在几秒钟内收敛到相同的状态,但时间框架取决于实现和系统要求。最终一致性模式的好处如下:

  • 简单。
  • 高可用性。
  • 可扩展。
  • 低延迟。

最终一致性的缺点如下:

  • 较弱的一致性模型。
  • 潜在的数据丢失。
  • 潜在的数据冲突。
  • 数据不一致。
image.png

最终一致性 为了在数据复制中实现最终一致性,工作流程如下:

  1. 客户端对主数据库实例执行写操作。
  2. 主实例向客户端发送确认信号。
  3. 主实例最终将写入的数据传播到副本实例。

最终一致性模式是数据过时性和可扩展性之间的权衡。最终一致性的典型用例如下:

  • 搜索引擎索引。
  • URL缩短器。
  • 域名服务器(DNS)。
  • 简单邮件传输协议(SMTP)。
  • 例如Amazon S3的对象存储。
  • 例如Facebook上的评论或帖子。
  • 分布式通信协议,如流言协议。
  • 领导者-跟随者和多领导者复制。
  • 分布式计数器和实时评论服务。

例如,域名记录的任何更改都会被DNS最终复制。如Amazon Dynamo和Apache Cassandra的分布式数据库是最终一致性模式的实际应用。最终一致性不是设计缺陷,而是为满足某些使用案例而提供的功能。业务所有者应确定应用数据是否适合最终一致性模式。

弱一致性

在弱一致性模式中,当对服务器执行写操作时,对其他服务器执行的后续读操作可能返回或不返回最新写入的数据。换句话说,执行了最大努力的数据传播 - 数据可能不会立即传播。在可以返回最新写入的数据之前,分布式系统必须满足各种条件,如时间的流逝。弱一致性的优点如下:

  • 高可用性。
  • 低延迟。

弱一致性的缺点如下:

  • 可能的数据丢失。
  • 数据不一致。
  • 数据冲突。
image.png

弱一致性写后缓存(写回)模式是弱一致性的一个例子。如果缓存在将数据传播到数据库之前崩溃,则数据将丢失。写后缓存模式的工作流程如下:

  1. 客户端对缓存服务器执行写操作。
  2. 缓存将接收到的数据写入消息队列。
  3. 缓存向客户端发送确认信号。
  4. 事件处理器异步将数据写入数据库。

弱一致性的常见用例如下:

  • 实时多人视频游戏。
  • 互联网电话协议 (VoIP)。
  • 实时流。
  • 缓存服务器。
  • 数据备份。

例如,由于网络连接差导致的直播流中的丢失的视频帧不会重新传输。一致性模式的权衡 与每种一致性模式相关的权衡可以概述如下:

image.png

分布式系统中的其他一致性模型

分布式仲裁可以用来实现各种一致性模式。仲裁参数的配置决定了将实现的一致性模式。

线性化

在线性化模式中,写入服务器的数据必须立即可见(在写操作的开始和结束之间)给其他服务器的后续读操作。线性化是强一致性的一个变体,也被称为原子一致性。以下技术可用于实现线性化:

  • 单一领导者同时处理读和写操作。
  • 分布式共识算法如Paxos。
  • 分布式仲裁。

线性化的优点如下:

  • 使分布式系统表现得像非分布式系统。
  • 应用程序使用简单。

线性化的缺点如下:

  • 性能下降。
  • 有限的可扩展性。
  • 可用性降低。

线性化模式的一个流行用例是在分布式系统中实现用户ID字段的唯一性约束。

因果一致性

在因果一致性模式中,其他服务器准确地观察到相关的事件 (因果关系),而与其他服务器无关的事件可能没有特定的顺序被观察到。 因果一致性是最终一致性的一个变体,并在最终一致性和强一致性之间出现为中间地带。在实时并行发生的因果无关的写操作被称为并发事件。因果一致性模式不保证并发事件的顺序。因果一致性模式中的因果关系可以通过向量时钟来实现。因果一致性的好处如下:

  • 低延迟。
  • 降低同步成本。
  • 高可用性。
  • 相对更强的一致性。

因果一致性模式的广泛用例如下:

  • Apache Cassandra提供带有因果一致性的轻量级事务。
  • Bayou分布式数据库中的数据传播。
  • Reddit上的评论线程。

例如,在Reddit上对同一评论线程的回复必须因果有序。但是,无关的评论线程可以按任何顺序显示。因果一致性模式也用于例如Slack的实时聊天服务。总结 在同一个分布式系统的不同部分可以使用多种一致性模式。在选择合适的一致性模式时,没有银弹,只有权衡。一致性模式的最佳选择取决于特定的用例和要求。

作者: N K

更多技术干货尽在wx“云原生数据库”

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,194评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,058评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,780评论 0 346
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,388评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,430评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,764评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,907评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,679评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,122评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,459评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,605评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,270评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,867评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,734评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,961评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,297评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,472评论 2 348

推荐阅读更多精彩内容