写在前面

cassandra3.x官方文档的非官方翻译。翻译内容水平全依赖本人英文水平和对cassandra的理解。所以强烈建议阅读英文版cassandra 3.x 官方文档。此文档一半是翻译,一半是个人对cassandra的认知。尽量将我的理解通过引用的方式标注,以示区别。另外文档翻译是项长期并有挑战的工作,如果你愿意加入cassandra git book,可以发信给我。当然你也可以加入我们的QQ群,104822562。一起学习探讨cassandra.

架构简介

cassandra是为跨多个节点、没有单节点失败、大数据量负载系统设计的。它的架构考虑了系统和硬件可能发生的故障。Cassandra 通过在多个相似的节点构建点对点的分布式通信系统来解决这个问题,将数据分布在集群中的所有节点上。每个节点定时的和集群中其他节点通过点对点的gossip通信协议交换自身信息。每个节点上通过顺序写commit log 来捕获写事件,从而实现数据的持久化。然后对数据进行索引,写入到内存结构,memtable,相当于写回缓存。每次memtable满了,数据就会被写到磁盘上一个SSTable的文件中。所有的写操作都自动分区、在集群中复制。Cassandra 通过compaction 任务定时合并SSTables,删除掉通过墓碑标记为删除的过时数据。多种repair机制来确保数据能够在集群中保持一致。

写回缓存

缓存有两种重要的策略,write through 和write back

使用 write-through的cache,将数据写入到cache同时也将数据写入到存储装置。而write back则在写入cache的时候,不写入到存储装置,待数据有一定量和再写入到存储装置。

所以通常使用write-back比write-through更有效率,但write-back需要承担掉电cache中的信息丢失的风险。cassandra可以通过commit log来避免cache信息丢失后导致的问题

Cassandra 是一个分区行储存的数据库,其中行通过一个不可少的主键唯一标识,多行组成表。Cassandra 架构允许授权用户通过CQL在任何数据中心的节点上连接到集群的任何节点,为了易使用,CQL使用了类似SQL的语法。和cassandra进行交互的最基本的工具就是CQL shell,即cqlsh.使用cqlsh,你可以创建keyspaces,tables.增删改查表数据。Cassandra3.x需要CQL2.2+支持。如果你喜欢图像化工具,可以使用DataStax DevCenter,生产环境中,DataStax 提供一系列的driver。一般情况下,一个应用在集群中有一个keyspace,有很多不同的表组成。

客户端的读或写请求可以发送到集群中的任意节点上。当一个客户端通过一个请求连接到某个节点,这个节点就作为这次请求的协作者(coordinator)。协作者相当于存储这次请求数据的cassandra节点和客户端的中间代理。协作者决定应该向ring环中的哪些节点发出请求。

Cassandra 默认分区,会根据partition key将数据分布在各个节点上,每个节点上都存储着这样的一份映射关系,所以coordinator知道向ring环中的哪些集群节点发出请求。

主要结构

  • 节点(Node)

    存储数据的地方,是Cassandra的基本构成。

  • 数据中心

    相关节点的集合。一个数据中心可以是一个物理的数据中心,也可以是虚拟的数据中心。不同的负载应该使用不同的数据中心,物理或者虚拟的数据中心。复制可以在数据中心之间进行。使用不同的数据中心可以阻止节点被其他的负载所影响,另外可以使得请求靠近DB,获取低延迟。取决于复制设置,数据可以被写到多个数据中心。数据中心不要横跨物理区域。

  • 集群

    一个集群包含一个或多个数据中心,集群可以跨越物理区域

  • 提交日志(commit log)

    所有的数据为了持久化储存,都会先写到commit log.当所有的数据都从内存中写到SSTables后,commit log 可以被存档,删除,或者回收

  • SSTable

    SSTable(sorted string table)是一个不可改变的数据文件,cassandra会间断性的写数据到memtable.SSTables 是只可追加,顺序存储在磁盘,不同的cassandra table数据单独维护在不同的sstable文件中。

  • CQL Table

顺序列的集合,可以通过行来获取。一个table 有列和一个主键组成。

Cassandra 主要构成

  • Gossip

    一个peer-to-peer的通信协议,用来发现和分享集群中的节点位置和状态信息。Gossip 信息持久化的存储在每个节点的本地,当重启一个节点,可以马上获得。

  • Partitioner

    分区器决定了哪个节点将会存储数据的第一份副本,以及如何在集群的其他节点上分布其他副本。数据的每一行有一个唯一标识primary key,有可能和partition key一样。但是也有可能还有clustering 列。分区器是一个hash算法,token值是从行的primary key hash得到。分区器使用这个token值来决定哪些节点存储该行的副本。Murmur3Partitioner 是Cassandra新版本的默认分区策略,也是几乎所有情况下的最好分区策略选择。

primary key由partition key和clustering key构成,可以没有clustering key,不可以没有partition可以

  • 复制因子

    所有的副本跨越整个集群,复制因子为1意味着每一行只有一份副本,存储在一个节点上。复制因子为2,意味着每一行有两份副本,每一份副本在不同的节点上。所有的副本都是一样重要。没有primary或者master副本。可以为每个datacenter分别定义复制因子。通常复制因子的数量应该大于1,但是不要超过集群中的节点数量。

  • 副本放置策略

    Cassandra将副本存储在多个节点,确保数据的可靠性和故障容忍性。复制策略决定了副本放置在哪些节点上。数据的第一个副本就是第一份复制,没有什么不一样。对于大部分的部署,强烈推荐NetworkTopologyStrategy,因为未来需要扩展的话,它可以很方便的扩展到多个数据中心。

  • 探测(Snitch)

    Snitch 定义了数据中心和机架中的一组机器,即副本放置策略拿来放置副本的机器。

    当你创建一个集群的时候你必须配置一个snitch,所有的snitches都使用动态探测层,可以监测性能,为读操作选择最好的副本。snitch默认是开启的,也是适合大部分的部署的。可以在cassandra.yaml配置文件中为每个节点配置动态的snitch阈值

    默认的SimpleSnitch 不能识别数据中心和机架信息。在公有云上可以为单数据中心或者单地区的部署配置这样的策略。生产环境推荐使用GossipingPropertyFileSnitch,定义了一个节点的数据中心和机架信息。通过gossip将信息传递给其他节点。

  • cassandra.yaml配置文件

    集群初始化属性设置的主要配置文件,table缓存参数,调节属性、资源利用、超时设置、客户端连接、备份、安全。

    默认情况下,一个节点存储数据的目录也是在cassandra.yaml文件中配置的。

    在生产环境中,你可以将commitlog-directory和data_file_directories放在不同的磁盘中。

  • 系统keyspace表属性

    你可以使用客户端,比如CQL,编程来设置基于每个keyspace或者每个表的存储配置属性

cassandra 3.x官方文档(2)---架构解析的更多相关文章

  1. Cassandra 3.x官方文档(1)---关于Cassandra

    写在前面 cassandra3.x官方文档的非官方翻译.翻译内容水平全依赖本人英文水平和对cassandra的理解.所以强烈建议阅读英文版cassandra 3.x 官方文档.此文档一半是翻译,一半是 ...

  2. cassandra 3.x官方文档(6)---内部原理之存储引擎

    写在前面 cassandra3.x官方文档的非官方翻译.翻译内容水平全依赖本人英文水平和对cassandra的理解.所以强烈建议阅读英文版cassandra 3.x 官方文档.此文档一半是翻译,一半是 ...

  3. cassandra 3.x官方文档(5)---探测器

    写在前面 cassandra3.x官方文档的非官方翻译.翻译内容水平全依赖本人英文水平和对cassandra的理解.所以强烈建议阅读英文版cassandra 3.x 官方文档.此文档一半是翻译,一半是 ...

  4. cassandra 3.x官方文档(4)---分区器

    写在前面 cassandra3.x官方文档的非官方翻译.翻译内容水平全依赖本人英文水平和对cassandra的理解.所以强烈建议阅读英文版cassandra 3.x 官方文档.此文档一半是翻译,一半是 ...

  5. cassandra 3.x官方文档(3)---gossip通信协议及故障检测与恢复

    写在前面 cassandra3.x官方文档的非官方翻译.翻译内容水平全依赖本人英文水平和对cassandra的理解.所以强烈建议阅读英文版cassandra 3.x 官方文档.此文档一半是翻译,一半是 ...

  6. cassandra 3.x官方文档(7)---内部原理之如何读写数据

    写在前面 cassandra3.x官方文档的非官方翻译.翻译内容水平全依赖本人英文水平和对cassandra的理解.所以强烈建议阅读英文版cassandra 3.x 官方文档.此文档一半是翻译,一半是 ...

  7. lavarel5.2官方文档阅读——架构基础

    <目录> 1.请求的生命周期 2.应用的架构 3.服务提供者 4.服务容器 5.Facades外立面(从这节起,看中文版的:https://phphub.org/topics/1783) ...

  8. 【Java架构:基础技术】一篇文章搞掂:Spring Boot 官方文档解读

    本文篇幅较长,建议合理利用右上角目录进行查看(如果没有目录请刷新). 本文内容大部分是翻译和总结官方文档,可以到https://docs.spring.io/spring-boot/docs查看(此地 ...

  9. Lagom 官方文档之随手记

    引言 Lagom是出品Akka的Lightbend公司推出的一个微服务框架,目前最新版本为1.6.2.Lagom一词出自瑞典语,意为"适量". https://www.lagomf ...

随机推荐

  1. Eclipse代码块折叠插件,安装使用

    在代码编写中经常会遇到一些很长的set(xxx)的代码,非常影响体验. 而Eclipse的folding插件可以自定义的将代码块进行折叠. 效果如下图所示: 可以根据代码块的功能来进行折叠,从而保证代 ...

  2. JS 语言核心(JavaScript权威指南第六版)(阅读笔记)

    前言: 对于程序员,学习是无止境的,知识淘换非常快,能够快速稳固掌握一门新技术,是一个程序员应该具备的素质.这里将分享本人一点点不成熟的心得. 了解一门语言,了解它的概念非常重要,但是一些优秀的设计思 ...

  3. [C#]在 DotNetCore 下的 Swagger UI 自定义操作

    1.Swagger UI 是什么? Swagger UI 是一个在线的 API 文档生成与测试工具,你可以将其集成在你的 API 项目当中. 支持 API 自动同步生成文档 高度自定义,可以自己扩展功 ...

  4. Baidu音乐爬虫

    Baidu音乐歌曲爬虫: 1.分析Baidu音乐歌曲下载接口,组装参数 2.判断是否需要登录 a.使用cookie b.使用selenium 3.歌曲信息页面分析 4.数据表设计 歌曲类型表 歌曲表 ...

  5. 词向量:part 1 WordNet、SoW、BoW、TF-IDF、Hash Trick、共现矩阵、SVD

    1.基于知识的表征 如WordNet(图1-1),包含同义词集(synonym sets)和上位词(hypernyms,is a关系). 存在的问题: 作为资源来说是好的,但是它失去了词间的细微差别, ...

  6. NOIP 2015运输计划

    题目背景 公元 2044 年,人类进入了宇宙纪元. 题目描述 L 国有 n 个星球,还有 n-1 条双向航道,每条航道建立在两个星球之间,这 n-1 条航道连通了 L 国的所有星球. 小 P 掌管一家 ...

  7. C++Primer学习——类型转换

    无符号之间的运算 当一个是无符号类型,另外一个是带符号类型: 如果无符号不小于带符号,那么带符号转换成无符号. 如果无符号小于带符号,当无符号类型的所有值都能存到带符号中时,则无符号转换成带符号,否则 ...

  8. C++Primer学习——各种运算符

    前缀递增和后缀递增 class NewInt { public: NewInt():RootInt(0){}; NewInt(int IniInt):RootInt(IniInt){}; NewInt ...

  9. Angular 和 Vue 使用的对比总结 -- 脚手架

    前言 之前是用Vue的,现在由于工作原因,开始使用Angular.分别是Vue2和Angular5入的坑.只是从使用上来对比总结,加深记忆,避免混淆. 什么 ?  你问实现原理的异同及优劣? 本宝宝还 ...

  10. Linux安装JProfiler监控tomcat

    下载JProfiler包wget http://download-keycdn.ej-technologies.com/jprofiler/jprofiler_linux_9_2.rpm 安装JPro ...