前言

前段时间接触到腾讯云的一个新数据库产品 CynosDB 是基于 Amazon Aurora 数据库的Paper实现的。我比较感兴趣就来看看它和之前看过的 Spanner 之类有什么不同,也许部分设计也能用在我们游戏业务的服务器中。它的主要的创新点在于重新设计了binlog和存储的部分,所以我也主要就看了两篇Paper: 《Amazon Aurora - Design Considerations for High Throughput Cloud-Native Relational Databases》 是一个整体性质的介绍和概述; 《Amazon Aurora: On Avoiding Distributed Consensus for I/Os,Commits, and Membership Changes》 是对其重点部分的存储服务的。

前言

年前被同事安利了这个分布式最终一致性的存储系统 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,可怜我的渣渣英语,所以看得比较慢。

Linq是.NET 3里新增的东西,我在软件工程课程设计里初步应用到一点,而且主要用在Lambda表达式上,今天算是在好奇心驱动下尝试了一下在数据库方面的应用。