前言

年前被同事安利了这个分布式最终一致性的存储系统 Anna 。初略看了一眼Paper,似乎很是牛X。说是支持任意规模的扩展,并且性能不低于 pedis。于是抽空来看看并了解下这套系统的设计特点和这种夸张的单机性能和扩展性的来源。

主流分布式KVS的比较

系统名词扩容设计内存模型针对单个Key的一致性策略针对多个Key一致性策略
Masstree多核共享内存线性(Linearizable)
Bw-tree多核共享内存线性(Linearizable)
PALM多核共享内存线性(Linearizable)
MICA多核共享内存线性(Linearizable)
Redis单核N/A线性(Linearizable)串行化(Serializable)
COPS, Bolt-on分布式消息队列最终一致性(Eventual)因果一致性(Causal)
Bayou分布式消息队列最终一致性(Eventual), 单调读/写, Read Your Writes最终一致性(Eventual)
Dynamo分布式消息队列线性(Linearizable), 最终一致性(Eventual)
Cassandra分布式消息队列线性(Linearizable), 最终一致性(Eventual)
PNUTS分布式消息队列线性写, 单调读
CouchDB分布式消息队列最终一致性(Eventual)
Voldemort分布式消息队列线性(Linearizable), 最终一致性(Eventual)
HBase分布式消息队列线性(Linearizable)
Riak分布式消息队列最终一致性(Eventual)
DocumentDB分布式消息队列最终一致性(Eventual), Session, Bounded Staleness, 线性(Linearizable)
Memcached多核&分布式共享内存&消息队列线性(Linearizable)
MongoDB多核&分布式共享内存&消息队列线性(Linearizable)
H-Store多核&分布式消息队列线性(Linearizable)串行化(Serializable)
ScyllaDB多核&分布式消息队列线性(Linearizable), 最终一致性(Eventual)
Anna多核&分布式消息队列最终一致性(Eventual), 最终一致性(Eventual), Item Cut, Writes Follow Reads, 单调读/写, Read Your Writes, PRAMRead Committed, Read Uncommitted

一致性说明:

前言

之前看过 《大规模分布式存储系统:原理解析与架构实战》 ,这个系统设计还是挺有意思的,里面提及了Google的一整套系统都有论文,而且现在已经进化到下一代支持分布式跨行事务的关系型数据库系统了。所以一直很想抽时间看看Google的那套去中心化并且可以平行扩容的分布式系统和数据库的论文。之前一些计划中的我自己的项目的优化项都差不多完成了,这段时间就陆陆续续的看完了这三篇Paper,可怜我的渣渣英语,所以看得比较慢。