文档章节

走进cassandra之七 最终一致性

chenkangyao
 chenkangyao
发布于 2016/07/19 13:58
字数 970
阅读 48
收藏 1

关于这个最终一致性,我们还是举打仗的那个例子。
一个师,下辖三个团,一个独立营。
大家知道,在战斗的时候,突发事件很多,时间也很紧迫。
来自师部的作战命令,可能没有办法及时到达各个营。
尤其是在八路的军队里,通讯基本靠吼,通讯员去传令的时候,说不定走在半路就被打死了。
得想办法应对此类问题。

这个跟cassandra是一个样的,它也有很多节点,多个节点,同时在向外服务,它也需要通讯员去传达命令给各个节点,通讯员在半路遇到打劫的怎么办呢?死掉了怎么办呢?节点没反应了怎么办呢?

针对这些问题, cassandra是有一套自己的机制的。
1.Read Repair
2.Anti-Entropy Node Repair
3.Hinted Handoff

#1 read repair.
coordinator 发送给每一个 replica的读请求,有两种:
direct read request
background read repair request

direct read request 会送给谁呢?
你的一致性level所规定的那些节点(one,quorum,all)

background read repair request 送给谁呢?
送给剩余的那些节点(direct read request没有送到的节点)

读取Key A的数据时,系统会读取Key A的所有数据副本,如果发现有不一致,则进行一致性修复。
如果读一致性要求为ONE,会立即返回离客户端最近的一份数据副本。然后会在后台执行Read Repair。这意味着第一次读取到的数据可能不是最新的数据。
如果读一致性要求为QUORUM,则会在读取超过半数的一致性的副本后返回一份副本给客户端,剩余节点的一致性检查和修复则在后台执行。
如果读一致性要求高(ALL),则只有Read Repair完成后才能返回一致性的一份数据副本给客户端。
该机制有利于减少最终一致的时间窗口

2.Anti-Entropy Node Repair
有一个叫node tool的东东,专门负责管理维护各个节点,它的任务之一就是通过Anti-Entropy这种办法,来进行node repair,把不一致的数据弄成一致的。
数据的最终一致性由AntiEntropy(逆熵)所生成的MerkleTrees对比来发现数据复制的不一致,通过org.apache.cassandra.streaming来进行完整的一致性修复。
Merkle Tree是一种Hash Tree,叶子节点是Key的hash值,父节点是所有子节点值的hash值,通过判断父节点的异同可以知道所有子节点的异同。
通过判断root的异同可以快速判断所有叶子节点数据的异同。
执行nodetool?repair可以启动Anti-Entropy,此操作需要扫描所有数据,对系统的IO有较大压力,建议在业务低峰期定期执行

3.Hinted Handoff
Writes are always sent to all replicas for the specified row regardless of theconsistency level
specified by the client. If a node happens to be down at the time of write, itscorresponding replicas will save hints
about the missed writes, and then handoff the affected rows once the node comesback online。
举例来说:
Key A按照规则首要写入节点为N1,复制到N2
假 如N1宕机,如果写入N2能满足ConsistencyLevel要求,则Key A对应的RowMutation将封装一个带hint信息的头部(包含了目标为N1的信息),然后随机写入一个节点N3,此副本不可读。同时正常复制一份 数据到N2,此副本可以提供读。如果写N2不满足写一致性要求,则写会失败。
N1恢复后,原本应该写入N1的带hint头的信息将重新写回N1。
HintedHandoff是实现最终一致性的一个优化措施,可以减少最终一致的时间窗口。

© 著作权归作者所有

共有 人打赏支持
chenkangyao
粉丝 6
博文 44
码字总数 75969
作品 0
广州
高级程序员
私信 提问
走进cassandra之六 数据读写删

先说写,再说读,最后说 数据一致性(data consistency)。 cassandra对于 数据写入,那是相当给方便的,比对 首长儿子还亲呢, 写的相当快,相当高效。 相比来说,关系型数据库,对于数据 ...

chenkangyao
2016/07/19
9
0
走进cassandra 之一 CAP和分布式

决定share一下我的cassandra学习成果,写一些博客,跟大家共同分享一下,准备写10篇文章,内容分别涉及 分布式存储概述及CAP, 数据模型, 分区器, 副本机制, 存储机制, 数据读写删, 最终一...

chenkangyao
2016/07/19
21
0
cassandra architecture

Apache Cassandra是一个开源的、分布式、无中心、弹性可扩展、高可用、容错、一致性可调、面向列的数据库,它基于Amazon Dynamo的分布式设计和Google BigTable的数据模型。 分布式无中心 可以...

Jun_Wong
01/10
0
0
Cassandra维护最终一致性 和存储机制 分区策略

维护最终一致性 Cassandra 通过4个技术来维护数据的最终一致性,分别为逆熵(Anti-Entropy),读修复(Read Repair),提示移交(Hinted Handoff)和分布式删除。 1) 逆熵 这是一种备份之间的...

Will--wang
2015/05/26
0
0
apigateway-kong(五)集群搭建部署

  kong 集群将使得系统通过增加更多机器,从而实现水平扩展,承接更多的请求流量。它们将共享同样的配置且使用同一个数据库。kong 集群中的的所有节点都连接同一个数据库。 你需要在 kong...

zhoujie0111
06/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

apache顶级项目(二) - B~C

apache顶级项目(二) - B~C https://www.apache.org/ Bahir Apache Bahir provides extensions to multiple distributed analytic platforms, extending their reach with a diversity of s......

晨猫
今天
1
0
day152-2018-11-19-英语流利阅读

“超级食物”竟然是营销噱头? Daniel 2018-11-19 1.今日导读 近几年来,超级食物 superfoods 开始逐渐走红。不难发现,越来越多的轻食餐厅也在不断推出以超级食物为主打食材的健康料理,像是...

飞鱼说编程
今天
5
0
SpringBoot源码:启动过程分析(二)

接着上篇继续分析 SpringBoot 的启动过程。 SpringBoot的版本为:2.1.0 release,最新版本。 一.时序图 一样的,我们先把时序图贴上来,方便理解: 二.源码分析 回顾一下,前面我们分析到了下...

Jacktanger
昨天
3
0
Apache防盗链配置,Directory访问控制,FilesMatch进行访问控制

防盗链配置 通过限制referer来实现防盗链的功能 配置前,使用curl -e 指定referer [root@test-a test-webroot]# curl -e "http://www.test.com/1.html" -x127.0.0.1:80 "www.test.com/1.jpg......

野雪球
昨天
5
0
RxJava threading

因为Rx针对异步系统设计,并且Rx也自然支持多线程,所以新的Rx开发人员有时会假设Rx默认是多线程的。在其他任何事情之前,重要的是澄清Rx默认是单线程的。 除非另有说明,否则每次调用onNex...

woshixin
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部