`

[Binospace] Google-MegaStore的解读

阅读更多

MegaStore是Google在BigTable之上实现了一个跨机房高可用的数据库。
它提供了类似DB的数据分布、索引的功能,实现了在EntityGroup内部以及EntityGroup之间的事务性,并且通过Paxos协议实现在DC之间多备份的一致性。

MegaStore的目标:在跨机房PB级的数据规模上,支持交互式在线服务。我们知道在Google内部的访问情况是,每天几百亿次的访问请求的应用,读写比例大概在7:1。在这样的规模上,需要达到的特性:
1)高扩展性,无论在机器扩展性还是数据规模上
2)快速的开发迭代速度,
3)低延迟
4)数据一致性
5)高可用

MegaStore的实现原理:
1)从数据库的扩展性的角度上,把大数据切分成更小粒度的数据集(EG),每个数据库保持一个独立的log,保存在BigTable当中。//这也就意味着在每个DC上有一个独立的BigTable数据库。
2)从可用性角度上讲,在跨机房之间,实现了同步、可容错的log-replicator,实现不同DC之间数据的一致性。(Synchronous Paxos)
3) 从数据库事务性的角度上,在EG内部是通过Write-Ahead-Log实现ACID,而在EG与EG之间,Megastore提供两类方式,一是二阶段提交协议,二是异步消息队列。显然,效率上讲异步消息队列更胜一筹。

MegaStore的数据模型:
1)支持基本的数据类型,以及ProtoBuf结构体
2)支持Required、Optional、Repeated语义

EG的数据被放置在BigTable连续行,处于如下的原因:
1)低延迟
2)高吞吐
3)Cache的效率
其中每一个Entity会被映射成BigTable中的一行,并且以该Row为部分Primary Key的其它表格,也会被记录在这个EG当中,这样做的一个最大的好处在于,比方Google通过Megastore提供的Gmail应用中,以userid为主键的其它信息会被快速检索出来。当然,MegaStore支持inline Indexing,会直接把索引信息存在主Row对应的Column当中,尽快加速存储。

MegaStore的Schema与具体存储之间的映射关系:
以下是Schema定义格式:
megastore-schema
Schema定义的要求:
1)支持两种类型的表格:Entity Group Root Table以及Child Tables,其中Child Tables必须reference到Root Table
2)支持Local Indexing、Global Indexing、Inline Indexing,需要注意的是LocalIndexing存储在EntityGroup内部,遵循单阶段ACID语义的一致性,而GlobalIndexing仅仅支持最终一致性,换句话说,通过GlobalIndexing查询到的数据可能不是最新的。针对Inline Indexing它属于Local Index的一种,因为这种Table的Row由两部分组成,一部分是Root Table的Primary Key,另外一部分是Indexing的Property,因此,IndexingTable的做法就是不在BigTable当中写入新的一行,在原有的RootTable中增加新的列,列名采用新表的表名+property。
3)每一个EG对应一个WAL,这样多WAL的情况,要比单WAL的情况要好很多,使得异常局部化,保证整个系统吞吐的稳定性。

注意:MegaStore的Table只是逻辑上的概念,比方说BigTable的Column Name是MegaStore Table Name和Property的组合,例如,创建的INLINE INDEX,在存储上和Parent Table放置在BigTable的同一行中。
megastore-inline-index
同时,在Root Table的BigTable单行中,还存储了transaction,replication元数据以及Transaction Log。下图是整个MegaTable Table在BigTable之上的布局图。

megastore-table-overview

OperationAccess
Entity Group内的读写操作,借助BigTable MVCC(Multi-Version Concurrent Control多版本并发控制)。例如在Hbase当中,采用了MemStoreTS控制读写数据数据的时间版本的可见性,保证读到的数据是被Commited之后的数据,保证不会读到处于uncommited的写数据。与Hbase类似,MegaStore也会有一个WAL来记录写数据的edit log,不同的是,每个EG都对应一个WAL,甚至说在每个RootTable内对应Column分别记录WAL和元数据。

read_write_op_EG
Write操作:
1)获取当前log中的可用位置。current read保证之前的commit的事务全部被applied到data。
2)数据的更新操作组合成一次commit事件,然后获得最大的时间戳,append到WAL log中。
3)在Append到WAL log之后,该事件就处于Commited状态了,写操作就可以返回客户端了。后续就是异步地实现数据的更新。

transactionForEG_write

串行化的Transaction,可以从上图的此刻的状态,如果假定此时发生了一次故障,那么
1)Transaction1是安全的,数据已经被完全提交到Data;
2)Transaction2已经提交成功,此时只需恢复从WAL到Data即可,该状态没有数据丢失。
3)Transaction3 失败,此时返回客户端提交请求失败。

Read操作:
支持三种方式的读操作:
1)Current Read: 从WAL中获取最新Committed的版本,事务系统会确保所有的Committed状态的数据都已经写入数据区,因此,该读操作方式应用在一致性要求较高的场合。
2) Snapshot Read:获取最新的、且已经被完全写入的事务的版本的数据。
3) In-Consistent Read:可以读取还没有被完全Applied状态的数据。

一个事务完整的生命周期:
1)从元数据中获取最新的版本(Committed)的数据
2)应用逻辑:Read+Modify+write
3)聚集多个Mutation到一个Log Entry(Transactions编号),分配一个最新higher的TimeStamp,然后Paxos-Replicator会负责把这部分WAL同步到其它DC,完成之后返回给客户端即可。

4)Write Mutations更新Data和Index表
5)清理不需要的WAL
ps:4)5)两步属于异步操作。

MegaStore架构图:
megastore-arch

1)MegaStore的部署包括两部分内容:客户端库、以及附属Server。

2)每一个AppServer指定一个Replica为本地的,会把Transaction直接写入本地的BigTable,然后通过Paxos算法,同步给其它的Replication Server,由其写入BigTable。

3)Client、network、以及BigTable的错误,可能会导致写操作处于中间状态。ReplicationServer会周期性检查处于中间状态的写操作,重新提交该请求。

4)Coord使用Paxos语义在跨DC之间,实现Transaction的Log提交顺序的一致性。不同的DC的ReplicationServer在并发接收EG的commit时,需要通过Coord保证全局的WAL提交顺序的一致性。

思考:
1)Google-MegaStore的架构图,Coord的作用是帮助AppServer了解整个环境中的状态,提供相关的元数据,比如,另外Replica下的一个Server之类的。
2)有些Replica不保存Data,可以理解为它只负责备份使用,待需要时做数据还原。

3) Google的这个模型,个人感觉是以应用为中心的,不是以服务为中心的架构。例如,MegaStore服务的GMail应用,会以这个应用构建一套ReplicationServer、Coord,以及对应BigTable,而不是通过这个架构对外提供统一的服务。

参考文献:

[1]ppt: http://www.slideshare.net/schubertzhang/learning-from-google-megastore-part1-12149098

[2]paper: http://research.google.com/pubs/pub36971.html

本系列文章属于Binos_ICTBinospace个人技术博客原创,原文链接为http://www.binospace.com/index.php/google-megastore-interpretation/,未经允许,不得转载。

文章的脚注信息由WordPress的wp-posturl插件自动生成

 

分享到:
评论

相关推荐

    google megastore 报告与揭秘

    google megastore ,在google bigtable上的最新技术报告;希望对大家有用

    Google Megastore分布式存储技术全揭秘.doc

    Google Megastore分布式存储技术全揭秘

    Altera IP MegaStore

    Altera IP MegaStore,Altera内核扩展库,用Quartus II 7.2 版本

    MEGASTORE V1.0 商城门户多品类外贸独立站商城模板.zip

    MEGASTORE V1.0 商城门户多品类外贸独立站商城模板

    Megastore: Providing Scalable, Highly Available Storage for Interactive Services

    Megastore: Providing Scalable, Highly Available Storage for Interactive Services Jason Baker, Chris Bond, James C. Corbett, JJ Furman, Andrey Khorlin, James Larson, Jean-Michel L ´eon, Yawei Li, ...

    MegaStore:具有数据库交互的 Android 应用程序

    超级商店 具有数据库交互的 Android 应用程序

    Google论文集合

    Google F1 Tenzing Spanner Megastore MapReduce Fusion Tables Maestro Dremel Bigtable DRAM Errors Distributed Storage Systems

    GOOGLE 云计算

    GOOGLE云计算存储介绍,Megastore分布式存储技术,可以了解下。

    html+css+bootstrap实现生活用品购物电商MegaStore.zip

    【技术分析】 ... CSS,可以帮助把网页外观做得更加美观; JavaScript,是一种轻量级的解释型编程语言; ... Bootstrap 是快速开发 Web 应用程序的前端工具包。...AJAX,创建交互式网页应用的网页开发技术。...

    GoogleMegastore分布式存储技术全揭秘

    Megastore是谷歌一个内部的存储系统,它的底层数据存储依赖Bigtable,也就是基于NoSql实现的,但是和传统的NoSql不同的是,它实现了类似RDBMS的数据模型(便捷性),同时提供数据的强一致性解决方案(同一个datacenter...

    淘宝-分布式海量数据库的探索Wasp

    淘宝核心团队开发的海量数据库系统WASP,中文名称“黄蜂”。适应淘宝自有业务系统的特点,汲取了Hbase与google megastore的优点,实现了大规模数据的集群式高效管理。

    google云计算原理与应用

    google云计算服务包括:google文件系统GFS,分布式计算编程模形MapReduce,分布式锁服务Chubby,分布式结构化数据表Bigtable,分布式存储系统Megastore以及分布式监控系统Dapper等。GFS提供了海量数据的存储和访问...

    这就是搜索引擎

    Google 的Megastore 云存储系统和BigTable 是什么关系? • 亚马逊公司的时namo 系统是什么? 3. 从事搜索引擎优化的网络营销人员及中小网站站长 • 搜索引擎的反作弊策略是怎样的?如何进行优化避免被认为是作弊? ...

    云计算(第二版全)

    《云计算(第二版)》主要内容包括:Google的GFS、MapReduce、Bigtable、Chubby、Megastore、Dapper和App Engine等;Amazon的Dynamo、EC2、S3、SQS、SimpleDB和CloudFront等;微软的Windows Azure、SQL Azure、App ...

    wasp:大型商店系统

    Google内部的MegaStore系统是Bigtable的补充,它在Bigtable的上层支持SQL,事务,索引,跨集群复制,并成为了著名的应用程序存储引擎,例如Gmail,APPEngine和Android Market。 因此,我们决定通过理论模型...

    Design and Architecture of CockroachDb

    A Megastore-like message queue mechanism is also provided to 1) efficiently sideline updates which can tolerate asynchronous execution and 2) provide an integrated message queuing system for ...

    云计算 第二版

    本书主要内容包括:Google的GFS、MapReduce、Bigtable、Chubby、Megastore、Dapper和AppEngine等;Amazon的Dynamo、EC2、S3、SQS、SimpleDB和CloudFront等;微软的WindowsAzure、SQL Azure、AppFabric等;VMware的...

    云计算第二版

    第2章 Google云计算原理与应用 17 2.1 Google文件系统GFS 17 2.1.1 系统架构 18 2.1.2 容错机制 20 2.1.3 系统管理技术 20 2.2 分布式数据处理MapReduce 21 2.2.1 产生背景 21 2.2.2 编程模型 22 2.2.3 实现机制 22 ...

    这就是搜索引擎:核心技术详解

    搜索引擎作为互联网发展中至关重要的一种应用,已经成为互联网各个...另外,《这就是搜索引擎:核心技术详解》也密切关注搜索引擎发展的前沿技术:Google的咖啡因系统及Megastore等云计算新技术、百度的暗网抓取技...

    从GoogleSpanner漫谈分布式存储与数据库技术

    Spanner的设计反映了Google多年来在分布式存储系统领域上经验的积累和沉淀,它采用了Megastore的数据模型,Chubby的数据复制和一致性算法,而在数据的可扩展性上使用了BigTable中的技术。新颖之处在于,它使用高精度...

Global site tag (gtag.js) - Google Analytics