在这个博客系列中,我们将探讨最终的一致性,如果没有合适的词汇表,这个术语很难定义。这是许多分布式系统使用的一致性模型,包括XDB Enterprise edition。理解最终一致性需要两个概念:暗示切换队列和反熵,这两个概念都值得特别关注。

注:

本系列的第一部分(「分布式架构」最终一致性:暗示的切换队列)深入讨论了最终一致性的概念以及它在分布式计算中的重要性。你可以在这里读第一部分来复习。

第二部分

什么是反熵?

如果您阅读了本系列第一部分中的暗示切换队列,您已经知道暗示切换队列如何在数据节点中断期间保存数据并帮助您确保最终的一致性,但是在分布式系统中有很多方法会出错。尽管我们尽了最大的努力,仍然有丢失数据的方法,我们希望尽可能减少这种情况。进入保持最终一致性的后半部分:反熵(AE)。

如果我们反对熵,我们应该知道它是什么。根据互联网和我那些有科学头脑的朋友的说法,熵是由热力学第二定律定义的。基本上,随着时间的推移,有序系统趋向于更高的熵状态;因此,熵越高,无序越大。我们反对时间序列数据中的无序,因此反对熵。

忘记任何恐吓因素这个词本身有反熵只是一个服务,我们可以运行在XDB企业中检查不一致性。我们知道,当我们收到来自系统的信息时,我们可能会要求得到一致的答案。由于引入“漂移”的方式多种多样,我们需要一个能够识别和修复底层数据差异的英雄。AE可以成为那个英雄。

例1

让我们回到我们的经典集群:包含2个数据节点和一个复制因子为2的数据库的XDB Enterprise。

系统运行良好,发送数据以进行存储和复制。对于我们的数据来说,这是一个幸福的时刻,但有时我们必须努力做到这一点。分布式系统经常变化,而处理这种变化往往首先会干扰一致性。

系统中最常见的变化之一是硬件,所以让我们探索一条新的和改进的AE可以发挥作用的途径。假设节点2有一些坏硬件。也许它有缺陷或只是旧的,但它放弃了鬼魂在半夜(因为它当然会在半夜)。

当节点2脱机时,任何新的写入都会发送到HHQ,在那里它们等待节点2再次可用。读取被定向到节点1,它拥有与节点2相同的所有数据(因为我们的RF=2)。

这是我们的英雄,反熵的起源故事,它是作为我们能想到的所有边缘案例的解决方案而开发的,希望还有很多我们没有想到的。

在我们的示例中,我们的首要任务是使节点2重新联机,以便它可以恢复在系统中读取和写入数据的正确位置。我们可以使用InfluxDB Enterprise中的“replace node”命令将node 2与其新硬件重新连接起来。

在这种情况下,AE检查复制因子和碎片分布的组合,以查看是否所有应该存在的碎片都得到了适当的复制。在这种情况下,由于节点2有一个新的、快速的、空的且无缺陷的SSD,因此节点1上存在的所有碎片都被复制到节点2,并且HHQ中等待的任何数据都会被快速排出。我们的AE英雄已经确保两个节点返回相同的信息,并且存在适当数量的副本。哈扎!

例2

HHQ有一些实际的限制,但它不能永远保持。在XDB Enterprise中,它默认为10GB,这意味着如果大小超过10GB,最早的点将被删除,以便为新数据腾出空间。或者,如果数据在HHQ中存放的时间太长(xdb Enterprise中的默认值是168hrs),它将被丢弃。HHQ是为了临时中断和修复,可以很快解决,所以它不应该无限期地填补。它解决了最常见的情况,但HHQ只能承担这么多的负担。

在“故障”时间较长的场景中,我们希望相同的两个节点之间存在更大的数据漂移空间。如果一个节点关闭并且在很长一段时间内未被检测到,HHQ可能会超过存储、时间限制、并发或速率限制,在这种情况下,它要转发的数据将消失在遗忘中。不太理想。当然,可能会发生大量潜在的边缘情况:HHQ和AE服务的目标是提供一种方法,以确保最终的一致性,而不需要人类付出最小的努力。

在其他系统中,一旦节点2消失,用户就有责任确保节点得到修复并恢复到一致的状态,可能是通过手动识别和复制数据。说实话:谁有时间?我们有工作要做,还有华夫饼要吃。

从XDB Enterprise 1.5开始,AE检查集群中的每个节点,看看它是否拥有meta store所说的所有碎片。区别在于,如果缺少任何碎片,AE会从另一个拥有数据的节点复制现有碎片。任何丢失的碎片都会被服务自动复制。从XDB Enterprise 1.6开始,可以指示AE服务跨节点检查碎片中包含的数据的一致性。如果发现任何不一致,AE可以修复这些不一致。

在我们的第二个示例中,AE服务将节点1和2与从数据节点上的碎片构建的摘要进行比较。然后它会报告节点2丢失了信息,然后使用相同的摘要找出它应该拥有的信息。然后它将从好的shard节点1复制信息,以在节点2上填充它。砰!最终的一致性。

从更基本的角度来说,AE服务现在可以识别丢失或不一致的碎片并修复它们。这是自愈的最佳状态。不用担心集群的当前状态,我们可以调查失败的原因(在本例中,我们可能是在睡觉或吃华夫饼,尽管这并不总是那么简单)。

关于AE有一些重要的事情要知道。AE只能在至少有一个碎片副本可用时执行其英雄行为。在我们的示例中,RF为2,因此我们可以依赖Node 1来复制健康的shard。如果节点2有该碎片的部分副本,则比较这些碎片,然后在节点之间交换任何丢失的数据,以确保返回一致的答案。如果用户选择RF为1,那么他们会选择节省存储空间,但会错过高可用性,并且会受到更有限的查询量的限制。这也意味着AE将无法进行修复,因为一旦数据不一致,就没有真相的来源了。另一个警告是AE不会比较或修复热碎片,这意味着碎片不能有活动写入。热碎片更容易改变,在任何给定的时刻,新数据的到来都会影响AE的摘要比较。当碎片变冷或不活动时,数据不会改变,AE服务可以更准确地比较摘要。

摘要

最终一致性是一个保证高可用性的模型,如果我们的数据一直可用,那么它需要一直保持准确。像任何优秀的超级英雄组合一样,HHQ和AE在一起更好,在后台打击数据不一致的犯罪,这样我们就可以信任我们的数据,继续处理对我们来说重要的事情(即华夫饼)。

本文 http://jiagoushi.pro/node/1455
讨论:请加入知识星球【首席架构师圈】或者加微信小号【jiagoushi_pro】或者加QQ群【11107777】
公众号 【jiagoushipro】
【首席架构师智库】
精彩图文详解架构方法论,架构实践,技术原理,技术趋势。
我们在等你,赶快扫描关注吧。
微信小号 【cea_csa_cto】
50000人社区,讨论:企业架构,云计算,大数据,数据科学,物联网,人工智能,安全,全栈开发,DevOps,数字化.

QQ群 【11107767】深度交流企业架构,业务架构,应用架构,数据架构,技术架构,集成架构,安全架构。以及大数据,云计算,物联网,人工智能等各种新兴技术。
加QQ群,有珍贵的报告和干货资料分享。

视频号 【首席架构师智库】
1分钟快速了解架构相关的基本概念,模型,方法,经验。
每天1分钟,架构心中熟。

知识星球 向大咖提问,近距离接触,或者获得私密资料分享。 知识星球【首席架构师圈】
微信圈子 志趣相投的同好交流。 微信圈子【首席架构师圈】
喜马拉雅 路上或者车上了解最新黑科技资讯,架构心得。 【智能时刻,架构君和你聊黑科技】
知识星球 认识更多朋友,职场和技术闲聊。 知识星球【职场和技术】
微博 【智能时刻】 智能时刻
哔哩哔哩 【首席架构师智库】
抖音 【cea_csa_cto】首席架构师智库
快手 【cea_csa_cto】首席架构师智库
小红书 【cea_csa_cto】首席架构师智库 首席架构师智库

谢谢大家关注,转发,点赞和点在看。

「分布式架构」最终一致性:反熵相关推荐

  1. 赠书:聊聊「分布式架构」那些事儿

    什么是分布式架构? 分布式架构是分布式计算技术的应用和工具,其中J2EE技术应用较为广泛,它简化和规范多层分布式企业应用系统的开发和部署,它可以给分布式应用软件提供在各种技术间共享资源的平台 分布式架 ...

  2. 一致 先验分布 后验分布_「分布式技术」分布式事务最终一致性解决方案,下篇...

    各位志同道合的朋友们大家好,我是一个一直在一线互联网踩坑十余年的编码爱好者,现在将我们的各种经验以及架构实战分享出来,如果大家喜欢,就关注我,一起将技术学深学透,我会每一篇分享结束都会预告下一专题 上 ...

  3. 「分布式专题」分布式系统中一致性hash算法

    近年来B2C.O2O等商业概念的提出和移动端的发展,使得分布式系统流行了起来.分布式系统相对于单系统,解决了流量大.系统高可用和高容错等问题.功能强大也意味着实现起来需要更多技术的支持.例如系统访问层 ...

  4. 「敏捷架构」敏捷架构:规模化敏捷开发的策略

    与流行的看法相反,架构是敏捷软件开发工作的一个重要方面,就像传统的工作一样,并且是扩展敏捷方法以满足现代组织的现实需求的关键部分.但是,敏捷专家的架构方式与传统主义者的方式略有不同.本文讨论以下问题: ...

  5. 「分布式技术」分布式锁的最佳实践

    「分布式技术」分布式锁的最佳实践 参考&鸣谢 分布式最佳实践:分布式锁 几种分布式锁的实现方式 分布式锁的几种实现方式~ 文章目录 「分布式技术」分布式锁的最佳实践 一.为什么需要分布式锁 二 ...

  6. 「分布式系统理论」系列专题

    如今互联网已经成为整个社会的基础设施,分布式系统并不是少数大公司的专属,所以分布式系统理论可能是你迟早需要掌握的知识. 如果你是程序员,相信这些文章你肯定能看懂:如果你不是程序员,相信这些能使你能更懂 ...

  7. 「分布式系统理论」系列专题整理

    以下内容出自微信公众号 跨界架构师 ,有兴趣的朋友可以参考我的博客 DotNet微信公众号简介 进行关注. [数据一致性] <分布式系统关注点(1)--数据一致性>(入门理解「一致性」) ...

  8. 自定义变量 配置文件_「系统架构」Nginx调优之变量的使用(3)

    在上一篇文章「系统架构」Nginx调优之变量的使用(2)中我们介绍了自定义变量和内置变量,下面我们继续接着介绍Nginx中变量的可见性和动态内置变量. 变量的可见性 nginx中的变量虽然不全是全局变 ...

  9. 分布式系统关注点(14)——「弹性架构」详解

    如果第二次看到我的文章,欢迎右侧扫码订阅我哟~  ? 本文长度为3633字,建议阅读10分钟. 坚持原创,每一篇都是用心之作- 如果我们的开发工作真的就如搭积木一般就好了,轮廓分明,个个分开,坏了哪块 ...

最新文章

  1. Revit LT 2022基本培训 Revit LT 2022 Essential Training
  2. 《LeetCode力扣练习》第14题 C语言版 (做出来就行,别问我效率。。。。)
  3. Logstash Introduction
  4. JVM垃圾回收的时候如何确定垃圾?什么是GC Roots?
  5. HDFS的读文件、写文件过程
  6. 音视频技术开发周刊 | 207
  7. proxy connect abort处理方法_Java代理设计模式(Proxy)的几种具体实现
  8. cyclicbarrier_Java并发– CyclicBarrier示例
  9. Mysql 学习笔记2
  10. Oracle :备份 、还原数据库
  11. shell每日一句(3)
  12. 网络打印机计算机服务,网络打印机怎么设置,教您怎么设置网络打印机
  13. 六级考研单词之路-三十
  14. python如何筛选excel重复_老板让我从上千个Excel中筛选数据,利用Python分分钟解决!...
  15. AES链路弹性和故障转移
  16. wxPython in Action 学习笔记一
  17. 阿里云腾讯云服务器安装oracle11g
  18. 关于大屏拼接方案 触摸屏 红外 和 电容屏
  19. ansys怎么合并体_ANSYS梁体组合连接计算方法的讨论
  20. Hibernate第七篇【对象状态、一级缓存】

热门文章

  1. redhat 中使用更改yumy源为centos的163源
  2. 保护接地 功能接地 等电位接地
  3. 基于SSM企业留言系统
  4. 7-7 The Whimper of Universe (30 分)
  5. 36晋级12第十场:九进四
  6. 每日新闻丨美商务部:已允许部分美企向华为出售零部件;中国四家手机厂商瓜分印尼市场...
  7. ubuntu20.04 java 开发环境搭建及 JNI 使用
  8. 一台机子上运行多个mysql实例
  9. 深度盘点:机器学习、深度学习面试知识点3W字汇总
  10. 【学习笔记】IGMP snooping原理