论文部分内容阅读
海量数据处理是云计算的核心技术之一。在互联网、商业和科学计算等领域,数据量已经达到TB甚至PB量级,并且数据在爆炸性地增长。分析海量数据能够给我们带来新的知识和深刻的洞察。结构化数据分析、大规模图计算和流式数据处理等各种数据密集型计算的特点截然不同,需要面向领域的编程模型才能更有效地解决。围绕如何在大规模集群上高效地处理海量数据,产业界和学术界已经研发了多种编程模型。目前的编程模型采用即席方式实现,代码难以理解和维护;系统架构不灵活,既不支持构建多种编程模型,也不支持编程模型之间的集成。因此,有必要重新思考已有编程模型的设计选择,重新定义编程模型的实现方法和系统架构。
在本文的研究中我们探索了通用的方法,致力于在统一的系统架构之上构建各种主流的编程模型。我们设计并实现了一个通用、可扩展的编程框架--Transformer(变形金刚),并在腾讯的数据中心内验证了系统的设计。具体而言,在海量数据处理编程模型领域,我们取得了如下的研究成果:
1.提出了一种构建编程模型的范式,设计并实现了四个编程模型
我们首次提出以统一的方法构建编程模型,并给出了相应的编程范式。我们将编程模型显式地划分为两层:模型相关系统和公共运行时系统,两层之间通过send和receive两个原语进行交互;模型相关系统负责计算的执行逻辑,公共运行时系统负责处理并发、网络通信、数据传输和失效检测等底层细节。该编程范式极大地简化了编程模型的构建,降低了实现的复杂度。为了充分说明编程范式的通用性,我们设计并实现了Dataflow-Transformer、MapReduce-Transformer、AllPairs-Transformer和BSP-Transformer。等四个编程模型。实验结果验证了编程范式的有效性。
2.提出了一种支持多种编程模型的系统架构
Transformer支持多种类型的计算在同一个框架内并发执行,共享同一个集群。工作原理是公共运行时系统管理作业和资源,并动态地创建相互独立的作业运行实例;每个作业运行实例与公共运行时系统之间采用“请求-分配”的模式工作,即每个作业运行实例向公共运行时系统申请资源,由后者负责分配资源。实验结果验证了系统架构的可行性。
3.提出了一种简单有效的挂起与恢复方法
我们发现许多类型的计算都具有一个“天然”的同步点,我们将这个特性与挂起/恢复结合在一起,提出了一种轻量级的挂起与恢复机制,称之为推迟挂起。工作原理是将计算划分成多个连续的串行执行阶段,如果在当前阶段内接收到挂起请求,执行完当前阶段后停止下一阶段的计算。该方法具有适用范围广、实现代价小、系统开销小和恢复速度快等优点。实验结果验证了方法的有效性。
4.提出了编程模型性能优化的度量指标
我们指出了影响编程模型性能的三个重要因素,包括数据本地性、负载均衡性和访问均衡性,并给出了三个基于统计意义的度量指标,包括数据本地化比例、负载均衡系数和访问均衡系数。我们以腾讯生产性Hadoop系统为案例评价了度量指标。