文档章节

走进cassandra之七 最终一致性

chenkangyao
 chenkangyao
发布于 2016/07/19 13:58
字数 970
阅读 52
收藏 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 之一 CAP和分布式

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

chenkangyao
2016/07/19
21
0
走进cassandra之六 数据读写删

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

chenkangyao
2016/07/19
9
0
cassandra architecture

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

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

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

Will--wang
2015/05/26
0
0
走进cassandra之三 分区器

从这节开始,都是高年级知识了,需要一点分布式的基础知识。 以前的文章说到, james(公司大佬)把任务分给了几拨人来做,那么怎么个分法呢? 什么任务交给什么人呢? James估计是有自己的一...

chenkangyao
2016/07/19
6
0

没有更多内容

加载失败,请刷新页面

加载更多

阿里大规模数据中心性能分析

郭健美,阿里巴巴高级技术专家,目前主要从事数据中心的性能分析和软硬件结合的性能优化。CCF 系统软件专委和软件工程专委的委员。曾主持国家自然科学基金面上项目、入选上海市浦江人才计划A...

阿里云官方博客
36分钟前
1
0
Coding and Paper Letter(四十四)

资源整理。 1 Coding: 1.Rstudio2019年会“机器学习应用”的幻灯片,代码和数据 rstudio conf 2019 2.R语言包sparkxgb,Spark上XGBoost的R接口。 sparkxgb 3.自动SQL注入和数据库接管工具。 ...

胖胖雕
38分钟前
1
0
Ubuntu最新的主要操作系统放弃32位支持?

现在是2018年,2019年即将到来——64位处理器已经成为主流很长一段时间了。如果你仍然使用32位的电脑,那么是时候把它扔进垃圾箱了。 我为所有基于Linux的操作系统维护者感到自豪,他们有勇气...

Linux就该这么学
39分钟前
1
0
Fundebug发布Vue插件,简化BUG监控接入代码

摘要: 代码越短越好! 我们发布了fundebug-vue插件,可以简化Vue框架接入Fundebug的代码。 Vue如何接入Fundebug 1. 安装fundebug-javascript与fundebug-vue npm install fundebug-javascrip...

Fundebug
46分钟前
1
0
MySQL学习笔记之二

数据库的操作总结就是:增删改查(CURD),今天记录一下基础的检索查询工作。 检索MySQL 1.查询表中所有的记录 mysql> select * from apps;+----+------------+-----------------------+------...

凌宇之蓝
57分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部