Cassandra内部机制的相关技巧

数据库
对于Cassandra内部机制,大家可能了解的补时很多。本文将从协议,移交等角度来谈一谈内部机制的问题。

闲话协议(Gossip)

Cassandra是一个有单个节点组成的集群 – 其中没有“主”节点或单点故障-因此,每个节点都必须积极地确认集群中其他节点的状态。它们使用一个称为闲话(Gossip)的机制来做此事.每个节点每秒中都会将集群中每个节点的状态“以闲话的方式传播”到1-3个其他节点.系统为闲话数据添加了版本,因此一个节点的任何变更都会快速地传播遍整个集群.通过这种方式,每个节点都能知道任一其他节点的当前状态:是在正在自举呢, 还是正常运行呢,等等.

提示移交(Hinted Handoff)

在关于写操作的文章中,我提到Cassandra会存储数据的拷贝到N个节点.客户端可以根据数据的重要性选择一个一致性级别(Consistency level),例如, ConsistencyLevel.QUORUM表示,只有这N个节点中的多数返回成功才表示这个写操作成功.

如果这些节点中的一个宕机了,会发生什么呢?写操作稍后将如何传递到此节点呢?Cassandra使用了一种称为提示移交(Hinted Handoff)的技术来解决此问题,其中数据会被写入并保存到另一个随机节点X,并提示这些数据需要被保存到节点Y,并在节点重新在线时进行重放(记住,当节点Y变成在线时,闲话机制会快速通知X节点).提示移交可以确保节点Y可以快速的匹配上集群中的其他节点.注意,如果提示移交由于某种原因没有起作用,读修复最终仍然会“修复”这些过期数据,不过只有当客户端访问这些数据时才会进行读修复.

提示的写是不可读的(因为节点X并不是这N份拷贝的其中一个正式节点),因此,它们并不会记入写一致性.如果Cassandra的配置了3份拷贝,而其中的两个节点不可用,就不可能实现一个ConsistencyLevel.QUORUM的写操作.

逆熵(Anti-Entropy)

Cassandra的***一个众所周知的秘密武器是逆熵(Anti-entropy).逆熵明确保证集群中的节点一致认可当前数据.如果由于默认情况,读修复(read repair)与提示移交(hinted handoff)都没有生效,逆熵会确保节点达到最终一致性.逆熵服务是在“主压缩”(等价与关系数据库中的重建表)时运行的,因此,它是一个相对重量级但运行不频繁的进程.逆熵使用Merkle树(也称为散列树)来确定节点在列族(column family)数据树内的什么位置不能一致认可,接着修复该位置的每一个分支.

原文链接:http://www.dbthink.com/?p=430

【编辑推荐】
  1. 详解NoSQL数据库Apache Cassandra的配置
  2. 漫谈Cassandra客户端的使用
  3. 详解Cassandra数据模型
  4. 超越关系型数据库 pureXML技术应用及展望
  5. 新兴数据库打破整个旧规则
  6. 探寻关系数据库和ORM的***替代者
责任编辑:彭凡 来源: www.dbthink.com
相关推荐

2010-06-02 13:13:40

Cassandra

2010-11-02 08:58:59

Cassandra

2023-06-07 15:25:19

Kafka版本日志

2010-11-12 09:44:59

Cassandra配置

2009-08-06 15:12:22

C#异常机制

2009-06-11 11:17:59

Java多线程

2017-09-05 08:08:37

asyncio程序多线程

2010-03-25 18:17:04

Nginx配置

2015-06-16 10:44:42

2010-10-26 17:17:37

创建ORACLE索引

2011-06-22 16:50:09

Qt 进程 通信机制

2018-12-26 16:30:09

SQL Server内部运行机制数据库

2011-05-25 14:35:47

Oracle缓冲区调整性能

2010-04-08 15:54:53

NTFS共享设置技巧

2010-01-06 15:18:51

Json插件

2009-12-28 14:04:44

ADO技术

2010-01-25 18:22:33

Android使用XM

2010-03-29 13:49:40

Nginx图片处理

2009-12-10 17:27:39

PHP操作Cookie

2010-02-22 17:58:06

WCF异步上传
点赞
收藏

51CTO技术栈公众号