Cassandra_架构
来源:互联网 发布:微软软件开发工具 编辑:程序博客网 时间:2024/06/01 13:11
System keyspace
用于存储关于集群的原数据,以帮助各种操作的顺利进行。不仅存储了本地节点的元数据,也存储了提示切换信息,这些元数据包括:
节点令牌;
集群名;
用于支持动态装载的keyspace和schema的定义;
迁移数据;
节点是否自举成功。
schema的定义存储于两个列族之中:Schema列族保存用户的keyspace和schema的定义;Migrations列族则用于记录对keyspace的变更。
System keyspace是无法手工修改的。对等结构(P2P)
主从结构:主节点具有对数据的控制权,从节点与主节点进行数据同步。任何变更都会写入主节点,并从主节点传送给从节点。这个模型是对读数据优化的,允许客户端从任意节点读取数据。但是,这个模型中数据复制是从主到从单向的,这带来一个严重的后果,所有些操作都必须送到主节点;也就是说,存在一个潜在的单点故障。在主从结构中,主节点掉线的后果很严重。
对等结构:所有节点的地位彼此相同,没有主从差别。更加易于通过增加节点来扩展系统。gossip与故障监测
为了做到无中心、容忍网络分裂,Cassandra使用了一个gossip(留言)协议来进行环内通信,这样每个节点都会有其他节点的状态信息。gossip协议(流言协议,也叫“传染协议”),通常假设网络是不可靠的,常见于大规模、无中心的网络系统,经常作为分布式数据库中的一种自动数据副本复制机制。gossip是一种节点可以按照自己的期望,自行选择与之交换信息的节点的通信方式
gossip会用于故障监测,所以Gossiper类会维护一个节点列表,存储节点的死活信息逆熵与读修复
逆熵是Cassandra的副本同步机制,用于保障不同节点上的数据都更新到最新的版本
在每次更新之后,逆熵算法都被引入。这会对数据进行校验和,并与其他节点比较校验和,如果校验和不同,就进行数据交换。如果一个读操作发现了同一时间戳的不同值,Cassandra会直接使用一个决胜机制来进行值的比较,以确保读修复不会进入死循环。memtable、SSTable、commit log
进行写操作的时候,数据是直接写入到commit log中的。commit log是Cassandra为了达到持久性而引入的一种错误恢复机制。写操作只有写入到commit log才被认为是成功的。这样即使数据还没有进入内存存储结构中(memtable),也可以进行数据恢复
数据写入commit log后,会写入到memtable内存数据结构中。当memtable之中存储的对象数量达到阈值以后,memtable会被刷入磁盘,放在一个称为SSTable的文件中。然后创建一个新的memtable接收数据。
所有的写操作都是顺序进行的,写一个值不需要任何读或者定位操作,因为所有的写都是以追加的方式写入的,这正是Cassandra的写操作性能出众的原因。压紧操作定期地重新组织数据,通过拆分,写操作是直接的追加写,之后的压紧可以组织数据,从而获得更好的读性能。对于读操作,会首先检查memtable来查找值提示移交
提示移交允许Cassandra对于写操作永远可用,降低离线节点恢复服务之后的不一致的时间
压紧
压紧操作用于合并SSTable,在压紧操作过程中,SSTable中的数据会被合并:键值进行合并,列被组织合在一起,丢弃墓碑,创建新的索引。压紧操作是通过合并大的累积文件而释放空间的过程。这个操作是完全透明的,并且在整个服务器的声明周期中持续进行。
在压紧操作中,合并后的数据是有序的,对这些有序的数据会创建一个新的索引文件,同时上述这些刚刚合并的、有序的、有索引的数据会被写入一个单独的新的SSTable之中(每个SSTable包含三个文件:数据、索引、过滤程序)。
压紧的另一个重要功能是通过降低定位的次数来提高性能。
Cassandra中有多种不同的压紧操作。主压紧的触发原因有两种:通过节点探测触发或是自动进行。节点探测会给被探测节点的相邻节点发送一个TreeRequest消息,当一个节点收到TreeRequest时,会立刻进行一次只读压紧,来验证列族。
可以通过降低压紧线程的优先级来提高整体性能,使用如下参数设置:
-Dcassandra.compaction.priority = 1
这会影响CPU的使用率,而非IO的。Bloom filter
Bloom filter是一种提升性能的手段,是一种用于判断一个元素是否是一个集合的成员的超快速、但不确定的算法。Bloom filter将数据集里的值映射为一个位数组,并将一个大数据集凝练为一个摘要字符串。Bloom filter位于内存中,这样可以减少查找键值时的磁盘访问,从而改善性能。
墓碑
当执行一个删除操作时,数据并不会被立刻删除。会被视为一个更新操作,在相应的值上放一个墓碑。墓碑是一个删除标记,当执行压紧时,比墓碑更老的内容会被清理掉。有一个相关设置,称为Garbage Collection Grace Seconds(垃圾回收时延),这个时间是服务器对一个墓碑进行垃圾回收之前的等待时间,Cassandra会一直跟踪墓碑的年龄,一旦某个墓碑的寿命比GCGraceSeconds更长了,就会回收它。这个时延的设计目的是留下足够长的时间,以便于恢复数据。
分阶段事件驱动架构(SEDA)
在一个典型的应用中,一个单独的任务单位经常会在一个线程内来完成。Cassandra却有所不同:它的并发模型是基于SEDA的,一个工作可以从一个线程开始,之后再移交给另一个线程。一个操作被细分为不同的阶段,与阶段关联的线程池来决定执行的任务。因为每个阶段由不同的线程池处理,Cassandra可以因此获得显著地性能收益。
Cassandra中,作为阶段的操作有:
·读
·Mutation
·Gossip
·响应
·逆熵
·负载均衡
·迁移
·流
- Cassandra_架构
- Cassandra_基础
- Cassandra_调整占用内存大小
- Cassandra_维护和调优
- Cassandra_ Cassandra 定期删除数据方案 设计
- Cassandra_教程二_利用 CQL 操作 Cassandra
- Cassandra_教程一_Cassandra的简单操作_基于(cassandra-cli) 需要 2.2 及以下版本
- 架构
- 架构
- 架构
- 架构
- 架构
- 架构
- 架构
- 架构
- 架构
- 架构
- 架构
- 介绍一种音频信号分类方法
- python时间格式输出 以及递增 日期加一天
- Spring 事务
- Oracle 存储过程样例
- FMDB保存数组和字典
- Cassandra_架构
- Mac 打开、编辑 .bash_profile 文件
- Shell date嵌套赋值
- megan的javaScript学习笔记一
- 缓存失效竟然可以这么解?
- SpringBoot实现限制ip访问次数
- 在win7(32bit)下编译openssl
- Solr之精确、匹配、排序、模糊查询-yellowcong
- ORB-Slam2详解5 局部建图