「分布式架构」最终一致性:暗示的切换队列

简介: 「分布式架构」最终一致性:暗示的切换队列

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

第一部分

什么是暗示的切换队列?

尽管有一个很酷的名字,暗示切换(HH)队列并没有得到很多关注。HH队列有一项非常重要的工作,但是除非您是系统管理员,否则很少直接与它交互。让我们深入研究一下暗示的切换队列到底是什么,以及为什么它对您很重要。

为了讨论HH队列,我们必须稍微讨论一下分布式计算。像XDB Enterprise这样的系统作为分布式系统存在的一个原因是消除单点故障。InfluxDB Enterprise使用复制因子(Replication Factor,RF)来确定任何一组数据应该存在多少个副本。将RF设置为1以上意味着系统有更高的机会成功地为请求提供服务,并且在数据节点中断期间不会返回错误,这意味着我们不再只有一个可能丢失或不可用的数据副本。分布式系统也提出了独特的挑战:我们如何知道数据在整个系统中是一致的,尤其是在存储多个数据副本时?

首先,我们必须理解最终一致性所作的一些承诺。扰流板警报:系统中的数据最终必须一致。当我们从分布式系统请求信息时,有时我们收到的答案可能不会一致地返回。当数据在整个系统中存储和复制时,我们收到的答案有一些“漂移”,但随着时间的推移,这种“漂移”应该被消除。在实践中,这意味着最近的时间范围可能在其结果中具有最大的变化,但是这种变化被消除,因为系统通过确保在任何地方都可以获得相同信息的机制工作。


如果我们保证系统最终是一致的,我们如何解释失败的写入?数据节点离线的原因有很多,从磁盘空间耗尽到普通的旧硬件故障。如果一个节点在离线时丢失了数据点,它就永远不可能是一致的,因此,我们对最终一致性的承诺将变成谎言。

失败的写入也会影响整个系统的复制系数。维护指定的RF是我们必须遵守的另一个承诺,如果数据节点脱机,这也是写入的另一个可能的失败点。

例子

让我们研究一下最简单的示例:具有2个数据节点和一个RF=2的数据库的XDB Enterprise。数据通过某个收集代理(例如Telegraf)到达您喜爱的负载平衡器,负载平衡器将写操作(也读取,但在本例中我们将使用写操作)分发到底层数据节点。通常,负载平衡器以循环方式分发写操作。接收数据的数据节点存储并复制数据(将其发送到另一个数据节点),瞧:RF达到2。


注意:图中未显示的是元节点,您可以在这里阅读。

我们仍然需要一个失败或延迟写入的解决方案。假设系统中的一个节点在物理上过热并离线。如果没有备份,任何不成功的写入都会被完全删除,再也看不到。


进入HH队列。

HH队列是一个持久的、基于磁盘的队列。它是XDB企业的一个基本部分,它试图确保最终的一致性,这是一种机制,确保所有的数据节点最终在它们之间拥有一组一致的数据。对于xdbenterprise,HH队列是实现最终一致性和确保最终实现每个数据库的数据复制因子的一个重要部分。

现在,让我们重温一下集群中的一个数据节点离线的场景。节点脱机的原因有很多:硬件缺陷、磁盘空间限制,甚至是定期维护。如果没有暗示的切换队列,不成功的写操作在存储之前就死了,但是现在我们有了一个安全的地方让它们着陆。


任何不成功的写入都会被定向到HH队列,当节点恢复联机时,它会检查HH队列中是否有挂起的写入。然后节点可以完成写操作,直到队列耗尽。Bam最终实现了一致性。


摘要

这是一个最终一致的集群内部发生的情况,但是外部有一些考虑因素:当数据成功写入一个节点,但无法正确复制时,用户看到成功还是失败?HH队列中的健康模式是什么样的?如果HH队列不断地充满和耗尽,对整个系统健康意味着什么?在下一篇文章中,我们将讨论如何解决和识别XDB企业集群中的问题模式。


相关文章
|
2月前
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2
|
2月前
|
负载均衡 Java 应用服务中间件
微服务分布式系统架构之zookeeper与dubbor-1
微服务分布式系统架构之zookeeper与dubbor-1
|
2月前
|
存储 JSON 数据库
Elasticsearch 分布式架构解析
【9月更文第2天】Elasticsearch 是一个分布式的搜索和分析引擎,以其高可扩展性和实时性著称。它基于 Lucene 开发,但提供了更高级别的抽象,使得开发者能够轻松地构建复杂的搜索应用。本文将深入探讨 Elasticsearch 的分布式存储和检索机制,解释其背后的原理及其优势。
170 5
|
11天前
|
运维 供应链 安全
SD-WAN分布式组网:构建高效、灵活的企业网络架构
本文介绍了SD-WAN(软件定义广域网)在企业分布式组网中的应用,强调其智能化流量管理、简化的网络部署、弹性扩展能力和增强的安全性等核心优势,以及在跨国企业、多云环境、零售连锁和制造业中的典型应用场景。通过合理设计网络架构、选择合适的网络连接类型、优化应用流量优先级和定期评估网络性能等最佳实践,SD-WAN助力企业实现高效、稳定的业务连接,加速数字化转型。
SD-WAN分布式组网:构建高效、灵活的企业网络架构
|
16天前
|
消息中间件 关系型数据库 Java
‘分布式事务‘ 圣经:从入门到精通,架构师尼恩最新、最全详解 (50+图文4万字全面总结 )
本文 是 基于尼恩之前写的一篇 分布式事务的文章 升级而来 , 尼恩之前写的 分布式事务的文章, 在全网阅读量 100万次以上 , 被很多培训机构 作为 顶级教程。 此文修改了 老版本的 一个大bug , 大家不要再看老版本啦。
|
25天前
|
消息中间件 缓存 算法
分布式系列第一弹:分布式一致性!
分布式系列第一弹:分布式一致性!
|
26天前
|
算法 Java 关系型数据库
漫谈分布式数据复制和一致性!
漫谈分布式数据复制和一致性!
|
3月前
|
存储 NoSQL Java
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
这篇文章是关于Java面试中的分布式架构问题的笔记,包括分布式架构下的Session共享方案、RPC和RMI的理解、分布式ID生成方案、分布式锁解决方案以及分布式事务解决方案。
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
|
3月前
|
消息中间件 存储 监控
Django后端架构开发:Celery异步调优,任务队列和调度
Django后端架构开发:Celery异步调优,任务队列和调度
62 1
|
3月前
|
消息中间件 存储 NoSQL
MQ的顺序性保证:顺序队列、消息编号、分布式锁,一文全掌握!
【8月更文挑战第24天】消息队列(MQ)是分布式系统的关键组件,用于实现系统解耦、提升可扩展性和可用性。保证消息顺序性是其重要挑战之一。本文介绍三种常用策略:顺序队列、消息编号与分布式锁,通过示例展示如何确保消息按需排序。这些方法各有优势,可根据实际场景灵活选用。提供的Java示例有助于加深理解与实践应用。
77 2

热门文章

最新文章