Dryad 和 DryadLINQ 是微软硅谷研究院创建的研究项目,旨在提供一个分布式计算平台,近年来这个平台已经在微软内部得以广泛使用(如微软AdCenter 中的数据分析)。在微软2009 年研究院教员峰会上,微软发布了Dryad/DryadLINQ 的学术版,以及Trident 项目(一个基于Dryad/DryadLINQ 及微软其他一些技术的科研工作流平台)的CTP 版本。
Dryad 是微软分布式并行计算基础平台,使程序员可以利用数据中心的服务器集群对数据进行并行处理。Dryad 程序员在操作数千台机器时,无需关心并行处理的细节。据 Dryad 论文描述:
Dryad 被设计为伸缩于各种规模的计算平台:从单台多核计算机、到由几台计算机组成的小型集群,直至拥有数千台计算机的数据中心。Dryad 执行引擎负责处理大型分布式、并行应用程序中会出现的各种难题:对计算机和它们的 CPU 进行调度,从通信或计算机的失败中恢复,以及数据在节点之间的传递等等。
DryadLINQ 的目标是提供一种高级语言接口,使普通程序员可以轻易进行大规模的分布式计算,它结合了微软 Dryad 和 LINQ 两种关键技术。
LINQ 的理念为“代码即数据(treat code as data)”。如上图所示,DryadLINQ 可以根据程序员给出的 LINQ 查询生成可以在 Dryad 引擎上执行的分布式运算规则,并负责任务的自动并行处理及数据传递时所需要的序列化等操作。此外,它还提供了一系列易于使用的高级特性,如强类型数据,Visual Studio 集成调试,以及丰富的任务优化规则等等。以下是使用 DryadLINQ 获取一个柱状图所需数据的方式(引用自微软发布的示例代码):
<span>static </span><span>IQueryable</span><<span>Pair</span>> Histogram(<span>IQueryable</span><<span>string</span>> input, <span>int </span>k) { <span>IQueryable</span><<span>string</span>> words = input.SelectMany(x => x.Split(<span>' '</span>)); <span>IQueryable</span><<span>IGrouping</span><<span>string</span>, <span>string</span>>> groups = words.GroupBy(x => x); <span>IQueryable</span><<span>Pair</span>> counts = groups.Select(x => <span>new </span><span>Pair</span>(x.Key, x.Count())); <span>IQueryable</span><<span>Pair</span>> ordered = counts.OrderByDescending(x => x.count); <span>IQueryable</span><<span>Pair</span>> top = ordered.Take(k); <span>return </span>top; }
谈到大规模分布式计算技术,便不得不提起著名的 Google MapReduce 。据 DryadLINQ 论文(该论文获得 OSDI 08 最佳论文奖)所述,DryadLINQ 与 MapReduce 的区别在于:
MapReduce 同样提供了能够快速进行编程的简化抽象,但是,使用这种编程模型来实现一些最常见的操作,如数据库 Join 都要使用较为有技巧(tricky)的做法。还有,我们经常需要把 MapReduce 计算嵌入一种脚本语言来实现多次归并或排序操作。每个 MapReduce 阶段(stage)都是自治的(self-contained),因此无法跨越边界进行优化。此外,缺少类型系统来连接不同的 MapReduce 阶段,迫使程序员必须显式跟踪阶段间传递的对象,这导致软件长期维护以及组件的复用变得麻烦。
因此,出现了一些构建于 MapReduce 抽象上的 DSL 为程序员隐藏了一些复杂性,如 Sawzall、Pig、以及其他一些未发表的系统,如 Facebook 的 HIVE。这些 DSL 简单地结合了声明式与命令式的编程方式,并生成类似 SQL 存储过程的模型,这样便可以对跨越 MapReduce 阶段的边界进行一些整体的自动优化。然而,这些做法也带来了一些 SQL 的缺点,如过于简单的自定义类型系统,以及有限的交互式计算能力。它们提供的优化不如 DryadLINQ 来的有效,一部分原因在于 Dryad 比 MapReduce 执行平台的灵活性要高的多。
此外,微软发布的 Trident 项目是一个科学工作流控制台,为科学家们提供了一个灵活而强大的方式,可以对大规模的,变化纷繁的数据集进行分析。它提供了可视化工具来创建、管理和分享工作流,并且可以在 Windows HPC Server 2008 集群上执行这些工作流。Trident 基于 Dryad/DryadLINQ 和 WF 开发,并提供了 WPF 和 Siverlight 两种版本的可视化界面。开发人员还可以扩展 Trident,并与 Word,SQL Server,Data Service 等多种技术进行集成,使 Trident 的适用范围更为广泛。
您可以在微软研究院的站点上下载 Dryad/DryadLINQ 学术版和 Trident 项目的 CTP 版本,并在 Microsoft Connect 提出您反馈意见。如果您想了解更多相关信息,可以访问 InfoQ 之前对于 Dryad/DryadLINQ 的报道、 Channel 9 上新录制的 Expert to Expert 访谈、以及这些项目各自主页上给出的附加资源,其中包含了视频,幻灯片等更详细的内容。
评论