上一节我们介绍RDBMS遇到的问题,这一节我们将介绍Cassandra以及Cassandra是否可以解决此问题。

    通过此章节,我们将学习到:

  1. 什么是Cassandra

  2. Cassandra数据的Hash分布

  3. Cassandra在CAP中的权衡

  4. Cassandra复制

  5. Cassandra可调一致性

  6. Cassandra多数据中心



什么是Cassandra

    Apache Cassandra是一个开源的、分布式、无中心、弹性可扩展、高可用、容错、一致性可调、面向列的数据库,它基于Amazon Dynamo的分布式设计和Google BigTable的数据库,有Facebook创建。总结特点如下:

    1. 分布式与无中心

    分布式意味着它可以运行在多台机器上,而呈现给用户是一个整体。无中心意味着Cassandra不会存在单点,也就是说每个节点都是一样的,没有节点会承担特殊的管理任务。与master/slave结构相反,Cassandra的协议是P2P的,并使用gossip来维护存活或死亡节点的列表。

ps:gossip算法又被称为反熵(Anti-Entropy),熵是物理学上的一个概念,代表杂乱无章,而反熵就是在杂乱无章中寻求一致,这充分说明了Gossip的特 点:在一个有界网络中,每个节点都随机地与其他节点通信,经过一番杂乱无章的通信,最终所有节点的状态都会达成一致。每个节点可能知道所有其他节点,也可 能仅知道几个邻居节点,只要这些节可以通过网络连通,最终他们的状态都是一致的,当然这也是疫情传播的特点。

    2. 高可用与容错   

从一般架构的角度看,系统的高可用性是由满足请求的能力来度量的。但计算机可能会有各种各样的故障,从硬件故障到网络中断都有可能。所以对于一个需要高可用的系统,它必须由多台联网的计算机构成,并且运行于其上的软件也必须能够在集群条件下工作,有设备能够识别节点故障,并将发生故障的中断的功能,在剩余系统上进行恢复。    Cassandra就是高可用的。可以在不中断系统的情况下替换故障节点,还可以把数据分布到多个数据中心,从而提供更好的本地访问性能,并且在某一数据中心发生火灾等不可抗拒灾难的时候防止系统彻底瘫痪。线性扩展    由于Cassandra采用P2P协议,可以很容易的进行水平扩展,而且性能也随之线性增长。ACID支持良好    Cassandra的一致性可调:严格一致性 ~ 最终一致性。同时通过CAS(CompareAndSet)来支持轻量级事务。没有SPOF( Single point of failure)容易管理操作    Cassandra很容易进行添加、删除、替换节点等操作。


  • Cassandra数据的Hash分布

  1. 数据围绕着ring来分区

  2. 所有的nodes都会存储数据并响应查询(既可以读也可以写)

  3. 数据通过分区键(partition key)来定位

wKioL1dWYyuhwJk8AABtLN_kCmQ548.jpg-wh_50

wKioL1dWY8nwc1vMAACYLbk-LgQ086.jpg

  • Cassandra在CAP中的权衡

  1. 在满足partitioning情况下不可能同时满足consistency和highly available

  2. 跨数据中心延迟也导致了一致性不现实

  3. Cassandra选择了Availability和partitioning(Cassandra的一致性是可调的)

    CA:

    主要支持一致性和可用性,这意味着你很有可能需要使用两阶段提交的分布式事务。也就是说,如果网络发生分裂,那么系统可能会停止响应。

    AP:

    主要支持可用性和分区容错性,意味着你得系统可能返回不太精确的数据,但系统将始终可用。

wKioL1dWan3RVCNyAAFL33zoo_c876.png-wh_50


  • Cassandra复制

    数据是自动复制的,你只需要选择复制服务器的数量。定义复制的数量,我们称之为“replication factor”or RF。

    如果一台机器down掉,丢失的数据会通过“提示移交”(hinted handoff)回放。(hinted handoff会在后续课程讲到)

wKioL1dWa5KQccgwAAKuWzrKgXk673.png-wh_50

  • Cassandra可调一致性

    每次查询都可以指定一致性级别:ALL,QUORUM,ONE。意味着有多少个副本响应。

      Cassandra常被称之为“最终一致性”,这实际上有点让人误解。简单的说,Cassandra牺牲了一点一致性来换取完全的可用性。但是Cassandra实际更应该表述为“可调一致性”,它允许你方便的选择需要的严格一致性和最终一致性,在二者间找到平衡点。

wKiom1dWbDuwf98YAAXQB5rflow258.png-wh_50


  • Cassandra多数据中心

  1. 典型用例:clients写入本地DC,异步复制到其他DCs

  2. 每个数据中心每个keyspace都有复制因子,意味着每个数据中心都是高可用的

  3. 数据中心可以是物理的或逻辑的

wKiom1dWbNbARFx7AAJMJUtBw5s564.png-wh_50