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

开发 分布式
Dryad是微软分布式计算技术基础平台,使程序员可以利用数据中心的服务器集群对数据进行并行处理。DryadLINQ的目标是提供一种高级语言接口,使普通程序员可以轻易进行大规模的分布式计算,它结合了微软Dryad和LINQ两种关键技术。

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获取一个柱状图所需数据的方式(引用自微软发布的示例代码):

  1. static IQueryable<Pair> Histogram(IQueryable<string> input, int k)  
  2. {  
  3.     IQueryable<string> words = input.SelectMany(x => x.Split(' '));  
  4.     IQueryable<IGrouping<stringstring>> groups = words.GroupBy(x => x);  
  5.     IQueryable<Pair> counts = groups.Select(x => new Pair(x.Key, x.Count()));  
  6.     IQueryable<Pair> ordered = counts.OrderByDescending(x => x.count);  
  7.     IQueryable<Pair> top = ordered.Take(k);  
  8.     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的适用范围更为广泛。

 

【编辑推荐】

  1. 用RMI实现基于Java的分布式计算
  2. 分布式缓存系统memcached简介与实践
  3. .Net平台下的分布式缓存设计
  4. .NET方法演化史 从Delegate到Lambda再到LINQ
  5. 神兵利器 浅谈如何使用LINQ检索和操作数据库
责任编辑:佚名 来源: InfoQ
相关推荐

2019-10-10 09:16:34

Zookeeper架构分布式

2017-07-26 14:55:32

分布式技术架构

2024-03-01 09:53:34

2017-09-01 05:35:58

分布式计算存储

2023-10-26 18:10:43

分布式并行技术系统

2010-03-22 13:35:49

云计算

2020-10-30 07:47:42

分布式

2012-09-19 14:09:20

Hadoop开源

2013-03-26 13:43:08

Java分布式计算

2015-05-14 11:10:00

Atlas分布式MySQL中间层

2012-06-01 15:12:00

淘宝分布式计算Fourinone2.

2024-01-10 08:02:03

分布式技术令牌,

2022-01-21 14:52:12

区块链加密货币金融

2024-01-08 08:05:08

分开部署数据体系系统拆分

2021-04-15 11:04:13

云计算分布式边缘计算边缘计算

2019-10-28 10:10:01

技术研发分布式

2017-07-27 14:32:05

大数据分布式消息Kafka

2010-01-15 15:13:22

中心交换技术分布式交换技术

2024-01-09 08:00:58

2011-01-25 22:20:15

点赞
收藏

51CTO技术栈公众号