Cassandra -去中心化的结构化存储系统 ,API与系统架构

4.      API

Cassandra API包含下面三个简单方法。

l  insert(table , key ,  rowMutation)

l  get(table ,  key ,  columnName)

l  delete(table ,  key ,  columnName)

columnName 可以指向列族中的一个列,一个列族,一个超级列族或者 超级列族中的一列。

5.       系统架构 SYSTEM ARCHITECTURE

在生产环境中运行的存储系统的架构是非常复杂的。除了现行的数据存储组件以外,系统还需要满足如下要求。具有足够健壮性和扩展性来支持负载均衡,节点间关系维护和故障检测,故障恢复,同步复制,过载处理,状态传输,并发和任务调度,请求封装,请求路由,系统监控,配置管理。详细的介绍这些解决方案超出了本文的范围,因此我们在本文介绍Cassandra中分布式存储的核心技术: 分区,复制,节点关系,失效处理和扩容。这些模块协同工作,处理读写请求。一般来讲,对于一个key的读写请求,会路由到Cassandra集群的某个具体节点上面。这个节点,能够决定请求的副本节点。对于写来说,系统将请求路由到副本上面,等待最少的副本节点【编辑:最少的副本节点,既能维持系统一致性的最低的副本的数量】完成写请求。对于读请求,根据客户端对于一致性的要求,系统或者将请求路由到最近的副本节点,或者路由到所有的节点,等待有效的节点返回结果。

5.1          分区 Partitioning

Cassandra的一个关键特性,是可以规模扩容。这就要求,系统能够动态在节点之间分割数据。Cassandra通过一致性的有序哈希算法,来分割数据。一致性的哈希函数中,输出的值域,在一个固定的环形空间中(哈希的最大值 紧邻着哈希的最小值)。在系统中,每个节点都会被随机分配一个值,用来标定它在环中的位置。通过哈希数据的key,来定位数据所在节点的位置。然后按照顺时针的循序,从数据节点的位置开始,找到第一个编号大于数据节点编号的节点。这个节点就是这个key的调度节点。应用程序指定这个key,然后Cassandra通过这个key来路由请求。因此,每个节点都对 环中他和他的前任节点之间的区域负责。一致性哈希规则的好处就是,一旦有新的节点加入,或者有节点离线退出,那么受影响的就是节点相邻的节点,其他的节点不受影响。基本的一致性哈希算法存在一些问题。第一,随机的分配节点的位置,会导致数据和节点负载的不均衡。第二,基本算法没有考虑到节点之间的性能差异。目前有两种方案解决这些问题,第一,像dynamo一样,为每个节点在环中分配多个位置。第二,分析环的负载情况,将负载较轻的节点,移动到负载较重的节点附近。Cassandra采用第二种方案,这种方案设计和实施上,都有非常好的可追踪性,另外在做负载均衡时,可以提供非常有效的决策数据。

5.2          复制 Replication

Cassandra通过复制技术,来实现高可用性和持续服务能力。 每个数据项目都会在N个机器上做复制, N被称为复制因子,通过参数per-instance来配置。每个key都会赋值给调度节点k,调度节点负责在他的控制范围内的节点的数据复制工作。除了在调度节点控制范围之内复制数据项目以外,调度节点还会在环中N-1节点做数据复制工作。Cassandra允许客户端控制如何复制数据。Cassandra提供了一些复制策略给客户端,比如 “Rack Unaware” “Rack Aware” (在一个数据中心内) 以及 “Datacenter Aware” .应用程序通过复制策略来选择副本。如果应用程序端选择了”Rack Unaware”策略,那么系统会选择调度节点的N-1个后续节点,作为副本节点。对于”Rack Aware” 和 “Datacenter Aware” 策略算法上会复杂一些。Cassandra将会向Zookeeper做一次系统请求,获取一个领袖节点。在每个节点加入集群时候,都会向领袖节点去查询副本节点的覆盖范围,领袖节点能够确保,环中的每个节点的副本节点数量,不超过N-1. 每个节点都会本地缓存一份关于节点覆盖范围的meta数据信息,同时考虑到容灾的需求,在ZooKeeper上面也会存储一份。这样当节点崩溃时候,就会有关于这个节点覆盖范围的备份信息存在。我们借用Dynamo parlance 系统中的概念,将负责节点的覆盖范围,视为优先的覆盖范围。

在5.1已经谈到,每个节点都会关注系统中其他的节点,当然也会关注节点覆盖范围之内的节点。Cassandra在节点失效,节点间网络中断的情况下,通过降低对Quorum的要求,提供了持续服务的保证。 数据中心在电力中断,网络中断,冷却系统故障,或者自然灾害等情况下,都会失效。Cassandra可以配置成每一行多个数据中心都有副本。实际上,一个KEY的优先覆盖范围列表在构建的时候,会考虑到存储节点跨越多个数据中心的情况。这些数据中心通过高速专线网络相连。通过跨越数据中心的复制方案,我们可以处理任何数据中心的问题。

Leave a Reply

Your email address will not be published. Required fields are marked *