卡桑德拉降低了大数据的门槛
Apache Cassandra是一个免费的开源NoSQL数据库,设计用于跨大型集群管理大型数据集(比如pb)。在许多独特的特性中,Cassandra擅长于扩展写入和读取,它的“无主”架构使得创建和扩展集群相对简单。对于寻求能够支持快速和大规模增长的数据存储的组织来说,Cassandra应该是优先考虑的选项。
卡桑德拉出身于吉祥的家族。它不仅受到谷歌的Bigtable它从亚马逊(Amazon)的Dynamo中继承了自己的数据架构,还借鉴了亚马逊的分发机制。与Dynamo类似,Cassandra集群中的节点是完全对称的,它们都有相同的职责。Cassandra还使用dynamo风格的一致哈希来分区和复制数据。(Dynamo是Amazon的高可用键值存储系统,在它上面DynamoDB为基础)。
卡桑德拉是如何工作的
Cassandra令人印象深刻的缓存机制层次结构和精心安排的磁盘I/O确保了速度和数据安全。它的存储架构类似于日志结构的合并树:写操作首先被发送到一个持久的提交日志(确保持久的写),然后发送到一个称为memtable的回写缓存。当memtable被填满时,它被刷新到磁盘上的SSTable(排序字符串表)。所有磁盘写操作都是附加操作——大的顺序写操作,而不是随机写操作——因此非常高效。定期合并和压缩SSTable文件。
+也在网络世界有个足球雷竞技app大数据,大酬日+
Cassandra集群被组织为一个环,它使用分区策略均匀地分发数据。首选的partitioner是RandomPartitioner,它生成一个128位一致的散列来确定数据的位置。另一个组件称为“告密者”,它在节点的IP地址和它在机架或数据中心的物理位置之间映射。雷竞技电脑网站
当Cassandra写入数据时,该数据将被写入多个节点,以便在节点失败时仍然可用。将给定数据元素写入到的节点称为“复制节点”。Cassandra uses the snitch to ensure that the replica nodes for any particular piece of information are not in the same rack. Otherwise, if the rack were to fail, the data element and all its replica copies would be lost.
如果集群中的一个或多个节点被过度利用,Cassandra会借助“虚拟节点”(vnodes)对集群进行重新平衡。一个完全的逻辑结构,vnode本质上是一系列数据库行的容器。因为每个物理节点都被分配了多个vnodes,所以Cassandra可以简单地通过将一个虚拟节点从过载的集群成员移动到负载较轻的成员来实现再平衡。使用虚拟节点使负载平衡更加高效,因为它允许Cassandra通过将少量数据从多个源移动到一个目的地来实现平衡。
为了在面对节点故障时保持写吞吐量,Cassandra使用了“暗示切换”。A node receiving a write request will attempt to deliver the request to the replica node responsible for the data. If that fails, the recipient node (referred to as the "coordinator node") will save the request as a "hint" -- a reminder to replay the write operation when the unreachable replica node becomes available. If the coordinator node knows beforehand that the replica node is unreachable, the hint is saved immediately.
暗示移交是卡桑德拉的一致性修复功能之一。另一种称为“读取修复”的方法在读取请求处理过程中起作用。根据所选择的一致性级别(下面将解释),Cassandra可以通过只读一个副本节点来满足读请求。尽管如此,它仍将向所有副本节点发出后台读取,并验证所有节点都拥有最新版本的数据。那些没有被发送写操作,以确保所有的数据拷贝是最新的和一致的。
一致性或速度
RDBMS的一个突出优点是它坚持ACID(原子性、一致性、隔离和持久性)原则,这保证了在多场景设置中可重复的、确定性的行为,并帮助确保即使出现系统故障也能确保数据安全。像Cassandra这样的非关系数据库避开了ACID保证,因为随着数据库在数据量和I/O请求方面的扩展,它们的性能会受到限制。
卡桑德拉被描述为“最终一致的”。When data is written to Cassandra, that data is not necessarily written simultaneously on all replica nodes. As described earlier, some cluster members might be temporarily unreachable. However, hinted handoffs ensure all nodes eventually catch up, and the system becomes consistent. Similarly, read repairs catch and correct inconsistencies when the data moves in the other direction, from Cassandra to the outside world.
集群中的不同节点可能拥有给定数据元素的不一致副本,这种想法可能会让您感到不安。好消息是,您可以调优Cassandra的一致性级别。例如,在向发出请求的客户机应用程序确认写入操作成功之前,您可以控制写入操作所达到的一致性级别——写入数据的副本节点数量。
类似地,在读取操作上,您可以控制在响应返回给客户机之前有多少复制节点响应。此可调一致性级别的范围从Any(如果任何节点响应,则请求完成)到All(如果所有复制节点都响应,则请求完成)。介于Any和All之间的是一致性级别,例如Quorum,它允许在大多数副本节点都已响应的情况下完成请求。Cassandra的可调一致性是一个强大的特性,可以让你平衡速度和一致性,或者用一个来交换另一个。想要的速度吗?选择任何。想要完整的一致性?选择所有。
因为Cassandra是分布式的,所以集群的成员需要一种机制来发现彼此并通信状态信息。这就是卡桑德拉的八卦协议的切入点。正如你所猜测的那样,八卦得名于人类在群体中通过明显随机的人与人之间的对话传递信息的活动。
集群中的某些节点被指定为“种子”节点。每秒钟,一个Cassandra节点上的计时器就会启动,启动与集群中随机选择的两个或三个节点的通信,其中一个必须是种子节点。因此,种子节点将倾向于拥有集群的最新视图。(当一个新节点被添加到一个集群时,它首先与一个种子节点联系。)
卡桑德拉致力于保持八卦交流的效率。每个节点维护两种状态。HeartBeatState跟踪节点的版本号和节点重启的频率,版本号在节点信息发生变化时增加。ApplicationState跟踪节点的操作状态(例如当前负载)。节点之间交换心跳状态信息的消化信息。如果发现差异,节点然后交换ApplicationState信息摘要,并最终交换ApplicationState数据本身。此外,八卦算法首先寻求解决“距离较远”的差异(就版本号而言),因为这些差异更有可能体现最广泛的不一致性。
使用卡桑德拉
熟悉SQL的RDBMS用户应该对CQL非常熟悉,CQL是Cassandra查询语言,可以从基于python的Cassandra shell实用程序(cqlsh)或通过几个客户端驱动程序执行。客户端驱动程序可从以下网站获得行星卡桑德拉在这里你可以找到Java、c#、Node的支持cql的驱动程序。js, PHP等等。
过去,驱动程序使用Thrift API与Cassandra集群通信——Thrift是一种框架,用于为客户端和服务器创建与语言无关的远程过程调用。Cassandra的Thrift API现在被认为是一个遗留特性,因为CQL规范不仅定义了CQL语言,而且还定义了在线通信协议。
CQL的语法类似于它的关系“兄弟”。它有SELECT、INSERT、UPDATE和DELETE语句,这些语句都伴有FROM和WHERE子句。此外,CQL的数据类型也是您所期望的。您将发现整数、浮点数和双精度数、blob等等。当然,也有不同之处。首先,CQL没有连接操作。当您编写FROM子句时,您指定列族——但是,在CQL的最新版本中,术语“table”被用来代替“列族”。CQL also lets you specify the desired consistency level for any operation, but its real benefit is that it is a data management language quickly grasped by relational programmers, and is independent of a specific programming API.
安装Cassandra相当简单,特别是下载DataStax社区版它捆绑了一个名为OpsCenter的基于web的管理应用程序。我在我的Ubuntu Linux系统上下载并安装了Cassandra的tarball版本(apt-get版本由于某些原因拒绝安装),发现真正的工作在于配置Cassandra集群。配置。yaml文件为节点及其集群保存了大量可调参数。
例如,您可以设置将分配给节点的令牌的数量,从而控制该节点将负责的数据(相对于其他节点)的比例。(如果您的集群由异构硬件组成,这是非常有用的,因为可以配置更强大的成员来处理更重的负载。)幸运的是,对于一个小型的试用安装,您只需要配置当前节点的监听IP地址和集群种子节点的IP地址。
OpsCenter在管理主机上运行一个服务器进程,该进程与在集群节点上执行的代理进程通信。代理收集使用和性能信息并将其发送到服务器,服务器提供一个基于浏览器的用户界面来查看聚合的结果。使用OpsCenter,您可以浏览数据、检查吞吐量图、管理列族、启动集群再平衡,等等。(顺便说一句,我无法让OpsCenter在我的Linux安装中成功运行。Windows上的DataStax Community Edition安装可以工作,但只是部分工作,无法连接到代理服务。)
而文档——主要以faq、wiki和博客的形式存在于Apache Cassandra站点而行星Cassandra网站DataStax是最全面的Cassandra文档和教程来源。事实上,行星卡桑德拉的启动页面或多或少指向你DataStax页面。
DataStax维护当前版本和以前版本的文档;随着Cassandra的更新,您可以对继续运行的任何早期安装进行故障排除。Web页面有很好的超链接,并提供了大量图表。除了视频教程,您还可以找到Java和c#驱动程序的参考指南,以及Cassandra internals上的开发人员博客。
直到最近,Cassandra还没有提供事务处理功能。然而,Cassandra的最新版本(2.0版)添加了“轻量级事务”,采用了原子的“比较和设置”架构。在CQL中,这表现为插入和更新命令上的条件IF子句。如果特定条件为真,数据将被修改。您可以想象CQL INSERT语句,它只在行不存在的情况下添加新行,如果测试中存在事务,则将确保插入对于数据库是原子的。
Cassandra 2.0还通过“即时重试”提高了响应性能。If a given replica is slow to respond to a read request, Cassandra will send that request to other replicas if there's a chance the other replicas might respond prior to the request timeout. With version 2.0, Cassandra now handles the removal of stale index entries "lazily." In the past, stale entries were cleaned up immediately, which required a synchronization lock. The new technique avoids the throughput-constricting lock.
虽然Cassandra是一个复杂的系统,但它对集群节点的对称处理使得它非常容易启动和运行。CQL类似sql的特性是一个很大的好处,它使开发人员从RDBMS环境迁移到生产力更高的环境中变得更快、更容易。
然而,卡桑德拉的学习曲线意义重大。设置一个小型或中等规模的开发集群并进行大量试验是一个好主意,特别是在数据模式和配置参数方面。随着应用程序的扩展,性能问题可能变得非常重要。
《卡桑德拉降低大数据门槛》这篇文章最初发表于信息世界 。
版权©2014Raybet2