写在前面

假设现在我们实现了AP 系统,但是公司突然要对某些业务进行实时的数据计算,并且要求按照强一致性的方式来读取数据,此时作为系统设计这的我们该怎么办呢?单独为这部分业务实时抽出最新数据?还是修改原有系统?看起来都不是很靠谱,为了一个单独临时的业务而做出这么大的动作,显然是不适合的。此时我们就可以考虑在系统中引入Quorum NWR算法,从而实现数据的强一致性(注意这里实现的强一致性是建立在系统正常的前提下,如果是系统异常将还只是保证AP)。下面我们就来一起看下吧!

1:Quorum NWR

在Quorum NWR算法中包含N,W,R三个元素,当W + R > N时就能实现我们文章开始提到的强一致性了,分别来看下。

1.1:N

N,表示的副本数,即一个分片的复制因子,如下图data-1的N就是2,data-2的N就是3,data-3的N就是1:

注意N不要超过节点数,因为将会导致某节点上存在超过>1个的副本,当该节点故障时,分片的多个副本将会同时不可用。

1.2:W

W,代表一次更新操作,数据需要写入到多少个副本才算成功,比如设置data-2分片W设置为2,则必须更新2个副本才算成功,如下图:

1.3:R

R,代表一次读取多少个副本,并从中选择一个最新的数据,之后返回给客户端,如下data-2设置R=2,则会从data-2的3个副本中的2个副本读取数据,然后获取最新的一个版本返回给客户端,如下图:

到这里我们再看下为什么W + R > N就能实现强一致性,因为当满足该条件时,进行数据读取的R个副本中必定有一个是拥有最新数据,所以就实现了数据强一致性。

写在后面

小结

本文分析了一个AP系统如何实现数据一致性(再次强调这里指的是系统正常情况下的数据强一致性,所以CAP不能三角依然是成立的)

参考文章列表

分布式之CAP理论分析 。

分布式之Quorum NWR算法相关推荐

  1. 太白金星:我很关心分布式 Quorum NWR

    来源 | 悟空聊架构 责编 | 寇雪芹 头图 | 下载于视觉中国 先来看一段神秘的对话: 太白金星:听闻老君最近在练神丹妙药,可否与我一讲? 太上老君:老白啊,我最近在练六颗丹药:两颗延年丹.两颗健步 ...

  2. 分布式技术与实战第一课 分布式理论与一致性算法

    开篇词:搭建分布式知识体系,挑战高薪 Offer 你好,我是邴越,在一线互联网公司从事分布式开发工作多年,一直关注分布式理论和新技术的发展. 互联网发展到今天,用户数量越来越多,产生的数据规模也越来越 ...

  3. 基于Redis的分布式锁和Redlock算法

    来自:后端技术指南针 1 前言 今天开始来和大家一起学习一下Redis实际应用篇,会写几个Redis的常见应用. 在我看来Redis最为典型的应用就是作为分布式缓存系统,其他的一些应用本质上并不是杀手 ...

  4. 分布式一致性与共识算法

    区块链技术是近几年逐渐变得非常热门的技术,以比特币为首的密码货币其实已经被无数人所知晓,但是却很少有人会去研究它们的底层技术,也就是作为一个分布式网络比特币等加密货币是如何工作的. 无论是 Bitco ...

  5. Twitter的分布式自增ID算法Snowflake实现分析及其Java、Php和Python版

    在分布式系统中,需要生成全局UID的场合还是比较多的,twitter的snowflake解决了这种需求,实现也还是很简单的,除去配置信息,核心代码就是毫秒级时间41位+机器ID 10位+毫秒内序列12 ...

  6. UUID实现之一twitter的分布式自增IDsnowflake算法

    Twitter的分布式自增ID算法snowflake (Java版) 概述 分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首 ...

  7. Twitter的分布式自增ID算法snowflake

    全局ID 要做到幂等性的交易接口,需要有一个唯一的标识,来标志交易是同一笔交易.而这个交易ID由谁来分配是一件比较头疼的事.因为这个标识要能做到全局唯一. 如果由一个中心系统来分配,那么每一次交易都需 ...

  8. 分布式理论(六)—— Raft 算法

    分布式理论(六)-- Raft 算法 前言 我们之前讲述了 Paxos 一致性算法,虽然楼主尝试用最简单的算法来阐述,但仍然还是有点绕.楼主最初怀疑自己太笨,后来才直到,该算法的晦涩难懂不是只有我一个 ...

  9. 分布式理论(五)—— 一致性算法 Paxos

    分布式理论(五)-- 一致性算法 Paxos 前言 Paxos 算法如同我们标题大图:世界上只有一种一致性算法,就是 Paxos.出自一位 google 大神之口. 同时,Paxos 也是出名的晦涩难 ...

最新文章

  1. python电子时钟包装盒_python 电子时钟
  2. Web开发者需养成的好习惯
  3. 陈一舟:雷军马云在通讯领域也做不过马化腾 为何我就该挨骂
  4. 2020华为推迟发布鸿蒙战略,早新闻:华为5nm麒麟芯片延期,确认新版鸿蒙将发...
  5. Powershell AWS 自动化管理 (6) - IAM
  6. boost::has_range_iterator相关的测试程序
  7. vue-cli+webpack项目,修改项目名称
  8. Mybatis 框架源码解读(详细流程图+时序图)
  9. 配置环境变量OpenJDK和OracleJDK区别
  10. asp.net 从客户端中检测到有潜在危险的Request.Form值
  11. 内容超过7行显示查看全文
  12. 内核和用户空间异步通信
  13. SUFFER软件测试工程师,Ubuntu9.0.4下FreeSurfer的安装(转)
  14. 谈谈优化JDBC数据库编程(转)
  15. Thinkphp 模板/包含文件
  16. js正则表达式之match函数
  17. 在线考试系统软件测试总结,在线考试系统软件测试用例报告.doc
  18. 数学符号的英文表达(持续更新中)
  19. Redis - 哨兵机制与主从切换
  20. 死的时候究竟是怎么一个过程

热门文章

  1. 稀疏编码器(Sparse Encoder)
  2. 1rem、1em、1vh(vw)、1px各自代表的含义
  3. 2021年中国BI商业智能应用实践白皮书
  4. 四个步骤教你写好一款产品的运营数据分析报告(转)
  5. Android自定义睡眠下表统计图,Android 进阶自定义View(5)图表统计PieChartView圆饼图的实现...
  6. DC Motors – Voltage Vs. Output Speed Vs. Torque
  7. 12306查询车票(爬虫小练_1)
  8. SISO/MIMO信道估计(channel estimation)原理详细图解
  9. (4)AES分组加密算法(原理详解)
  10. MySQL——使用mysqldump命令备份