第5章 Cassandra 的架构算法
Cassandra有一个称为system的内部keyspace,用于存储关于集群的元数据。包括:节点令牌,集群名,用于支持动态装载的keyspace和schema的定义,迁移数据,节点是否自举成功。数据库
主从架构一般是主节点读写,从节点读,数据从主节点向从节点单向复制,存在很严重的单点故障问题。数组
Cassandra采用对等结构(P2P)的分布式模型。全部节点地位相同,利于系统可用性和扩展性;任意节点的掉线会影响系统吞吐,可是不会中断服务;支持动态增长节点。网络
(1) gossiper 周期性运行,在环里面随机选择一个节点(假设为A)发起gossip会话,每轮发送三条消息。架构
(2) gossip发起者先向A发送一个Sync消息tcp
(3) A收到消息后回复一条Ack1消息分布式
(4) 发起者收到Ack1后再向A发送Ack2消息。至此完成本轮gossip性能
(是否是很像tcp三次握手?)url
一轮gossip能判断一个节点的存活状态,考虑到网络的不稳定性,在死和活之间引入中间值——嫌疑级别。spa
具体gossip细节《Cassandra权威指南》并无讲明白。
逆商是Cassandra的副本同步机制,用于保障不一样节点上数据都更新到最新的版本。
具体细节《Cassandra权威指南》没有讲明白
简要介绍下写操做:
先写commit log(写操做成功)——>
写内存memtable(每一个列族可能有多个memtable)——>
memtable达到必定数量后,写入SSTable文件
commit log有两阶段提交的意思,书翻译描述不清楚。
以上写操做都是顺序进行的,性能很高;配合后续的压紧操做得到更好的读性能。
提示移交:在某个节点由于网络、硬件等缘由致使不可写入时,其余节点会把这个写入信息记录下来,等待该节点从新上线后把记录发给它。这使得Cassandra写操做永远可用。
压紧操做用于合并SSTable。键进行合并,列被组合,丢弃墓碑,建立新索引。
压紧是后台操做。
能判断一个元素必定不在集合中(真阴性),可能在一个集合中(假阳性)。
大体原理,将一个元素映射到一个位数组,判断位数组的0/1值来肯定元素在集合中的存在性。优点是内存占用少,访问速度远远大于磁盘扫描。
好比,url白名单,快速判断一个url在不在一个超大超大的集合中(当hash算法内存不足的时候)。
软删除,应用并不直接执行数据库的delete删除操做,而是使用update操做把某列值标记为“已删除”。
Cassandra中,上述操做在删除的值上放置墓碑。那么,在执行压紧操的的时候,比墓碑更旧的数据都会被清除。
没太看明白
Cassandra守护进程
存储服务
消息服务
提示移交管理器