`
ahuaxuan
  • 浏览: 638157 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

深入浅出cassandra 4 数据一致性问题概述

阅读更多

/**
   *author:ahuaxuan(张荣华)
   *date: 2010-2-28
   */

在上一篇文章,ahuaxuan和大家简单的熟悉了cassandra的集群环境的部署,接下来要做的就是搞清除这种部署模型的的理论依据.

理论依据一,数据一致性和W R N

首先简单解释一下数据一致性(这个问题是老生常谈的问题,任何一本应用开发的书上都有它的描述)
所谓的一致性其实就是事物ACID中的C:

事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。

(但是一致性并非只存在于事务环境中,这也就是说我们会有一些系统不能实现A, 或者I,但是能够实现C和D,这里面有一个哲学问题,是不是我们所有的应用都需要事务,如果所有的应用都需要事务,那么几年前mysql的
isam索引为什么会这么流行?所以说事务有事务的用处,非事务由非事务的用途。cassandra0.5中目前还没有实现完整的事务功能,但是已经有不少公司在使用。)

那么举两个非一致性的场景,比如说某个数据存放着两份备份,某一份数据被修改之后,必须保证这份修改被用户看到之前,另一份数据修改也已经完成。
或者说有相互依赖的两条数据,等用户能看到前条数据的时候,他一定能看到第二条数据。否则在修改的过程中,用户拿到了第一条刚修改完的数据,但是在拿第二条数据的时候却拿到了老的数据,
这两种场景都有可能在mysql的master-slaver模型中出现
在master中插入数据,然后去slaver中查找该数据,你有可能查找不到,具体的原因后面会讲到。


但是在这之前我们还得再来看看标题中的3个字母:

N: cassandra网络中复制数据的节点数
R: cassandra网络中读节点数
W:cassandra网络中阻塞写节点数(为什么是阻塞写?后面的文章中会讲到)

为什么要提出这三个概念呢,其实这三个概念和cassandra中的数据一致性和读写性能息息相关.

我们先来看第一个问题,数据一致性.

在一般的数据库集群(或者m-s之流的策略)中,读写操作的一致性问题向来会困扰一部分人,举个例子,在mysql的master和slaver模式中,
写操作总是由master负责,读操作有slaver负责,当然必要时master也可以负责读操作,但是我相信用过mysql的m-s模式的人一般都会碰到一个问题,
就是数据延迟的问题,一条写语句发往master,然后master会把数据复制到slaver上,但是这里有一个问题,复制和插入过程是没有全局锁来保证顺序的,也就是master写往自己,其实客户端就可以
从Master上读取这条数据,但是如果客户端操作的是slaver,那它就要碰运气了,因为复制的时间可长可短,而且和网络环境相关,有的时候数据延迟会高达12分钟.ahuaxuan曾经就碰到复制过程2分钟的场景.

但是如果这里有全局锁来控制复制过程,比如在cluster模型下,那么写操作必须等待所有的机器都写完,那么写操作才能返回,虽然这样容错性得到了保证,但是写操作的性能大大下降,而且集群环境中的节点越多写操作越忙.

在ahuaxuan看来,mysql的cluster模式和m-s模式其实也是W/R/N之间关系的一种表现.
举例来说,在cluster模式中(假设一共3台机器),由于要考虑到读操作和写操作的容错,所以写操作需要有全居锁的保证,而且所有的集群都要响应写操作,而读操作只需要操作一台机器,为啥了,因为所有的数据在用户能读之前都会在所有的mysql机器上.
所以我们可以把这种行为看成: N=mysql的集群数量(3), W=mysql的集群数量(3), R=1

而在m-s模式中,由于写只需要涉及m,所以这里W=1,而读操作也只是涉及到一台机器,所以R=1,而N还是为3,但是正如ahuaxuan论述的那样,m-s是不能保证一致性的,而且不能保证写操作的容错性.

我们再仔细看以下这两个例子的关系
cluster模型中, N=3, W=3(全局锁同步控制), R=1, 可以容错,可以保证一致性. W+R=4 > N=3
M-S模型中,    N=3, W=1(slaver是异步复制写,注意,这里不是同步读写,同步的话,这里的W就应该是3), R=1, 读操作可以容错,不能保证数据一致性, W+R=2 < N=3

而amazon论文中对W/R/N的论述大意如下:
如果W+R>N, 那么写读写操作都会有多份,这种模式下可以保证数据的强一致性. 在实现了同步(注意,这里不是异步)数据复制类m-s的场景中,N=2, W=2, R=1,这种模型可以保证数据一致性. 但是如果是异步数据复制的类m-s场景,那么如同ahuaxuan之前举的Mysql例子一样,是不能保证数据一致性的.

那么我们在想远一点,举一个比较极端的例子,如果N=3, W=3, R=1,这种是数据库集群常用的模型,所以在这种场景下读性能会远高于写性能.而如果N=3, R=3, W=1,这种场景下,写一次,但是读取的时候需要读多次,然后比较版本
所以在这种场景下写性能远高于读性能,如果要写性能很高的场景我们一般也不会采取这种模型.

那么我们再回头来看看使用数据库系统的时候我们需要些什么,我们要综合考虑我们的数据特征,然后来判断是水平切分,垂直切分等等,然后还要考虑各种部署模型,m-s, cluster等等.
当然这些技术目前都是比较成熟的,在一些大型的互联网系统,水平和垂直切分已经成了标准做法,而且往往他们和m-s或者cluster模型结合起来使用。
比如说在统计系统中,通常会通过日期来进行水平切分统计数据。在其他和id相关的系统中,可能将id进行hash做水平切分,等等类似的方案有很多。当然也有可能根据常用和非常用来对数据进行垂直切分。
与此同时对数据库进行m-s或者cluster部署(根据业务特征决定),但是由于m-s和cluster的扩展有限,所以通常还会将app和一组数据库(m-s或者cluster部署)绑定,进行整体failover.


但是
即使这样做在容错和水平扩展上还是会有局限性,随着数据量的增大,原来可行的方法会渐渐变得不可行,于是我们不得不寻找新的理论,新的方案,cassandra背后的理论也是在这种需求的促发下产生的.

回到正题,
通过ahuaxuan举了例子,我想同学们应该都基本上对W/R/N之间的关系有了一个比较直观的理解.既然这个话题放在这里说明,那么证明我们的cassandra中也存在这样的问题,
在后面的文章我们会讲到cassandra在网络上其实是dynamo理论的一个实现,这意味着存在如下事实.

每条数据并不是保存在cassandra中所有的节点上,部分数据会保存在部分节点上(而如何确定什么数据保存在什么节点上这是通过一致性hash算法来决定的.)
比如说我们一共有n个节点在网络中,那么如果根据key算出对应的value应该保存在n-m号节点上,那么我们可以认为这个value对象还会有备份在n-m-1,和n-m-2的节点上(假设N=3)
而在读取的时候,我们也可以通过consistency_level来控制R的值,这样对应的在cassandra中, N, W, R的关系也成为我们必须要了解的内容。


在后续的文章中,我们将通过代码来详细的分析cassandra中的数据备份策略,以及读策略, 但是在那之前,我们还需要知道cassandra中的网络模型,
以及W, R, N在cassandra模型中究竟处于什么样的位置。to be continued






8
0
分享到:
评论
5 楼 dongritengfei 2011-05-28  
如果给memcached增加持久化和备份的功能后(比如redis),与cassandra相比,cassandra有什么优势吗?
4 楼 咖啡刀 2010-06-22  
这个很不错...
3 楼 langyu 2010-05-10  
在内部采用一致性hash算法选择W节点上
引用
比如说我们一共有n个节点在网络中,那么如果根据key算出对应的value应该保存在n-m号节点上,那么我们可以认为这个value对象还会有备份在n-m-1,和n-m-2的节点上(假设N=3)
,这些节点之间是否会考虑相互备份,备份在不同的机架与地域上(如Hadoop实现的数据备份策略)?
2 楼 ahuaxuan 2010-03-26  
linkerlin 写道
目前还不知道Cassandra用在集群的什么位置比较合适?
能用来替换memcached么?

主要是从来数据间没有关系的数据,比如说用户的信息,一条用户记录和另外一个用户记录基本上不存在关系。

但是cassandra不是存储关系比较强的数据,所以它不是用来替代数据库的,只是把不适合存在于数据库中的数据挪出来而已。
1 楼 linkerlin 2010-03-25  
目前还不知道Cassandra用在集群的什么位置比较合适?
能用来替换memcached么?

相关推荐

    分布式数据库Cassandra 一致性详解.zip

    2.Cassandra ⼀一致性实现 2.1 CAS 2.2 Quorum读写 2.3 不不⼀一致产⽣生原因 2.4 Hinted handoff 2.5 Read repair 2.6 Manual repair 3.Cassandra应⽤用场景 4.总结 视频是mp4格式,配套文档下载地址...

    Cassandra:Cassandra数据一致性与副本策略.docx

    Cassandra:Cassandra数据一致性与副本策略.docx

    2019云栖大会Cassandra一致性详解-201909.pdf

    在2019云栖大会上,郭泽晖(索月)对Cassandra的一致性进行了深入的解析。Cassandra是一个分布式NoSQL数据库系统,它遵循CAP定理,即在分布式系统中,无法同时保证一致性(Consistency)、可用性(Availability)和...

    Cassandra的数据模型介绍

    每个键(Key)都会被哈希计算出一个分布式散列值,这个值决定了数据将在哪个节点上存储,并且可以通过一致性哈希实现数据的均匀分布。这种设计使得 Cassandra 能够轻松地进行水平扩展,只需要增加更多的节点,就可以...

    基于Cassandra的实时气象数据分布式存储系统.pdf

    Cassandra遵循CAP理论,即一致性、可用性和分区容忍性三个指标。Cassandra采用了弱一致性模型, Sacrificing some consistency for higher availability and partition tolerance. 2. 实时气象数据分布式存储系统 ...

    分布式存储系统:Cassandra:Cassandra的读写操作与数据一致性.docx

    分布式存储系统:Cassandra:Cassandra的读写操作与数据一致性.docx

    java导出cassandra数据

    在Java中导出Cassandra数据是一项常见的任务,用于备份、迁移或者数据分析。Cassandra是一个分布式NoSQL数据库系统,被广泛应用于大数据场景。本教程将详细讲解如何使用Java API来实现Cassandra数据的导出。 首先,...

    分布式存储系统:Cassandra:数据分布与一致性哈希算法.docx

    分布式存储系统:Cassandra:数据分布与一致性哈希算法.docx

    存储数据(cassandra)

    由于分布式系统可能出现数据不一致,Cassandra提供了反熵(Anti-Entropy)机制,定期进行数据修复以保持数据一致性。数据修复可以手动触发,也可以设置为定时任务。 ### 8. 灾备与恢复 为了应对灾难情况,...

    Cassandra数据模型

    - **一致性级别(Consistency Level)**:用户可以根据需求设置读写操作的一致性级别,平衡数据一致性和可用性。 6. **CQL(Cassandra Query Language)** - 为了简化数据操作,Cassandra提供了类似SQL的查询语言...

    深入研究Cassandra后重读Dynamo

    - **案例分析**:Twitter、Flowdock等公司在使用过程中遇到了一系列问题,包括但不限于数据一致性问题、性能瓶颈等。这些问题反映了Dynamo架构在实际应用场景中的局限性。 **2. 解决方案与改进** 针对Dynamo架构中...

    微服务架构下的数据一致性:概念及相关模式.zip

    本文将深入探讨微服务架构下的数据一致性概念,以及相关的设计模式和解决方案。 首先,我们需要理解数据一致性的重要性。在传统的单体应用中,由于所有业务逻辑都在同一个进程中执行,数据一致性相对容易维护。但在...

    在Spark上使用CLI读取Cassandra数据

    4. **使用CLI读取Cassandra数据**:CLI(命令行接口)是操作Cassandra的一种方式,虽然在Spark中通常我们会使用Spark Shell或Scala代码来操作Cassandra,但理解CLI的用法有助于更好地理解数据访问过程。`cqlsh`是...

    Cassandra实战

    总的来说,Cassandra是一个非常强大的分布式数据库,它的无中心、弹性可扩展、高可用、容错、一致性可调等特点,让它在处理大规模、分布式数据的场景下表现出了极强的优势。无论是在云计算、大数据分析还是实时应用...

    Cassandra实战.pdf

    Cassandra作为一款开源的分布式NoSQL数据库系统,以其高可扩展性、高性能和强大的数据一致性而著称,被广泛应用于处理大量结构化和半结构化数据的场景中。 ### 关键知识点一:Cassandra架构原理 Cassandra采用了一...

    cassandra详解

    通过灵活的数据模型、复制策略和一致性控制,Cassandra能够满足各种复杂业务的需求。然而,其最终一致性的特性可能不适合那些需要严格一致性的应用,因此在选择Cassandra时,需要根据具体业务场景进行权衡。

    cassandra权威指南(中文)

    综上所述,《Cassandra权威指南(中文)》涵盖了Cassandra的各个方面,不仅深入浅出地介绍了其基础知识和技术细节,还提供了丰富的实战案例和社区资源,对于初学者和专业人士来说都是一本不可或缺的手册。...

    cassandra数据存储系统

    此外,由于采用了去中心化的架构,Cassandra 在保证数据一致性的同时还能很好地处理分区问题,即在网络分区的情况下仍然能够正常工作。 #### 三、应用场景与案例分析 Cassandra 最初是为了满足 Facebook 的 Inbox ...

    Cassandra_概要指南

    随着用户数据量的爆炸性增长和对数据处理速度的需求日益提升,传统的关系型数据库在面对超大规模和高并发的场景时,逐渐暴露出性能瓶颈和扩展性问题。尤其在社交网络(SNS)类应用中,传统的数据库难以满足实时插入...

Global site tag (gtag.js) - Google Analytics