iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >如何使用分布式Quorum NWR
  • 334
分享到

如何使用分布式Quorum NWR

2024-04-02 19:04:59 334人浏览 薄情痞子
摘要

这篇文章主要介绍“如何使用分布式Quorum NWR”,在日常操作中,相信很多人在如何使用分布式Quorum NWR问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用分布

这篇文章主要介绍“如何使用分布式Quorum NWR”,在日常操作中,相信很多人在如何使用分布式Quorum NWR问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用分布式Quorum NWR”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一、三个炼丹炉怎么分配的“

太白金星:老君,你的八卦炉怎么分配的啊?

”让我们揭开老君的炼丹炉,看看六颗丹药是怎么分配的。

首先我们是很容易猜到丹炉是怎么分配炼丹的:

  • 一号丹炉炼两颗延年丹。

  • 二号丹炉炼两颗健步丹。

  • 三号丹炉炼两颗恢复丹。

如何使用分布式Quorum NWR

太白金星认为的丹炉情况

那如此分配会有什么问题呢?

我们试想一下,如果一号丹炉因为炉火太高炸裂了,那么两颗延年丹定会失败。这和把鸡蛋放到一个篮子里面是一个道理。假如篮子不慎被打翻,里面的鸡蛋都掉出来,就都碎了。

“太上老君:老白,我把锅炉的盖子揭开给你看看你就知道了。”

  • 一号丹炉炼一颗延年丹和一颗健步丹。

  • 二号丹炉炼一颗延年丹和一颗恢复丹。

  • 三号丹炉炼一颗健步丹和一颗恢复丹。

如何使用分布式Quorum NWR

丹炉实际分配情况

“太白金星:老君,为何要如此分配,每个丹药的火候可不那么好把控啊?

太上老君:老白,我可是炼丹大师,火候难不倒我。

太白金星:不愧是老君啊,这样即使有一个丹炉有问题,至少能保证一颗能炼成,而不是两颗都毁了。”

映射到我们互联网系统中:丹炉类似于服务器节点或数据库节点,通过多个节点来相互备份数据来保证系统的高可用性(High Availability)。

二、如何保证丹药品质一样

2.1 一致性

“太白金星:老君,你刚提到,两颗延年丹需要保证功效一样,大小一样?

太上老君:确实如此,丹药品质必须保持一致,我炼的都是九品丹药,药效差一点则是千差万别。”

太上老君说的品质保持一致到底怎么回事?

一号丹炉里面的延年丹和二号丹炉的延年丹如何保证品质一致呢?

这不就是我们常常说的分布式一致性吗?两颗丹药分布在不同的丹炉中,需要保证品质一致。

如下图所示,这两颗延年丹的一大一小,颜色也有不同,这就是品质不一样。

如何使用分布式Quorum NWR

品质不一样

而在架构设计中,比如请求访问到不同的数据库,查到的数据都是一样的,这就是一致性。

如下图所示:浏览器访问数据库 1 和数据库 2 中的数据 A,结果返回的都是 A = 1。

如何使用分布式Quorum NWR

分布式系统中的一致性

2.2 最终一致性和强一致性

分布式中的一致性又分为最终一致性和强一致性。

所谓强一致性就是写操作完成后,任何后续访问都能读到更新后的值。这就是CP系统所要求的一致性和分区容错性。。

那放到炼丹中怎么理解?

比如老君给一号丹炉的延年丹加入了莲花这种药材,给二号丹炉的延年丹也这么操作,那么老白揭开炉盖看到的两颗延年丹的成分是一样的。

而最终一致性就是不保证后续访问都能读到更新后的值,但是经过一段时间后,再去读,就能得到相同的值。也就是说,在这段时间内,可能读到旧的数据。这就是AP系统所要求的可用性和分区容错性。

放到炼丹中怎么理解?

比如老君给一号丹炉的延年丹加入了莲花,而经过了一个时辰后,才给二号丹炉加雪莲,那么在这个时辰内,看到的两颗延年丹的成分就不一样了。但经过一个时辰后,最终成分一样。

三、可控的品质:Quorum NWR 协议

“假如延年丹必须保证品质的强一致性,而健步丹只需要保证品质的最终一致性,这个该怎么控制呢?

”这个可没有难倒老君,因为老君懂得分布式协议:Quorum NWR。

Quorum 这个单词的意思:(会议的)法定人数。主要是看后面三个大写字母:N、W、R。由 NWR 来控制一致性。

3.1 参数 N

我们还是来看下丹炉中的情况,两颗延年丹是互为备份的,相当于有两个副本。

N 称作副本数,又叫做复制因子(Replication Factor)。表示同一份数据有多少个副本,所以:延年丹的 N = 2。依次类推:健步丹的 N =  2,恢复丹的 N = 2。如下图所示:

如何使用分布式Quorum NWR

丹药的副本数一样

那 N 可以变吗?

如下图所示:比如我想炼 3 颗延年丹,也就是每个丹炉都有延年丹,那就把 N 改成 3 就可以了。而健步丹只需要炼一颗足以,那一号丹炉炼就可以了,所以N =  1。

如何使用分布式Quorum NWR

多个丹药的副本数不一样

3.2 参数 W

指定了副本数 N 之后,就可以对副本数据进行读写操作。

  • 读操作:查看所在丹炉内丹药的情况。

  • 写操作:给丹药添加药材、提高温度。

那多个丹药该如何执行读写操作呢?对于写操作,我们有 W 参数,对于读操作,我们有 R 参数。

W 称为写一致性级别(Write Consistency Level),表示成功完成 W 个副本更新,才完成写操作。

比如设置延年丹的 W = 2,表示对延年丹执行写操作时,完成了 2 个副本的更新时,才完成写操作。

如下图所示:一号丹炉和二号丹炉中的延年丹都加入了莲花,而三号丹炉中的延年丹未加入莲花。也就是只完成了两个副本的更新,符合 W = 2  这个条件,即写操作完成。

如何使用分布式Quorum NWR

两个延年丹加入了莲花

但是大家发现问题没,三号丹炉的延年丹未加入莲花,那怎么保证太上老君查看丹药情况时,得知是已加入莲花呢?也就是如何保证读写的强一致性,这就要用到第三个参数了:R。

3.3 参数 R

R 称为读一致性级别(Read Consistency Level),表示读取一个数据对象时,需要读 R 个副本,然后返回 R  个副本中最新的那份数据。

回到炼丹的问题中,设置延年丹的 R = 2,也就是查看延年丹的情况时,只需要查看两个丹炉内的延年丹的情况,然后返回最新的延年丹的情况就可以了。

  • 假设查看的是一号和二号丹炉内的延年丹,返回的情况都是:已加入莲花。这种场景是一致性的。

  • 假设查看的是一号和三号丹炉内的延年丹,一号丹炉的延年丹是已加入莲花,三号丹炉是未加入莲花,但是三号丹炉内的延年丹最后一次操作时间是早于一号丹炉的,所以返回一号丹炉内延年丹的情况:已加入莲花。这种场景也是一致性的。

通过上面的两种场景,我们知道,通过设置 R = 2,即使读到第三份未更新的数据,也能返回更新后的数据,实现强一致性。

3.4 参数组合

参数 N、W、R 的不同组合将会带来不同的一致性效果。

  • 比如上面的例子,N = 3,W = 2,R = 2,W + R > N,对于客户端来讲,整个系统能保证强一致性,一定能返回更新后的那份数据。

  • 当 W + R <= N 时,对于客户端来讲,整个系统只能保证最终一致性,访问数据期间可能会返回旧数据。

参数不同,效果不同,分布式系统需要根据不同场景来配置。

四、应用

InfluxDB 企业版是时序数据库,它有四种写一致性级别:

  • any:W + R < N,W = 1,任何一个节点写入成功后,或者写入 Hinted-handoff  缓存(等下次重传),返回成功给客户端。

  • one:W + R < N,W = 1,任何一个节点写入成功后,立即返回成功给客户端,不包括写入 Hinted-handoff 缓存

  • quorum:W + R > N,大多数节点写入成功后,就返回成功给客户端。(要求 N 大于2)

  • all:W = N,所有节点都写入成功后,返回成功。

另外对于 时序数据库 InfluxDB 来说,读操作需要读取大量数据,为了保证读取的高效,它不支持读一致性级别(R =  N),但是可以通过设置写一致性级别为 all,来实现强一致性。

InfluxDb 实现了 Quorum NWR,当线上业务需要临时做些一致性调整时,设置不同的写一致性级别即可完成快速切换。

到此,关于“如何使用分布式Quorum NWR”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: 如何使用分布式Quorum NWR

本文链接: https://www.lsjlt.com/news/83452.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何使用分布式Quorum NWR
    这篇文章主要介绍“如何使用分布式Quorum NWR”,在日常操作中,相信很多人在如何使用分布式Quorum NWR问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用分布...
    99+
    2024-04-02
  • 如何使用分布式锁
    本篇内容主要讲解“如何使用分布式锁”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用分布式锁”吧!什么是分布式锁分布式锁又可以解决哪些问题呢在我们的系统还没...
    99+
    2024-04-02
  • 如何使用分布式对象SharedObject
    这篇文章主要讲解了“如何使用分布式对象SharedObject”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用分布式对象SharedObject”吧!...
    99+
    2024-04-02
  • 如何使用Redis实现分布式锁
    这篇文章将为大家详细讲解有关如何使用Redis实现分布式锁,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。加锁部分解锁部分主要原理是使用了 redis 的 s...
    99+
    2024-04-02
  • Redisson分布式闭锁RCountDownLatch如何使用
    这篇文章主要介绍了Redisson分布式闭锁RCountDownLatch如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Redisson分布式闭锁RCountDownLatch如何使用文章都会有所收获,...
    99+
    2023-07-05
  • 如何使用分布式链路追踪
    这篇文章主要介绍“如何使用分布式链路追踪”,在日常操作中,相信很多人在如何使用分布式链路追踪问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用分布式链路追踪”的疑惑有所帮...
    99+
    2024-04-02
  • 使用Redis如何实现分布式锁
    这篇文章主要介绍了使用Redis如何实现分布式锁的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇使用Redis如何实现分布式锁文章都会有所收获,下面我们一起来看看吧。 ...
    99+
    2024-04-02
  • 如何使用Java开发分布式应用?
    Java是一门广泛使用的编程语言,广泛应用于开发分布式应用程序。本文将介绍如何使用Java开发分布式应用程序,包括分布式应用程序的基本概念、Java的分布式应用程序开发工具和技术,以及分布式应用程序的开发实践。 一、分布式应用程序的基本概念...
    99+
    2023-11-07
    path 分布式 开发技术
  • 国内分布式框架Dubbo如何使用
    这篇“国内分布式框架Dubbo如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“国内分布式框架Dubbo如何使用”文章吧...
    99+
    2023-07-05
  • 如何使用redis实现分布式缓存
    本文小编为大家详细介绍“如何使用redis实现分布式缓存”,内容详细,步骤清晰,细节处理妥当,希望这篇“如何使用redis实现分布式缓存”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识...
    99+
    2024-04-02
  • 如何使用Go打包NumPy分布式应用?
    在大数据时代,分布式计算已经成为了一个不可避免的趋势。而NumPy是Python中用于科学计算的重要库,它提供了高效的多维数组操作和数学函数,是许多科学计算领域的必备工具。那么如何使用Go打包NumPy分布式应用呢?本文将会介绍Go语言中...
    99+
    2023-08-12
    打包 分布式 numy
  • 如何正确的使用redisson分布式锁
    这期内容当中小编将会给大家带来有关如何正确的使用redisson分布式锁,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Redisson是Redis官方推荐的Java版的Redis客户端。它提供的功能非常多...
    99+
    2023-06-14
  • Redisson分布式信号量RSemaphore如何使用
    本文小编为大家详细介绍“Redisson分布式信号量RSemaphore如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Redisson分布式信号量RSemaphore如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一...
    99+
    2023-07-05
  • Kubernetes上如何使用Jaeger分布式追踪
    今天小编给大家分享一下Kubernetes上如何使用Jaeger分布式追踪的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。正文...
    99+
    2023-07-05
  • SpringBoot中如何使用Dubbo分布式服务
    SpringBoot中如何使用Dubbo分布式服务,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。改造前之前在 SpringBoot 中使用 Dubbox是这样的。先简单记录...
    99+
    2023-06-05
  • 如何使用注解方式实现 Redis 分布式锁
    目录引入 Redisson初始化 Redisson编写 Redisson 分布式锁工具类声明注解 @Lock注解解析类引入 Redisson <dependency> ...
    99+
    2024-04-02
  • spark集群如何使用hanlp进行分布式分词
    这篇文章主要介绍“spark集群如何使用hanlp进行分布式分词”,在日常操作中,相信很多人在spark集群如何使用hanlp进行分布式分词问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望...
    99+
    2024-04-02
  • 如何使用Python与Laravel开发分布式应用?
    分布式应用是一个复杂的系统,需要高效的通信协议和数据传输,同时还需要处理大量的数据和并发访问。Python和Laravel分别是两个非常强大的编程语言和框架,它们可以帮助我们快速开发高效的分布式应用。本文将介绍如何使用Python和Lara...
    99+
    2023-08-27
    分布式 开发技术 laravel
  • 分布式计算中如何使用Go和NumPy?
    随着数据量的不断增大,单机计算已经无法满足人们对计算速度的需求。因此,分布式计算成为了一种重要的计算模式。分布式计算可以将任务分配到多台机器上进行并行处理,大大提高了计算速度。在分布式计算中,Go和NumPy是两个非常重要的工具。 Go是...
    99+
    2023-08-12
    打包 分布式 numy
  • 如何使用Redis实现分布式计数器
    Redis是一种高性能的缓存数据库,被广泛应用于Web应用程序中。其中,一种常用的场景是使用Redis实现分布式计数器。在本文中,我们将介绍如何使用Redis实现分布式计数器,并提供具体的代码示例。一、什么是分布式计数器?分布式计数器是一种...
    99+
    2023-11-07
    分布式 redis 计数器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作