<audio id="audio" title="090 | Cassandra和DataStax的故事" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/80/19/80bd1684925928c8a9fe4c0280cb6819.mp3"></audio>

Cassandra是大数据时代中非常具有影响力的一个开源项目，DataStax则是背后支持开源Cassandra并将其商业化的公司。今天我们就来聊一下Cassandra和Datatax的故事。

我们都知道，在大数据发展历史上，谷歌的“三驾马车”：谷歌文件系统、 MapReduce、 BigTable。三者都曾经扮演了非常重要的角色，Hadoop开源生态圈里也有对应的Hadoop文件系统，Hadoop MapReduce和HBase。

但是在大数据发展史上，还有一篇影响力几乎等同于谷歌“三驾马车”的论文。它讲的就是亚马逊发布的Dynamo系统。

2008年，Dynamo系统的作者之一阿维纳什·拉克希曼（Avinash Lakshman），跳槽去了Facebook。跳槽的阿维纳（Avinash）和Facebook网站的另外一个工程师普拉桑特·马利克（Prashant Malik），一起开发了Cassandra，一个Dynamo的开源山寨版。

Cassandra开发出来之后很快就被开源了。早期Facebook对于开源这件事还是非常支持的，但是它开源的Cassandra很快就受到了一次重大的打击，这个打击可以说是十分致命的。

早年的Facebook对于谷歌技术非常崇拜，但对于亚马逊的技术却缺乏信心。于是Facebook准备开发移动App“Messenger”的时候，决定使用谷歌的技术架构。更明确一点说就是，Facebook抛弃了自己开发的Cassandra，选择了当时在Hadoop系统里山寨了BigTable的HBase。

亲儿子被自己的公司抛弃，开发人员也没什么兴趣继续开发了。与被众心捧月的HBase状态比起来，Cassandra当时就是一种被众人嫌弃的状态，不过，如果故事到此为止的话，那么Cassandra估计也就不会活到今天了。

我们把时光回溯到2010年，当时在Rackspace工作的乔纳森·艾利斯（Jonathan Ellis）和马特·皮菲尔（Matt Pfeil），这两个和Cassandra无关的人，决定离开Rackspace，自己创业。

Rackspace在工业界里最为著名的是OpenStack那一套体系，做的是数据中心云计算的基础架构。算起来和Cassandra这套NoSQL的东西多少也有点关系。

他们创业的故事非常有意思，同时也跟Cassandra有着千丝万缕的联系，公开的说法是这样的。

> 
<p>乔纳森是个很牛的工程师，决定结束碌碌无为的工作状态，辞职创业去。马特代表公司去挽留这个人才，于是两个人约了去吃午餐；然而结局却颇为戏剧化，马特没有说服乔纳森继续为Rackspace工作，而杰纳森却说服了马特和他一起创业，并让他出任自己公司的CEO。<br>
公司同年成立，最初公司的名字叫Riptano。创业需要有方向，乔纳森和马特看好开源社区商业化的模式，但是他们并没有打算成为Hadoop的发行商，所以环顾四周之后他们挑中了Cassandra，并打算将它做为核心，开启他们的创业之旅。<br>
大概就是因为选取了Cassandra，公司的定位就比较明确了，也就是选择了云端数据处理的方向。于是他们觉得Riptano这个公司的名字不太适合公司的定位，就把公司名字改成了DataStax。这个故事就是DataStax的由来。</p>


自从2010年选中了Cassandra之后，DataStax就开始了全力以赴开发Cassandra的历程。在很长一段时间里，DataStax对Cassandra贡献的代码量，占据了整个代码提交量的85%以上。

可以说，正是因为DataStax的介入，才最终让Cassandra活了下来，并且在2011年成为了Apache基金会的顶级开源项目。DataStax推出的主打产品，是一个叫做DataStax Enterprise的东西。这是一个以Cassandra为核心，整合了诸多开源项目的产品。

DataStax Enterprise提供了两种模式，一种是卖软件和服务给企业，企业再装到自己的机器上去运行。另外一种是托管云服务“DataStax Managed Cloud”，这是一个运行在亚马逊云服务（AWS）上的云托管服务，用户无需购买和维护自己的机器。

从产品完整性和盈利模式来看，DataStax提供的是相对来说比较完整的一套产品体系。但是以Cassandra为核心的主要问题是，Cassandra的技术相对冷门，优点和缺点也都很明显，这导致的结果是：适用于Cassandra的应用也是有一定限制的。

DataStax的产品也因为选择了Cassandra作为核心，和其他公司的同类产品就有很明显的不一样。

具体来说，Cassandra是一个写入非常快、吞吐量很大、延时很低的系统；同时，这个系统的处理能力伴随容量的增长，也呈现出线性的增强。这些都是Cassandra的优势。尤其是做云端部署时，这个系统可以很灵活地根据工作负载来加减机器。

2012年，多伦多大学一篇论文比较研究了6个不同的NoSQL数据库的优劣，得出的结论是Cassandra是当之无愧的赢家。这篇论文被DataStax广泛引用，以此来证明这个系统比其他更为优质。

但是凡事都有两面性，Cassandra的缺点也很明显。首先是Cassandra有一个十分令人讨厌的问题：这个系统没办法保证一条记录行级别的一致性。

简单来说，如果A操作改变了行里面的一个列，B操作改变了同一行里面的另外一列，那么很有可能就得到了一条四不像的行。

这对应用程序来说是一件非常糟糕的事，虽然现实来说这种错误的概率不是特别高，但是只要不是0概率的话，很多应用程序都不可能使用这样的系统。

还有一个缺点是Cassandra普遍适用的场景非常有限，Cassandra虽然对于单行操作非常快，但是对于多行操作就会非常慢；而且不仅仅慢，很可能同时消耗的资源也会很高。

Cassandra对范围查询的能力比起HBase要差了很多。因此，通常来说Cassandra应用的场景适合只访问单行记录的，但是在单行记录的时候却不能保证行级别的一致性。这就是Cassandra适用场景的瓶颈所在。

不过，DataStax发展到了今天，它的主打产品DataStax Enterprise也是经过了多年的演进，并且在以Cassandra为核心的基础上，进行了全面的整合。

例如它通过对Spark和Solr的整合，提供了数据分析和搜索的功能。它还在自我完善中提供了对多种语言和开发平台的支持，比如说Java、Python、Ruby、 C++、Javascript等等。

此外，DataStax Enterprise还提供了给管理员用来做系统监控和操作的OpsCenter，以及给开发者提供的IDE环境 DataStax Studio。

从产品的完善程度来讲，DataStax Enterprise是非常完善的，它是一套整合了开源以及自主开发产品的系统，并提供了开发、运行、部署和监控几乎全方位的支持。这些都是这套系统的优势。

然而，DataStax的发展相对来说不温不火，在业界也只是名气平平。我想，它选择了Cassandra，既给了DataStax足够多的辨识度和区分度，也让DataStax的产品受到了各种限制。至于这样的选择到底是好是坏，对DataStax的发展是否有利，可能只有时间才能说清楚了。

不管怎么样，Cassandra仍然需要感谢DataStax的救命之恩和鼎力支持。可以说没有DataStax，就不会有今天的Cassandra。


