`

Yahoo!的分布式数据平台PNUTS简介及感悟

 
阅读更多

 

原文 http://timyang.net/architecture/yahoo-pnuts/

Yahoo!的分布式数据平台PNUTS简介及感悟

在分布式领域有个CAP理论(Brewer’s CAP Theorem) ,是说Consistency(一致性), Availability(可用性), Partition tolerance(分布) 三部分在系统实现只可同时满足二点,没法三者兼顾。所以架构设计师不要把精力浪费在如何设计能满足三者的完美分布式系统,而是应该进行取舍,选取最适合应用需求的其中之二。比如MySQL 5.1 cluster设计前显然不知道有CAP理论这样的经验, 所以MySQL cluster表面看来尽管可提供所有分布式特性,但实际大部分场合都无法提供稳定可靠的服务。

Yahoo!的PNUTS是一个分布式的数据存储平台,它是Yahoo!云计算平台重要的一部分。它的上层产品通常也称为Sherpa。按照官方的描述,”PNUTS, a massively parallel and geographically distributed database system for Yahoo!’s web applications.” PNUTS显然就深谙CAP之道,考虑到大部分web应用对一致性并不要求非常严格,在设计上放弃了对强一致性的追求。代替的是追求更高的availability,容错,更快速的响应调用请求等。

1. PNUTS简介及特点

  • 地理分布式,分布在全球多个数据中心。由于大部分Web应用都对响应时间要求高,因此最好服务器部署在离用户最近的本地机房。
  • 可扩展,记录数可支持从几万条到几亿条。数据容量增加不会影响性能。
  • schema-free,即非固定表结构。实际使用key/value存储的,一条记录的多个字段实际是用json方式合并存在value中。因此delete和update必须指定primary key。但也支持批量查询。
  • 高可用性及容错。从单个存储节点到整个数据中心不可用都不会影响前端Web访问。
  • 适合存相对小型的记录,不适合存储大文件,流媒体等。
  • 弱一致性保证。

传统的数据库提供强一致性保证, 通常称为“serialization transaction”,保证调用时序的一致性。但在web应用中不是必须,比如用户A修改了自己的资料或上传了图片,他的好友B短时间不能立即看到并不是大的问题,通常的Web应用都可以接受。PNUTS像大部分分布式key/value系统类似,提供的是弱一致性的支持,也就是支持“最终一致性(eventually consistent)”。用户B最终会看到用户A的修改信息。

未够!但最终一致性并非可以适应所有场合,比如用户A修改了相册的访问权限,设置用户C不能访问,然后用户A又上传了新的图片,如果用户C处于另外一个IDC访问,如果图片数据先同步成功,而权限记录后同步的话,C实际上违反了A设置的权限而看到图片了。因此对于部分场合最终一致性是不够的。

2. PNUTS实现

2.1 Record-level mastering 记录级别主节点

每一条记录都有一个主记录。比如一个印度的用户保存的记录master在印度机房,通常修改都会调用印度。其他地方如美国用户看这个用户的资料调用的是美国数据中心的资料,有可能取到的是旧版的数据。非master机房也可对记录进行修改,但需要master来统一管理。每行数据都有自己的版本控制,如下图所示。

pnuts-4

2.2 PNUTS的结构

pnuts-1
每个数据中心的PNUTS结构由四部分构成
Storage Units (SU) 存储单元
物理的存储服务器,每个存储服务器上面含有多个tablets,tablets是PNUTS上的基本存储单元。一个tablets是一个yahoo内部格式的hash table的文件(hash table)或是一个MySQL innodb表(ordered table)。一个Tablet通常为几百M。一个SU上通常会存在几百个tablets。
Routers
每个tablets在哪个SU上是通过查询router获得。一个数据中心内router通常可由两台双机备份的单元提供。
Tablet Controller
router的位置只是个内存快照,实际的位置由Tablet Controller单元决定。
Message Broker
与远程数据的同步是由YMB提供,它是一个pub/sub的异步消息订阅系统。

2.3 Tablets寻址与切分

存储分hash和ordered data store。
pnuts-31
以hash为例介绍,先对所有的tablets按hash值分片,比如1-10,000属于tablets 1, 10,000到20,000属于tablets 2,依此类推分配完所有的hash范围。一个大型的IDC通常会存在100万以下的tablets, 1,000台左右的SU。tablets属于哪个SU由routers全部加载到内存里面,因此router访问速度极快,通常不会成为瓶颈。按照官方的说法,系统的瓶颈只存在磁盘文件hash file访问上。
当某个SU访问量过大,则可将SU中部分tablets移到相对空闲的SU,并修改tablet controller的偏移记录。router定位tablet失效之后会自动通过tablet controller重新加载到内存。所以切分也相对容易实现。
Tim也曾经用MySQL实现过类似大规模存储的系统,当时的做法是把每条记录的key属于哪个SU的信息保存到一个字典里面,好处是切分可以获得更大的灵活性,可以动态增加新的tablets,而不需要切分旧的tablets。但缺点就是字典没法像router这样,可以高效的全部加载到内存中。所以比较而言,在实际的应用中,按段分片会更简单,且已经足够使用。

2.4 API访问

支持多种级别的数据访问API:
  • Read-any 读取的版本有可能是旧的,返回本地IDC的数据,不检查最新版本,性能最好。
  • Read-critical(required_version) 读取指定版本,用户修改资料之后调用返回比当前版本更新的版本,以保证当前用户看到的不是修改前的记录。
  • Read-latest 强制读取最新,可能需要执行远程IDC调用。比如上面例子介绍的读取权限列表的调用。
  • Write 比如更新用户资料
  • Test-and-set-write(required version) 只有当记录属于指定的版本才执行write,比如更新用户积分等业务,这个调用有点类似以前介绍的atom操作

Write调用示意图pnuts-3

3. PNUTS疑问

记录级别master的问题,比如master选取如何达到效率最佳,如何面对2个修改合并冲突?合并冲突据说是需要client自行来处理,

这篇Details on Yahoo’s distributed database提到的平均调用latency 100ms的问题。web应用通常对每次数据的访问最好在10ms之内完成,因为每个web页面实际上不止一个数据访问的调用,经常调用10次以上db的访问的页面并不少见,因此如果平均latency在100ms以上那势必影响页面加载速度。不过yahoo!的开发人员回复paper中的数据实际是一个老版本的测试,目前的版本,在实际生产环境的pnuts的latency会在10ms以下。

另外PNUTS为什么要用消息系统代替replication/undo log?有何优点?

4. PNUTS感悟

Web应用使用通用的存储服务是大势所趋,类似BigTable, Amazon Dynamo/SimpleDB这样的方案,但是目前除非使用Amazon提供的商用SimpleDB之外几乎没有通用的解决方案,每个公司甚至每个项目需要面对及考虑数据规模增大的问题。比如初步统计下国内研究可扩展数据存储及访问的项目就有

  • 手机之家的数据访问层封装DAL 2.0
  • 盛大陈思儒写的开源项目Amoeba,类似MySQL proxy
  • 国内的Erlang geek @litaocheng 曾经对Dynamo paper深有研究,正在开发开源的erlang Dynamo实现e2dynoma
  • 豆瓣的doubanDB,也是类Dynamo实现

当然上面几个只是冰山一角,大部分互联网公司都有自己的数据层分布及访问实现,只不过没有对外公开而已。架构师、DBA、程序员具备这方面的实践经验及技能当然是好事,但是如果业界能够有通用稳定的解决方案来解决大家的重复工作则对整个业界更佳。PNUTS虽然声称会开源,但是一直没有进一步消息。而且即使开源是是开放核心代码还是全部可用于部署的程序(比如YMB等)这也是一个问题。

当然,我不是第一个也不是最后一个考虑这个问题的,比如2006年Greg Linden就说I want a big, virtual database

What I want is a robust, high performance virtual relational database that runs transparently over a cluster, nodes dropping in an out of service at will, read-write replication and data migration all done automatically.

I want to be able to install a database on a server cloud and use it like it was all running on one machine.

参考资料

分享到:
评论

相关推荐

    Yahoo!PNUTS技术论文

    PNUTS作为一款大规模并行且地理分布式的数据库系统,为Yahoo!的Web应用程序提供了强有力的支持。该系统旨在解决Web应用面临的前所未有的数据管理挑战,包括但不限于会话状态管理、内容元数据管理以及用户生成内容...

    一种大规模RDF语义数据的分布式存储方案.pdf

    例如,BigTable模型、PNUTS模型以及HBase等分布式存储平台,虽然被用于存储大量的数据,但它们对于RDF语义数据的分布式存储研究还不够深入。 在分布式存储方案的设计与实现过程中,需要关注的关键技术包括数据的...

    基于本地封闭式世界假设的分布式系统事务模型.pdf

    此外,文中还提到了PNUTS系统,这是一个由雅虎开发的分布式数据库系统,旨在处理大规模数据存储和检索的需求。PNUTS系统的设计和实现代表了分布式数据库系统在实践中的应用,它强调了如何在保证数据分布存储的同时,...

    云基准数据管理的理解与实践

    **:PNUTS是一款面向大规模数据处理的分布式存储系统。 #### 三、实践 **测试环境设置** 为了评估不同云数据管理系统的性能,研究人员搭建了一个测试平台,其中包括多台服务器和网络设备。具体配置如下: - **...

    kaiju:Kaiju 是一个 CP 键值存储,深受 PNUTS 和 Cassandra 的启发

    这个系统的设计理念深受PNUTS(Yahoo!的分布式数据存储系统)和Cassandra(Facebook开发的分布式NoSQL数据库)的影响。Kaiju旨在提供高度可扩展性和高可用性,同时确保数据一致性,使其在CP(Consistency和Partition...

    NoSQL数据库学习教程.pdf

    Yahoo 之 PNUTS是指使用Yahoo之PNUTS来实现分布式数据库。 特点是指使用PNUTS的特点和优势。 PNUTS 实现是指使用PNUTS的实现方式。 Record-level mastering 记录级别主节点是指使用PNUTS的记录级别主节点。 ...

    yahoo的ycsb测试工具论文

    PNUTS: Yahoo内部开发的数据服务系统。 - 分布式MySQL: 采用简单分片策略的MySQL实现。 - **测试内容**: 包括但不限于读写性能、延迟、吞吐量等方面的测试。 - **实验结果**: 文档详细报告了这四个系统的测试结果...

    一切为了分布式——2009年Web后端技术回顾.pdf

    分布式系统在2009年经历了显著的发展,特别是在Web后端技术方面。这一时期的关键话题是NoSQL运动,它倡导使用非关系型数据库存储数据,尤其是以键值对(key-value)的方式。NoSQL的兴起源于对高并发、灵活表结构变更...

    大数据数据存储技术.pdf

    集中式数据存储系统,如Google的Bigtable和Yahoo的PNUTS,需要一个主控节点来管理从节点的元信息,能够处理大规模数据,但依赖于中心节点可能带来单点故障的风险。非集中式数据存储系统,如Amazon的Dynamo和Facebook...

    云存储调研报告分析(现状、标准、平台、架构)

    6. **国外云存储平台**:报告详细介绍了Google的GFS和HDFS(Hadoop分布式文件系统)、基于P2P的存储系统、Microsoft的Azure、Yahoo!的PNUTS、IBM、惠普和EMC等公司的云存储解决方案,它们各具特色,反映了不同企业的...

    NoSQL数据库详细介绍入门经典

    - **Yahoo之PNUTS**:一种轻量级的分布式键值存储系统。 - **文档存储** - **CouchDB**:一款面向文档的NoSQL数据库。 - **MongoDB**:流行的开源文档数据库。 - **Riak**:一个高度可用且分布式的数据存储解决...

    NOSql数据库笔记

    - **PNUTS**:Yahoo的分布式数据存储系统,支持大规模在线事务处理。 - **CouchDB**:JSON文档存储数据库,支持分布式和版本控制。 - **MongoDB**:流行的文档型数据库,适合处理半结构化数据。 - **SimpleDB**...

    RockwellAutomation FTProductionCentre9.2 API 文档

    罗克韦尔MES平台使用Pnuts作为开发脚本, 此文档是随软件包发布的最新版API文档.

    NoSQL数据库笔谈

    - **BigTable**、**PNUTS**、**SQL 数据服务**:大型互联网公司的分布式数据库解决方案。 - **CouchDB**、**Riak**、**MongoDB**等:文档存储型NoSQL数据库,支持JSON格式存储。 - **SimpleDB**、**Redis**、**...

    CAP与云数据管理

    本文所讨论的观点源自于我在Yahoo的PNUTS(灵活通用表存储平台——PlatformforNimbleUniversalTableStorage)数据服务平台的经验,该平台从2008年开始投入使用1。截止2011年,在PNUTS上已托管了超过100个应用以支持...

    NoSQL学习之路

    PNUTS 是一种基于分布式系统的 NoSQL 数据库,它可以存储大量的数据,并提供高性能的查询功能。PNUTS 的主要特点是,使用了基于记录的存储结构,以提高查询性能。 BigTable 是一种基于分布式系统的 NoSQL 数据库,...

    NoSQL数据库笔谈.pdf

    在软件篇中,提到了一系列流行的NoSQL数据库,如Memcached、dbcached、Hbase、Cassandra、BigTable、PNUTS等,分析了它们的特点、数据模型和使用场景。例如,Cassandra的Keyspace和Column Family(CF)设计,提供了...

Global site tag (gtag.js) - Google Analytics