Riak请求过程是什么以及Riak有几种失败场景

81次阅读
没有评论

共计 1252 个字符,预计需要花费 4 分钟才能阅读完成。

Riak 请求过程是什么以及 Riak 有几种失败场景,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面丸趣 TV 小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

CAP 原理告诉我们,一致性,可用性和分区容忍性三者最多只能偏重其中两个。在 NoSQL 系统中,分区容忍性 (P) 几乎已经成为必选项。于是很多 NoSQL 选择了牺牲一定一致性的做法。下面丸趣 TV 丸趣 TV 小编来讲解下 Riak 请求过程是什么?Riak 有几种失败场景?

Riak 请求过程是什么

首先介绍一下 Riak 的请求处理过程,以数据冗余 N 份存储,每次读取其中的 R 份,写操作需要写 W 份。

通过计算得出请求的 key 所在的 N 个节点

向这 N 个节点依次发起请求

等待这 N 个节点中的 W 个 (如果是写操作的) 或 R 个 (如果是读操作) 返回成功

返回相应的数据给客户端。

Riak 有几种失败场景

1. 读取数据前其中一个节点故障

数据以 W = 3 成功写入三份

其中一个节点故障

数据再以 R = 3 读取三份,发起三个请求

此次读操作会返回了 not_found

而这次系统在检测到了数据只有两份,会启动修复器将数据备份一份到 secondary 节点上,以保证有三份备份

后续的读操作将会从 primary 上读到两份,从 secondary 上读到一份数据,以实现成功读到三份数据。

2. 读取数据前其中两个节点故障

数据以 W = 3 成功写入三份

其中两个节点故障

数据再以 R = 3 读取三份,发起三个请求

此次读操作会返回了 not_found

后续的读操作将会从 primary 上读到一份,从 secondary 上读到两份数据,以实现成功读到三份数据。

3. 读取数据前三个节点全部故障

数据以 W = 3 成功写入三份

其中三个节点故障

数据读取操作将会永远返回 not_found,直到某个节点恢复

4. 写操作前一个节点故障

一个节点故障

数据以 W = 3 发起三个写请求

一个 secondary 节点承担了其中的一个写请求

后面的读请求会正常的读到三份数据

5. 写操作前一个节点故障,后来又恢复了

一个节点故障

数据以 W = 3 发起三个写请求

一个 secondary 节点承担了其中的一个写请求

故障节点又恢复了

在 60 秒内,一个叫 hintedhandoff 的过程会启动,将 secondary 中的数据迁移到刚刚恢复的 primary 中

在 hintedhandoff 过程完成后,数据就恢复正常了

6. 在 hintedhandoff 过程中进行读写操作

在 hintedhandoff 过程中,由于原来的 primary 节点是启动的,所以数据读写操作都会到这个节点上来执行,这时候可能由于一些值还没有备份回来,所以会导致这个节点暂时的 not_found 返回。

7. 在两个 primary 节点故障后一个又恢复期间进行读写操作

这时候刚刚恢复的节点会进行 hintedhandoff 过程,而读写操作依然会由于 not_found 的发生而启动修复器进行数据备份到 secordary 中。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注丸趣 TV 行业资讯频道,感谢您对丸趣 TV 的支持。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-28发表,共计1252字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)