技术开发 频道

分布式并行计算平台Dryad入门

   Dryad的技术架构图如下所示:


▲Dryad技术架构

  DryadLINQ

  DryadLINQ是一种分布式计算语言,能够将LINQ编写的程序转变为能够在Dryad上运行的程序,它提供一种高级语言接口,使普通程序员可以轻易进行大规模的分布式计算,它结合了微软Dryad和LINQ两种关键技术,被用于在该平台上构建应用。DryadLINQ可以把LINQ程序转化成分布式计算指令,以便运行于PC集群的编译器。这个转化过程可以分解为三个步骤:

  1. C#和LINQ数据对象转化为分布式的文件块。

  2. LINQ查询转化为分布式Dryad任务。

  3. C#方法转化为运行于Dryad任务节点上的代码。

  DryadLINQ的具体功能如下

  1. 声明式编程:计算指令要求使用类似SQL的高级语言进行表示。

  2. 自动并行化:DryadLINQ编译器将顺序的声明式代码,转化为分布在大规模计算机集群中高度并行的查询计划。而对于单台机器中多核的使用,DryadLINQ则依赖PLINQ并行框架。

  3. Visual Studio集成:程序员在使用DryadLINQ时可以利用VS中大量的高级特性,如智能提示、代码重构、集成调试、构建以及原代码管理。

  4. .NET集成:所有的.NET类库,包括Visual Basic,以及各种动态语言都可以自由使用。

  5. 类型安全:对分布式计算进行静态检查。

  6. 自动序列化:数据传输机制会自动处理所有的.NET对象类型。

  7. 任务图的优化?静态:一系列丰富的查询优化规则,可以使查询计划有更好的局部性(locality)及更好的性能。

  8. 动态:对已经处理完的数据集进行统计,以此作为运行时的优化查询计划的依据。

  Dryad VS MapReduce

  Google设计并实现了一套大规模数据处理的编程规范Map/Reduce系统。这样,非分布式专业的程序编写人员也能够为大规模的集群编写应用程序而不用去顾虑集群的可靠性、可扩展性等问题。Map/Reduce通过“Map(映射)”和“Reduce(化简)”这样两个简单的概念来参加运算,用户只需要提供自己的Map函数以及Reduce函数就可以在集群上进行大规模的分布式数据处理。据称,Google的文本索引方法,即搜索引擎的核心部分,已经通过Map Reduce的方法进行了改写,获得了更加清晰的程序架构。

  与传统的分布式程序设计相比,MapReduce封装了并行处理、容错处理、本地化计算、负载均衡等细节,还提供了一个简单而强大的接口。通过这个接口,可以把大尺度的计算自动地并发和分布执行,从而使编程变得非常容易。还可以通过由普通PC构成的巨大集群来达到极高的性能。另外,MapReduce也具有较好的通用性,大量不同的问题都可以简单地通过MapReduce来解决。

  Dryad使用Dryad LINQ来进行编程,解决了传统分布式数据库SQL语句功能受限、类型系统受限问题,与此同时解决了MapReduce模型中的计算模型受限和没有系统级优化问题。通过Dryad LINQ,开发人员可以将对象封装、自动并行化、自动序列化合任务图的优化,结合Visual Studio 2010得到了比BigTable +MapReduce更快的联合查询的效率,在开发使用上也更易被.Net平台下的开发人员接受。

  Dryad的应用及前景

  Dryad也通过分布式计算机网络计算海量数据,运行在Microsoft HPC Pack 2008 SP1之上,需要.NET Framework 3.5 SP1。在应用Dryad上,微软内部比较广泛,如微软AdCenter中的数据分析和Trident项目-一个基于Dryad/DryadLINQ及微软其他一些技术的科研工作流平台。

  Trident项目是一个科学工作流控制台,为科学家们提供了一个灵活而强大的方式,可以对大规模的,变化纷繁的数据集进行分析。它提供了可视化工具来创建、管理和分享工作流,并且可以在Windows HPC Server 2008集群上执行这些工作流。Trident基于Dryad/DryadLINQ和WF开发,并提供了WPF和Siverlight两种版本的可视化界面。开发人员还可以扩展Trident,并与Word,SQL Server,Data Service等多种技术进行集成,使Trident的适用范围更为广泛。

  云计算的时代即将到来,对于开发者最大的影响就是,如果还像以前一样只和一台计算机和有限的存储打交道已远远不够,以前开发的软件或许只在单机上运行就可以了。但云时代的工程师应该更多的掌握分布式计算的基本原理和开发方法,有能力掌握用于分布式计算的协议或语言,开发出可以运行在几百台、几千台甚至几万台计算机上的应用程序,并用该程序管理分布在不同数据中心的海量存储设备。

  总结:

  微软推出Dryad的目的也是让开发者们能够在Windows或者.Net平台上编写大规模的并行应用程序,同时与Google在分布式并行计算领域展开竞争,也可以理解为微软、Google云计算战争下的一个局部战场。不管Dryad对MapReduce的挑战结果如何,对广大的.Net平台下的开发者来说总算是有了Windows平台下的分布式并行计算平台,从无到有、从有到完善是任何事物发展的必经阶段。就目前来说,Dryad平台的出现是微软云计算领域一个重大的技术提升,为微软提供更好的云打下一个坚实的技术基础。

0
相关文章