CockroachDB 是一个开源的数据存储项目,该项目的开发团队最近宣布发布了该项目的第一个 alpha 版本。受到 Google 的 Spanner 项目的启发,CockroachDB 旨在打造一个开源的、可伸缩的、跨地域复制且兼容 ACID 的数据库,这在当前的开源社区中还是非常少见的。
一直以来,NoSQL 数据存储都通过在多个数据中心之间进行异步复制来支持多数据中心的配置。这是在 MongoDB 中所推崇的方式,这同样也是 Riak , Cassandra 和 HBase 中唯一可用的方式。然而,异步复制阻碍了在多个数据中心之间的一致性保证。此外,大多数第一代 NoSQL 数据存储都无法支持任何跨键(key)的事务。近来,像 FoundationDB 和 HyperDex 这些新系统在一开始就被设计用来支持跨键的事务。然而,这些系统并不能很好地支持多数据中心的配置。
在这样的背景下,Google 在 2012 年公开了他们的 Spanner 系统,这是一个同时支持事务和多数据中心一致性的系统,该系统为这一领域打开了新的局面。Spanner 的论文给大家带来了启发,但是一直都没有人对其进行实现。直到 CockroachDB 团队开启了他们的开源项目,他们尝试实现并复制 Spanner 中的那些富有挑战的混合特性。
在规范的草案中,在Google 参与 Colossus 文件系统开发工作的 Spencer Kimball 对 CockroachDB 进行了描述,CockroachDB 支持 ACID 的事务语义和版本化的值,并将其作为头等特性。其主要的设计目标便是全局的一致性和生存能力,所以该数据存储也由此得名(译者注:Cockroach 是蟑螂的意思,即打不死的小强)。… Cockroach 实现了一个单一的、整体排序的 map(键值映射),并且键和值都是字节字符串。
CockroachDB 的事务特性由两种方式提供。Kimball 解释说
如果逻辑上的一次变化所影响的键全部落在同一范围(range)内,那么原子性和一致性可以由 Raft 算法来保障,这是最快的提交路径。否则,会在受影响的范围之间使用一个非阻塞的分布式提交协议。Cockroach 提供了快照隔离(snapshot isolation,简称 SI)和顺序的快照隔离(SSI)语义…SSI 是默认的隔离级别;客户端必须有意识地在正确性和性能之间做出选择。
该非阻塞分布式提交协议仍然处于发展之中,而 Kimball 则引用了悉尼大学和耶鲁大学的论文,并且特别关注来自 Yahoo! 的一篇论文,并将其作为实现 SSI 语义的潜在选择。
当前的 alpha 版本提供了一个所需功能的非常小的子集。集群的初始化和加入、gossip 网络和一个基础键值的 REST API 目前已经得到了支持。但是 raft 一致性算法、范围的分裂或事务功能目前还没有得到支持。该项目是由 Go 语言编写的,而他们目前正在寻找代码贡献者。
查看英文原文: CockroachDB: A Scalable, Geo-Replicated, Transactional Datastore
评论