Megastore
底层数据存储依赖BigTable,但是和传统的NoSQL不同,Megastore
实现了类似RDBMS的数据模型,同时提供数据的强一致性解决方案,并且将数据进行细颗粒度的分区,将数据更新在机房间进行同步复制。
Megastore
数据复制通过 paxos
进行同步复制的,如果更新一个数据,所有机房都会进行同步更新,因为使用paxos进行复制,所以不同机房针对同一条数据的更新复制到所有机房的更新顺序都是一致的。
同步复制保证数据的实时可见性,采用paxos算法则保证了所有机房更新的一致性,所以个人认为megastore的更新可能会比较慢,而所有读都是实时读(对于不同机房是一致的),因为部署有多个机房,并且数据总是最新。
为了达到高可用性,Megastore
实现了一个同步的,容错的,适合长距离连接的日志同步器
为了达到高可扩展性,Megastore
将数据分区成一个个小的数据库,每一个数据库都有它们自己的日志,这些日志存储在NoSQL中。
Megastore 结合了 NoSQL 的可拓展性和传统 RDBMS 的易用性,在此基础上提供了强一致性和高可用性。
他们提供了完全序列化的 ACID 语义和良好的数据分区,这种分区借助网络进行跨地域地副本同步,保证延迟在可接受的范围内且提供无缝的故障转移。
高可用: 实现了一种同步的、可容错的 log replicator 来优化长距离连接
拓展性: 提供将数据分区存储在许多小数据中心里,且每个数据中心的 replicated log 存储在一个 per-replica 的 NoSQL 数据中心中。
仅仅在数据中心里的不同节点上复制数据其实是不够的,考虑到机房故障时,因此决定在地理上进行大范围复制。
三种复制模型: 异步主从(丢数据风险和需要一致性协议保证 mastership),同步主从(不丢数据但需要外部failure探测),优化复制(一个replica group每个都能接收改变,异步传递变化给整个group,拓展性低延迟非常好,但是不可能支持事务)。
为了提高吞吐量和本地使用率,提出了Entity Groups的概念。
数据分区存储在一系列 Entity Groups 中,每个都是独立的且在大范围地域上进行同步复制。一个 Group 中的 Entities 通过一条 ACID 事务进行变更(通过 Paxos 进行日志复制)。跨 Group 的操作通过两阶段提交,Group 间的异步交流通过 Queue,外加一些本地索引和全局索引。
数据模型:分为 root table 和 child table ,每个 child table 必须声明一个具有区分意义的外键指向 root table。
每个 Entity Group 提供 ACID 语义,一个事务在对 group修改时先写日志,然后修改数据。
BigTable 时间戳特性从而实现了 MVCC,当事务中的变更提交之后,值随着时间戳写入,然后读操作带上最后一次被完全采纳的事务时间戳来避免读到历史数据,且读写操作在事务持续期间可以彼此隔离。
Megastore 提供 current、snapshot 和 inconsistent 读操作,
current 会等待所有事务日志提交完成且数据变更也完成之后读取;
snapshot 则是只从最后一次事务完全提交处读取,忽略有些日志提交了但数据尚未变更的情况;
inconsistent 则是只读最新值,忽略日志状态。
What is Megastore
Megastore combines the scalability and availability of NoSQL datastore
with ACID semantics of RDBMS in an innovative way so that it can meet
the requirement of interactive online services. Megastore provides both the
high consistency as well as high availability which can not be provided by
NoSQL or RDBMS alone.
Megastore uses Paxos replication and consensus algorithm for high
availability and with low latency.
Partitions the data to a fine granularity and ACID semantics within the
partition across wide area network with low latency.
Online interactive services requires high availability as well as high
consistency.
Asynchronous master/slave
Reference: