`
BucketLi
  • 浏览: 195974 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
博客专栏
5a76a659-f8e6-3bf3-b39a-8ae8f7a0f9d9
Percolator与分布...
浏览量:5687
社区版块
存档分类
最新评论

Percolator与分布式事务思考(一)

 
阅读更多
Percolator严格说来是google一个处理增量网页索引的系统,可以认为其内部mapreduce系统的一个增量版本,同时提供了强一致更新不同机器中索引信息的机制。论文原文可以在http://research.google.com/pubs/pub36726.html 这个链接中找到。

这篇论文我做了下翻译,这里主要tips下我比较关注的如何保证更新不同机器上数据时的ACID。

Percolator被构建出来纯粹是为了增量数据的处理,它并不打算取代现有的对多数数据处理的方案.那些不能被分解为一些小的更新的计算(比如一个文件的排序)更适合用MapReduce来处理.同时,除非计算需要强一致性,否则,BigTable就足够了.最后,那些需要某些维度跨度非常大的计算(全数据长度,CPU密集型变更,等等)或者一些不适合用MapReduce或者BigTable来计算的小规模计算用传统的DBMS解决即可.

Percolator为大规模增量数据处理提供了2个主要的抽象:为随机访问数据仓库的操作提供ACID事务和观察者,一个构建增量计算的途径。



一个Percolator系统由3个二进制包组成,他们跑在集群中的每个机器中;一个Percolator worker,一个BigTable的tablet服务器,还有一个GFS的chunkserver.所有观察者关联到percolator的worker上,观察者们通过发送读写RPC请求到Bigtable tablet服务器,然后(由tablet服务器)发送读写PRC请求到GFS chunkservers来实现事务。系统同时依赖2个小的服务:时间戳预报服务和轻量级锁服务。时间戳预报服务提供精准的递增时间戳:这是快照隔离协议正确执行的必要属性。Workers使用轻量锁服务让对脏通知的搜索(the search for notifications)更加高效.

需求直接影响了Percolator的设计,这些需求包括需要运行在大规模并且不需要异常严格的延迟的环境中。宽松的延迟需求可以让系统做诸如以下的事情,系统可以在事务运行失败的机器上延迟地清空锁。这种延迟,可以简单到让事务提交延迟几十秒。这种延迟是DBMS运行OLTP任务是所不能容忍的,但是在一个用于建立web页面索引的增量处理系统中是能够容忍的(译者:网页索引更新延迟几十秒已经算实时的范畴了,相对于传统1天或者几天通过mapreduce来全量构建索引好得多)。Percolator没有事务管理的中心节点;特别是,它缺乏一个全局的死锁检测器。这个增大了冲突事务的延迟但是却使系统能够扩展到成千上万台机器。

Percolator建立在BigTable上。BigTable提供了一个多维度并且排序的map给用户:keys是(row,column,timestamp)元组。BigTable 提供了在每一行上进行查找和更新的操作,并且BigTable行事务允许在独立的行上进行原子的read-modify-write操作。

构建在BigTable上的这个决定已经定义了Percolator整体形状。Percolator维持了BigTable接口的风格:数据被组织成了BigTable的rows和columns,并且Percolator的metadata(元数据)单独的存放在特殊columns中.Percolator的API酷似BigTable的API:Percolator library大部分由存在于Percolator计算框架内的BigTable操作组成。实现Percolator即需要提供BigTable所没有的特性:多行事务和观察者框架。




Percolator提供了跨行,跨表事务,这些事务具有ACID 快照隔离语义。Percolator用户使用一种语言(现在是C++)写事务代码并且在他们的代码中混合调用Percolator的API. 上图Figure 2 显示了一个通过一个文本内容hash得到的简单集群文档的版本。在这个例子中,如果Commit()返回false,这个事务就冲突了(在这种情况下,得到2个URL下相同内容hash后将同时被处理)并且必须在一个回退后重试。调用Get()和Commit() 被阻塞;并行处理是通过一个线程池中同时运行许多事务达成。

Percolator存储着每一个数据的多个版本,使用了BigTable的时间戳维度。多版本被用来实现快照隔离,这种机制让每一个事务从某一个时间戳的稳定数据快照中读取数据。写出现在一个不同的,更后面的时间戳中。快照隔离保护了 写-写 冲突:如果事务A和B并发执行,并且写同一个cell(译者:实际上可以理解为数据库行),那么最多有一个会commit.快照隔离不提供串行化;特别是,事务运行在一个向写倾斜的快照隔离上(写多读少)。一个串行化协议的快照隔离主要优势在于更加高效的读。因为任何时间戳代表一个一致的快照,读取一个cell只需要进行一个给定时间戳的BigTable查询即可;获取锁是不必要的。上图Figure3 演示了在快照隔离下的事务之间的关系。

因为Percolator被构建成了一个客户端代码包去访问BigTable,而不是控制对存储本身的访问(Server模式),Percolator面临着一系列与传统PRDBMSs所不同的挑战来实现分布式事务。其他并行数据库将锁集成到系统组件以管理对磁盘的访问。

相比之下,在Percolator中的任何节点能够让请求直接修改BigTable的状态;因为没有一个环节阻止这种行为或者进行锁分配。这样,Percolator必须明确的维持锁。锁必须在面对机器失效时也要持久;如果一个锁在两个阶段的commit之间丢失,那么系统可能错误地提交2个事务并且这两个事务可能是冲突的(译者:这里我理解为更新顺序出现问题,也就是两个事务的数据交叉覆盖)。锁服务需要提供高吞吐量;成千上万台机器将会同时请求锁。锁服务需要低延迟;每个Get()操作除了读取数据之外还需要读取锁。有了这些需求后,这个锁服务器需要复制(在硬件失败中存活),分布式并且是负载均衡的(处理load),并且写到持久数据存储中。BigTable本身满足所有我们提出的需求,所以Percolator把它的锁存储在BigTable的一个特别的内存columns中,这个BigTable同时存储数据,当访问一行数据时同时更新BigTable行事务锁。
  • 大小: 16.5 KB
  • 大小: 52.7 KB
分享到:
评论

相关推荐

    Percolator分布式事务

    Percolator是Google为解决大规模数据处理中的增量计算及一致性问题,所设计的一种分布式事务处理系统,它基于BigTable构建,提供了Snapshot Isolation隔离级别,以实现高并发读写性能。在此隔离级别下,事务读取的...

    HBase分布式事务与SQL实现

    在深入了解HBase分布式事务与SQL实现前,我们首先需要明确几个核心概念和组件,这些包括HBase基础架构、Google Percolator模型、TiDB分布式数据库,以及它们之间的关系。 HBase是一款分布式的、开源的NoSQL数据库,...

    google的大规模增量处理

    #### Percolator系统:分布式事务与通知机制 为了解决现有基础设施无法满足大规模数据处理需求的问题,Google设计并实现了Percolator系统。Percolator是一种用于增量处理大数据集的系统,它能够在不影响数据完整性...

    Percolator--谷歌如何实现大数据的事务.pdf

    Percolator 的设计和实现对于理解大规模分布式系统中的事务处理机制具有很高的价值。 2.1. Percolator 的业务背景 在谷歌这样的互联网巨头中,每天都会产生海量的数据,这些数据需要实时或近实时地进行处理和更新。...

    美团分布式数据库实践.pdf

    3. **分布式事务**:典型的分布式事务如两阶段提交,但在高并发环境下,Percolator模型被广泛采用,它允许在单行事务存储上实现多行事务。Blade面临的问题是Percolator的乐观锁模型在发券、秒杀等冲突严重场景下的...

    percolator-client-5.5.1-API文档-中文版.zip

    赠送jar包:percolator-client-5.5.1.jar; 赠送原API文档:percolator-client-5.5.1-javadoc.jar; 赠送源代码:percolator-client-5.5.1-sources.jar; 赠送Maven依赖信息文件:percolator-client-5.5.1.pom; ...

    分布式数据库实践字节跳动分布式数据库实践V2.pdf

    2. **ByteSQL与Percolator模式**:ByteSQL可能是字节跳动自研的SQL处理引擎,而Percolator是一种在BigTable(Google的分布式存储系统)上实现的弱一致性的分布式事务模型。Percolator模式允许在大规模分布式系统中...

    percolator-client-6.3.0-API文档-中英对照版.zip

    赠送jar包:percolator-client-6.3.0.jar; 赠送原API文档:percolator-client-6.3.0-javadoc.jar; 赠送源代码:percolator-client-6.3.0-sources.jar; 赠送Maven依赖信息文件:percolator-client-6.3.0.pom; ...

    tikv:分布式事务键值数据库,最初是为补充TiDB而创建的

    TiKV是一个开源,分布式和事务性键值数据库。 与其他传统的NoSQL系统不同,TiKV不仅提供经典的键值API,而且还提供符合ACID的事务性API。 TiKV内置在Rust中,并由Raft提供支持,最初创建时是为了补充 (与MySQL协议...

    分布式事务键值数据库,最初是为了补充 TiDB 而创建的

    网站|文档|社区聊天TiKV 是一个开源的、分布式的、事务性的键值数据库。与其他传统 NoSQL 系统不同,TiKV 不仅提供经典的键值 API,还提供符合 ACID 的事务 API。TiKV 内置 Rust 并由 Raft 提供支持,最初创建是为了...

    字节跳动分布式数据库实践.pptx

    此外,事务版本号的分配也是一项关键技术,例如Percolator和TrueTime API等方案被用来确保事务的顺序性和一致性。 在处理分布式事务时,还需要解决读写冲突和事务可见性问题。例如,Follower Reads策略允许在不需要...

    JSONAPI生成框架Percolator.zip

    Percolator 是使用 Node.js 快速且简单的创建高质量的 HTTP APIs,用最有趣的方式生成高级的 JSON APIs 的框架。它适用于生成:公共 API;单页应用;移动端应用。 标签:Percolator

    刘奇-TiDB为HBase插上分布式SQL的翅膀

    Apache HBase是一个开源的非关系型分布式数据库(NoSQL),它采用列式存储方式,模仿Google的BigTable,运行在Hadoop文件系统(HDFS)之上,同时为大数据的随机访问和实时读写提供了支持。HBase的主要特性包括线性和...

    percolator-client-6.2.3-API文档-中文版.zip

    赠送jar包:percolator-client-6.2.3.jar; 赠送原API文档:percolator-client-6.2.3-javadoc.jar; 赠送源代码:percolator-client-6.2.3-sources.jar; 赠送Maven依赖信息文件:percolator-client-6.2.3.pom; ...

    percolator-client-6.3.0-API文档-中文版.zip

    赠送jar包:percolator-client-6.3.0.jar; 赠送原API文档:percolator-client-6.3.0-javadoc.jar; 赠送源代码:percolator-client-6.3.0-sources.jar; 赠送Maven依赖信息文件:percolator-client-6.3.0.pom; ...

    percolator_scaling:协助调整Percolator大小的脚本

    percolator_scaling 以下内容提供了脚本和测试文件,用于使用公开的Best Buy数据集对Elasticsearch Percolator进行性能测试... 一个文件用于Percolator测试: 包含大约180万个条目的培训csv文件(train.csv)。 每行

    Google分布式计算论文收集

    与传统的批处理不同,Percolator可以在数据流入时立即进行处理,实现了数据的实时更新和查询。这对于实时监控、推荐系统等需要即时反馈的应用非常关键。 5. Pregel:Pregel是一种处理大规模图数据的分布式计算框架...

    percolator-client-6.2.3-API文档-中英对照版.zip

    赠送jar包:percolator-client-6.2.3.jar; 赠送原API文档:percolator-client-6.2.3-javadoc.jar; 赠送源代码:percolator-client-6.2.3-sources.jar; 赠送Maven依赖信息文件:percolator-client-6.2.3.pom; ...

Global site tag (gtag.js) - Google Analytics