Quorum机制与NRW算法

2023-10-29 18:08
文章标签 算法 机制 quorum nrw

本文主要是介绍Quorum机制与NRW算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


1.Quorum机制

     Quorum,原指为了处理事务、拥有做出决定的权力而必须出席的众议员或参议员的数量(一般指半数以上)

2.NRW算法

     NRW算法是基于Quorum机制的是一种CP(Consistency&Partion tolerance)算法。用于在数据一致性和可靠性之间达到一种平衡。为了保证系统的正常运行,能够提供可靠的服务,分布式系统中对于数据的存储采用多份数据副本,但是这种解决方案在数据读写的过程中会造成数据的不一致性。我们知道要解决数据一致性问题,就是数据的处理方式采用Read Only Write All原则,即在分布式环境中,所有节点更新完毕后,读操作才能进行,保证数据的强一致性。这种虽然保证了数据的在某一刻的强一致性,但是极其影响系统的性能。在一个读操作非常频繁的分布式环境中,写操作的耗时,直接阻塞了读的操作。导致读和写的负载不均衡。 
     基于 Quorum机制的 NRW算法就是在读和写的负载上达到一定平衡的同时,保证数据的强一致性。机制的主要思想来源于鸽巢原理。即当数据备份存在N份时,k份数据已经更新,那么只要获取NK+1N−K+1个数据副本,至少有一个数据是更新了的。获取其中版本最高的那份数据,即最新的。这样,我们就不必等待所有数据副本全部更新后才去读取数据。把写操作的部分工作转移到了读操作中,使得读写能够在一定程度上达到负载均衡。

3.NRW算法规则

     一般我们都会对程序进行优化,即如何实现最小数据备份的情况下,保证数据一致性和读写的均衡? 
     假设需要备份NN个数据副本,读操作用RR,写操作用WW,操作副本用VV表示。根据鸽巢原理,要保证操作能获得最新数据。则有以下制约条件。 
     1.Vr+Vw>N即读操作副本量+写操作副本量必须大于数据副本量。这就即保证必定有一个副本是操作之后的值,同时保证了数据副本要么处于W写操作中,要么处于R读操作中。这里的读写状态是针对外部来讲的,分布式环境对外部来说,同一时刻只存在一种操作(容斥定理),相当于读写锁,但比加锁(一种悲观的策略)的方式更加高效。对于分布式环境内部,读和写操作只是部分节点的操作。同时限定了最小读副本数量和最小写副本数量。该策略中,只需要保证R+W>NR+W>N,就可以保证强一致性。 如果R+WNR+W≤N,这时读取和写入操作是不重叠的,系统只能保证最终一致性,而副本达到一致的时间则依赖于系统异步更新的实现方式,不一致性的时间段也就等于从更新开始到所有的节点都异步完成更新之间的时间。 
     2.Vw>N/2 保证了数据的串行化修改。一份数据的冗余拷贝不可能同时被两个写请求修改。如Vw<N/2Vw<N/2的时候,就可能存在一部分数据被一个写操作修改,另一部分数据被另一个写操作修改。 
     如图所示,在分布式环境ABCDEA、B、C、D、E中,根据规则一,那么读写副本量应该至少为6,而现在副本只有5份,则至少有一份CC即在读的数据副本中,也在写的数据副本中,才能保证获取到当前时刻最新的数据。规则二,如果Vw<N/2Vw<N/2,就像如图所示的ABA、B写操作和EDE、D写操作一样,那么这时候整个分布式环境中就存在三种数据,造成数据的不一致性。 
分布式环境

4.读写配置策略

     假设N=5N=5, 如果R=1R=1, 那么WW必须是55. 所以就是写入所有的节点是全部节点,那么读取任何一个节点就可以最新的数据。 有点就是像读写锁了。 
     如果R=5R=5, 那么WW只要是11就可以了。 那么写的效率就非常高。 读取的效率比较低。 
     如果W=N/2+1W=N/2+1, R=N/2R=N/2, 读写之间为达到某个平衡。 是不错的策略。兼顾了性能和可用性,Dynamo系统的默认设置就是这种。 
     R/W的配置的关系决定了哪种操作的开销。

这篇关于Quorum机制与NRW算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/302405

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL

dp算法练习题【8】

不同二叉搜索树 96. 不同的二叉搜索树 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入:n = 3输出:5 示例 2: 输入:n = 1输出:1 class Solution {public int numTrees(int n) {int[] dp = new int