BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

微软发布了分布式计算技术Dryad和DryadLINQ的学术版

| 作者 赵劼 关注 4 他的粉丝 发布于 2009年7月21日. 估计阅读时间: 6 分钟 | GMTC大前端的下一站,PWA、Web框架、Node等最新最热的大前端话题邀你一起共同探讨。

Dryad和DryadLINQ是微软硅谷研究院创建的研究项目,旨在提供一个分布式计算平台,近年来这个平台已经在微软内部得以广泛使用(如微软AdCenter中的数据分析)。在微软2009年研究院教员峰会上,微软发布了Dryad/DryadLINQ的学术版,以及Trident项目(一个基于Dryad/DryadLINQ及微软其他一些技术的科研工作流平台)的CTP版本。

Dryad是微软分布式并行计算基础平台,使程序员可以利用数据中心的服务器集群对数据进行并行处理。Dryad程序员在操作数千台机器时,无需关心并行处理的细节。据Dryad论文描述:

Dryad被设计为伸缩于各种规模的计算平台:从单台多核计算机、到由几台计算机组成的小型集群,直至拥有数千台计算机的数据中心。Dryad执行引擎负责处理大型分布式、并行应用程序中会出现的各种难题:对计算机和它们的CPU进行调度,从通信或计算机的失败中恢复,以及数据在节点之间的传递等等。

DryadLINQ的目标是提供一种高级语言接口,使普通程序员可以轻易进行大规模的分布式计算,它结合了微软Dryad和LINQ两种关键技术。

DryadLINQ

LINQ的理念为“代码即数据(treat code as data)”。如上图所示,DryadLINQ可以根据程序员给出的LINQ查询生成可以在Dryad引擎上执行的分布式运算规则,并负责任务的自动并行处理及数据传递时所需要的序列化等操作。此外,它还提供了一系列易于使用的高级特性,如强类型数据,Visual Studio集成调试,以及丰富的任务优化规则等等。以下是使用DryadLINQ获取一个柱状图所需数据的方式(引用自微软发布的示例代码):

static IQueryable<Pair> Histogram(IQueryable<string> input, int k)
{
    IQueryable<string> words = input.SelectMany(x => x.Split(' '));
    IQueryable<IGrouping<string, string>> groups = words.GroupBy(x => x);
    IQueryable<Pair> counts = groups.Select(x => new Pair(x.Key, x.Count()));
    IQueryable<Pair> ordered = counts.OrderByDescending(x => x.count);
    IQueryable<Pair> top = ordered.Take(k);
    return 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访谈、以及这些项目各自主页上给出的附加资源,其中包含了视频,幻灯片等更详细的内容。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

太多事例证明了 by Jeffrey Zhao

与google相比,微软真是低调多了。

Re: 太多事例证明了 by gu wenjin

google比微软早多少年就提出这种技术了,微软不过是跟随者,有什么好高调的。

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

2 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT