分类:计算机信息管理论文范文 时间:关注:(1)
的内部到达时间都被存储在各自的节点的样本窗口(sampling windows)中,系统通过估计这些内部到达时间的分布来计算Φ值。然后再给定的显著性要求下(允许犯错误的概率),用计算出来的Φ与分布中的临界值做比较,如果大于临界值,则拒绝原假设,即某个节点的确存在错误,针对这个节点的操作被中止;如果计算出来的Φ小于临界值,则接受原假设,即某个节点没有错误,可以进行对它的操作。具体过程见图1.以前的文献认为内部到达时间类似服从高斯分布(Gaussian),但是Cassandra使用指数分布来更好的估计这一分布。总的来说,Accrual Failure Detector拥有很高的精确度和运行速度,并且这种错误检测的机制可以根据不同的网络条件和服务器负荷情况来进行自我调整。4. 引导程序(Bootstrapping)
当一个节点初次运行时,它在圆环空间上随机选择一个片段作为它的位置。为了使系统能够容错,圆环上节点的位置映射永久的保存在本地磁盘上,同时也存储在领导节点上。然后,这个片段的信息被以“Gossip”的方式传递到集群中的其他节点上。通过这种方式,圆环空间上的所有节点都能够同时了解其他节点的位置及存储情况。这也保证了在复制一节中提到的高度的数据可获得性:因为每个节点都存有其他所有节点的信息,因此,当任一节点接受到读写请求时,它能够将针对某个Key值的请求正确的传递到存储这个Key值的其他节点上。通过bootstrapping,当一个节点需要接入集群时,首先它会读取其配置文件中的连接点列表。这些集群中初始的连接点被称为集群的种子,种子也可以来自配置服务,如领导节点Zookeeper。
5. 扩展增容
在分区一节中,曾经提到过Cassandra系统高度的扩展性,即新加入的存储节点不会影响整个系统的正常工作。具体而言,当一个新的节点加入到系统中时,它被指派一个圆环空间上的片段,来缓解高负荷的节点。这种方式的结果是,新的节点会分割其他节点原来负责的区域,而新的节点只会分割它在圆环上的位置周围的节点的存储区域,而不会影响其他区域。存储空间被分割的节点将其放弃的数据使用“kernel-kernel”的复制技术传递给新的节点。实际运行情况表明这些数据可以以每秒40MB的速度从一个单一节点传递到其他节点。Cassandra的开发人员通过使多个副本同时参与“bootstrap”传输来提高传输速度,这种并行传输的方式的机制与Bittorrent相似。通过高速的复制技术,Cassandra系统达到了高度的扩展性。
以上五种技术是在Cassandra系统中应用的比较核心的分布存储技术,他们协同工作,保证了数据高度的可获得性和扩展性。当数据量不断扩大时,Cassandra系统能够使用以上方法很好的保持系统的稳定,此外以上方法也保证了数据的安全性,基于复制机制的存储方式不仅提高了可获得性,同时面对若干主机出现瘫痪的情形,也能保持系统的正常工作,并且确保数据不会丢失。同时,Cassandra系统也能够保证数据的持久性,这种数据的持久性要依赖本地文件系统。具体而言,对于写操作,通常涉及两个子操作:1.将写操作记录到一个“commit log”中;2.当前一个操作成功后,更新内存中的数据结构。当内存中的数据容量达到一个特定值时,它将自己导入本地磁盘中。所有的写操作都连续存储在本地磁盘上,并且建立行主键的索引以便查询,这些索引与数据文件一同存储。对于读操作,首先查询内存中的数据结构,找不到所需信息时才检索本地磁盘。这种内存—磁盘的双重存储,和首先将任一写操作记录到“commit log”并存入磁盘的方式,通过本地文件系统的持久性保证了数据的持久性。
总结
Cassandra分布存储系统旨在应对海量数据的存储、数据的安全性问题以及基于Key-value的查询需求。通过运用上文提到的各种技术,Cassandra将数据从传统的关系数据库单一数据中心的存储方式过渡到分布的存储方式。具体而言,Cassandra的系统结构为多个分布在不同地点的存储节点,这些节点通过高速网络相连。数据通过某种哈希算法被指派到系统中的各个节点中。同时,系统利用复制的技术将存储在不同节点内的数据信息复制到其他节点上,这保证了数据的安全性,同时也提高了数据的获取速度,具体的分配机制见上文“分区”一节的介绍。当数据量不断扩大时,会有更多的节点加入到Cassandra系统的集群中,Cassandra节点集群的圆环逻辑结构保证了节点的加入不会影响系统中其他节点的工作,这使得系统具有良好的扩展性能。这种分区-复制的技术也保证了当系统中一个或多个节点瘫痪时,系统仍能正常工作,这是因为每个节点上不仅存储了自己复制的区域内的数据,还保存着其他节点内数据的副本和所有节点存储情况的元数据,进而在发生节点瘫痪时保证数据的安全。
相对于关系型数据库,Cassandra分布存储系统中的数据结构并不能很好的支持复杂的结构关系查询,但是对于一些只针对某个Key值进行简单查询的数据,其性能和反应时间要远远优于关系型数据库。比如在当今流行的各大网络社区或B2B,B2C网站中,面对海量的数据和每天大量的信息吞吐量,Cassandra这类基于Key-value的分布式存储系统会逐渐的更加广泛地得到应用。
参考文献:
[1]. Giuseppe DeCandia, Deniz Hastorun, Madan Jampani, Gunavardhan Kakulapati, Avinash Lakshman, Alex Pilchin, Swaminathan Sivasubramanian, Peter Vosshall and Werner Vogels, Dynamo: Amazon’s Highly Available Key-value Store, 2007
[2]. Fay Chang, Jeffrey Dean, Sanjay Ghemawat, Wilson C. Hsieh, Deborah A. Wallach Mike Burrows, Tushar Chandra, Andrew Fikes, Robert E. Gruber, Bigtable: A Distributed Storage System for Structured Data, 2006
[3]. Avinash Lakshman, Prashant Malik, Cassandra - A Decentralized Structured Storage System, 2009
[4]. Arin Sarkissian, WTF is a SuperColumn? An Intro to the Cassandra Data Model, 2010-3-22
[5]. Moritz Y. Becker Peter Sewell, Computer Laboratory, University of Cambridge, JJ Thomson Avenue, Cambridge, United Kingdom, Cassandra: Distributed Access Control Policies with Tunable Expressiveness
[6]. Jonathan Ellis, Cassandra_ Open Source Bigtable + Dynamo, 2010
[7]. Ronald Mathies, Installing and using Apache Cassandra With Java Part 1(Installation), Installing and using Apache Cassandra With Java Part 2 (Data model), Installing and using Apache Cassandra With Java Part 3 (Data model 2), Installing and using Apache Cassandra With Java Part 4 (Thrift Client), Installing and using Apache Cassandra With Java Part 5 (Thrift Client 2), 2010
[8]. Mike Perham, Cassandra Internals – Writing and Reading, http://www.mikeperham.com, 2010