Cassandra的架构
第5章 Cassandra 的架构
5.1 system keyspace
Cassandra有一个称为system的内部keyspace,用于存储关于集群的元数据。包括:节点令牌,集群名,用于支持动态装载的keyspace和schema的定义,迁移数据,节点是否自举成功。
5.2 对等结构
主从架构通常是主节点读写,从节点读,数据从主节点向从节点单向复制,存在很严重的单点故障问题。
Cassandra采用对等结构(P2P)的分布式模型。所有节点地位相同,利于系统可用性和扩展性;任意节点的掉线会影响系统吞吐,但是不会中断服务;支持动态增加节点。
5.3 gossip与故障检测
gossip:Cassandra内部维护一个环形节点列表(Gossiper类)用于故障检测。gossiper的流程如下:
(1) gossiper 周期性运行,在环里面随机选择一个节点(假设为A)发起gossip会话,每轮发送三条消息。
(2) gossip发起者先向A发送一个Sync消息
(3) A收到消息后回复一条Ack1消息
(4) 发起者收到Ack1后再向A发送Ack2消息。至此完成本轮gossip
(是不是很像tcp三次握手?)
一轮gossip能判断一个节点的存活状态,考虑到网络的不稳定性,在死和活之间引入中间值——嫌疑级别。
具体gossip细节《Cassandra权威指南》并没有讲明白。
5.4 逆商与读修复
逆商是Cassandra的副本同步机制,用于保障不同节点上数据都更新到最新的版本。
具体细节《Cassandra权威指南》没有讲明白
5.5 commit log、memtable和SSTable
简要介绍下写操作:
先写commit log(写操作成功)——>
写内存memtable(每个列族可能有多个memtable)——>
memtable达到一定数量后,写入SSTable文件
commit log有两阶段提交的意思,书翻译描述不清楚。
以上写操作都是顺序进行的,性能很高;配合后续的压紧操作获得更好的读性能。
5.6 提示移交
提示移交:在某个节点因为网络、硬件等原因导致不可写入时,其他节点会把这个写入信息记录下来,等待该节点重新上线后把记录发给它。这使得Cassandra写操作永远可用。
5.7 压紧
压紧操作用于合并SSTable。键进行合并,列被组合,丢弃墓碑,创建新索引。
压紧是后台操作。
5.8 Bloom filter
能判断一个元素一定不在集合中(真阴性),可能在一个集合中(假阳性)。
大致原理,将一个元素映射到一个位数组,判断位数组的0/1值来确定元素在集合中的存在性。优势是内存占用少,访问速度远远大于磁盘扫描。
比如,url白名单,快速判断一个url在不在一个超大超大的集合中(当hash算法内存不足的时候)。
5.9 墓碑
软删除,应用并不直接执行数据库的delete删除操作,而是使用update操作把某列值标记为“已删除”。
Cassandra中,上述操作在删除的值上放置墓碑。那么,在执行压紧操的的时候,比墓碑更旧的数据都会被清除。
5.10 分阶段事件驱动
没太看明白
5.11 管理与服务
Cassandra守护进程
存储服务
消息服务
提示移交管理器
最新文章
- lua元表Metatable
- JavaScript上传图片及时预览
- Java与模式读书笔记
- 基于IHttpAsyncHandler的UDP收发器
- ADO.Net增、删、改、查
- 开发SCM系统笔记001
- jQuery插件使用和写法
- C#函数式程序设计之函数、委托和Lambda表达式
- [学习笔记]Javaweb开发视频教程之Tomcat9配置
- xshell6 评估期已过 解决办法
- C# 切换中英文输入法
- Codeforces Round #382 (div2)
- composer的安装方法 以及 ThinkPHP5安装
- OpenCV中Mat的使用
- Methods to reduce the number of pipeline stages
- WHAT I READ FOR DEEP-LEARNING
- WP8.1学习系列(第二十五章)——控件样式
- DBCP、c3p0、Druid三大连接池区别
- Python的日志记录-logging模块的使用
- PyCharm+selenium环境搭建报错:Traceback (most recent call last): TypeError: 'module' object is not callable
热门文章
- CCPC 2017 哈尔滨 D. X-Men &;&; HDU 6233(思维+期望)
- Luogu P4781【模板】拉格朗日插值
- HDU 6048 - Puzzle | 2017 Multi-University Training Contest 2
- 【Android-布局复用】 多个界面复用一个布局文件(二)
- 对JavaScript 模块化的深入-----------------引用
- PHP mysqli_ping() 函数
- (二)一个MFC程序,消息映射,纯代码
- jQuery系列(十):事件对象
- a a[0] &;a &;a[0]的理解
- Friend-Graph (HDU 6152)2017中国大学生程序设计竞赛 - 网络选拔赛