开学:思绪乱飞
论文阅读笔记:Google的图计算模型Pregel
来自http://www.royans.net/arch/pregel-googles-other-data-processing-infrastructure/说明google有20%的计算由Pregel完成:
“ Inside Google, MapReduce is used for 80% of all the data processing needs. That includes indexing web content, running the clustering engine for Google News, generating reports for popular queries (Google Trends), processing satellite imagery , language model processing for statistical machine translation and even mundane tasks like data backup and restore.
The other 20% is handled by a lesser known infrastructure called “Pregel” which is optimized to mine relationships from “graphs”.”
google在SIGMOD2010上就Pregel发表了一片论文,以下是阅读笔记:
Pregel: A System for Large-Scale Graph Processing
by Grzegorz Malewicz, Matthew H. Austern, etc. from Google Inc.
摘要:Pregel是一种面向图算法的分布式编程框架,采用迭代的计算模型:在每一轮,每个顶点处理上一轮收到的消息,并发出消息给其它顶点,并更新自身状态和拓扑结构(出、入边)等。
Computational Model: Programs re expressed as a sequence of iterations, in each of witch a vertex can receive messages sent in the previous iteration, send messages to other vertices, and modify its own state and that of its outgoing edges or mutate graph topology.
大规模的图问题面临的挑战:
1、构建分布式框架:每次引入新算法或数据结构都需要花很大的精力;
2、依赖分布式平台入MapReduce等,存在易用性和性能等问题,不适用于图算法(图算法更适合消息传递模型);
3、单机:无法适应问题规模的扩大;
4、现存的并行图模型系统:没有考虑到大规模系统比较重要的问题如容错性等。
Pregel计算模型:
- 基于BSP模型(Valiant’s Bulk Synchronous Parallel model——Leslie G. Valiant, A Bridging Model for Parallel Computing. Comm. ACM 33(8), 1990, 103-111);
- 所有节点构成有向图;
- 消息传递模型;
- Pregel计算包含一连串的Supersteps,在每个Superstep,框架对所有的顶点调用一个用户定义的函数。该函数读取当前节点V在上一个superstep中接收到的消息,向其它顶点(可以是任何节点,数目可变)发送消息(用于下一个superstep),更改V的状态和出边。
- 并行:每个顶点独立地进行本地操作,所有的消息都是从第S步发送到第S+1步。
Pregel框架的实现:
- 由集群管理系统进行作业调度:完成资源分配、作业重启和转移等;
- 用GFS或BigTable进行持久存储;
- (Master-slave结构)有一个节点(机器)扮演master角色,其它节点通过name service定位该顶点并在第一次时进行注册;
- master负责对顶点集合进行切分到各节点(也可以用户自己指定,考虑load balance等因素),根据顶ID哈希分配顶点到机器(一个机器可以有多个节点,通过name service进行逻辑区分);
- 节点间异步传输消息;
- 通过checkpoint机制实行容错(更高级的容错通过confined recovery实现:log),节点向master汇报心跳(ping)维持状态。
具体实现细节:
- 顶点类Vertex包含vertices、edges、messges三种相关数据,采用protocol buffer实现易变类型;

- 用户通过重写Compute()函数(C++中的虚函数)定义每个superstep中顶点进行的操作;GetValue()和MutableValue()函数分别得到和修改顶点关联值;
- Message Passing:发送消息时根据目标顶点是否在本地使用不同的方式;master用barrier机制实现;
- Combiners:(某些应用)将收到的消息进行合并,默认不启动;
- Aggregators:(如min、max、sum)每个superstep钟每个顶点提供一个值给aggregator使用,系统通过reduce操作得到一个全局值,该值可被下一个superstep中的所有顶点使用;
- Topology Mutations:在算法执行过程中可以改变拓扑结构,使用lazy机制;
- Input and Output:Pregel提供常见格式文件的读写,通过继承Reader和Wirter类实现特别的需求。
应用实例:
PageRank、
SSSP(单原点最短路)、
Bipartite Matching(二分匹配:随机算法)、
Semi-Clustering(比如求社会化网络中的交往圈)。
Future work:
- 目前所有的计算状态均保存在RAM,下一步将保存部分数据至磁盘(解决更大规模数据情况下内存不够的问题);
- 顶点分配:减小节点间的通信,向动态分配机制转变;(个人点评:集群管理器的实现决定顶点划分(调度)、作业恢复(容错)等机制,对于整个模型非常重要。)
- 目前面向稀疏图,稠密图(或通信特别多)的图算法仍旧无法解决。
Notes of Jeffrey Dean’s Lecture on SoCC’2010
Jeffrey Dean在SoCC 2010作了一个关于大规模分布式系统设计模式的演讲,演讲题目是“Evolution and Future Directions of Large-Scale Storage and Computation Systems at Google”(翻译为“google大规模存储和计算系统的演变和未来方向“)
其中对云计算未来面临的一些挑战进行了说明,对google目前和接下来的分布式系统架构进行了展示,并对大规模系统设计的一些经验进行了重点介绍。
——一点笔记——
未来面临的挑战:
- 计算环境/客户端:
1、用户希望在不同设备上都能使用自己的数据;
2、即使离线(断网),设备也能提供部分功能;(网络连接的不稳定性)
3、(富客户端)转移部分计算到客户端;
4、(多样化的服务)计算能力更加强大(超过客户端能力);
- (硬件特性)一个典型的新集群的机器硬件特性:
——以上数据说明硬件的不可靠性(reliability/availability),这必须从软件层面解决。
google集群软件现状(系统架构)
- google集群的软件环境:由文件系统(GFS或Colossus)加集群调度系统 构建核心服务;
- 通常每个作业使用的节点数以千(k)计算;
- 系统主要组成为:
- GFS(下一代文件系统:Colossus)
- Cluster scheduling system
- MapReduce
- BigTable(下一代表格系统:Spanner)
.
- 下一代BigTable——Sppaner的一些特性:
- 跨多个数据中心的存储计算系统(规模:百万到上亿的机器、上百p的存储量,上百个数据中心);
- 单个全局的namespace(用目录代替row、更好的副本和权限管理……);
- 数据中心间的强、弱一致性;
- 相比BigTable更多的自动化操作;
- 跟好地满足用户定义的上层要求:数据的获取时间限制;备份数目和分布等等。
.
一些系统构建经验和分布式系统设计模式
关于分布式系统设计模式,某人做了笔记进行了归纳:《SYSTEM DESIGN PATTERNS》(ikewu对该文进行了翻译:《来自Jeffrey Dean的分布式系统设计模式》)
——相关资源——
SoCC上的讲演视频地址:
http://hosted.mediasite.com/mediasite/Viewer/?peid=1330ca0a008f4394917c2b7eb3163f1b1d
我将其中的演示文稿截图保存在slideshare上了:
.
Jeffrey Dean在ladis2009上做过一篇类似的讲演:”Large-Scale Distributed Systems at Google: Current Systems and Future Directions”(演示文稿与这次80%左右相同,地址:http://www.cs.cornell.edu/projects/ladis2009/talks/dean-keynote-ladis2009.pdf)


