cassandra 系统分析 架构

cassandra

cassandra是无中心节点的列式数据库

集群管理:
     使用gossip算法,最终每个节点都知道集群中的所有节点信息,新增一个节点,新节点发送上线消息,
     其他节点之后后,向邻居节点传播这个消息,邻居又向他的邻居传递,最终大家都知道了

数据路由:
     使用一致性hash算法,每一条数据和节点都有一个hash值,都处于一个hash环上
     写数据:
          客户端连接到任意一个节点,这个节点就是这次写请求的协调者,协调者计算数据的hash,看这个hash值属于哪个节点管辖,把这个数据转发给这个节点(这个是数据的第一副本),协调者还会根据副本策略把数据同步到多个其他节点(这个是第二、第三 ...第N 副本了)
     读数据:
          客户端连接到任意一个节点,这个节点就是这次读请求的协调者,协调者计算数据的hash,看这个hash值属于哪个节点管辖,向这个主机发送读数据请求,不同的备份策略下,协调者也可能会向备份节点发送读数据请求,获取结果返回给客户端

数据存储模型:
       使用列式存储,和hbase类似
       写入、删除、修改数据时,是在文件后追加数据操作,并不真正(或者在内存中写入了)写入、删除、修改数据,是顺序IO ,效率很高

系统可用性:
       数据会被备份,除非副本机器全部宕机,不然总能找到数据
       任意节点知道系统所有节点,能完成任意的数据路由,所以有节点宕机,对系统可用性没影响(除非大规模宕机,导致存活的节点压力剧增)

数据一致性:
       多副本之间一致性,使用NRW模型
       W:写成功的节点数
       R:读成功的节点数
       N: 副本数量
       满足W + R > N 这个要求,就能保证数据强一致性

系统性能:
       写、修改性能较好
             因为写数据都是顺序IO,性能较高
       读性能正常
             因为要读多个副本,导致性能稍低
       以上这些性能描述都不是定量的结论,只是和其他NOSQL相比较的相对性能

posted @ 2017-05-19 10:58  高压锅里的大萝卜  阅读(496)  评论(0编辑  收藏  举报