技术开发 频道

浅析云计算分布式并行计算:平台应用

    【IT168 专稿】随着近几年云计算技术的飞跃发展,“云”有可能完全改变用户现有的以桌面为核心的使用习惯,而转移到以Web为核心来使用Web上的存储与服务。相信不久的将来,超级计算能力将推向了大众云计算,就如天空中的朵朵白云一样无所不在,同时又让人无法察觉,为人们的生活提供着无限便利。人类有可能因此迎来一个新的信息化时代!

  系列文章:

  浅析云计算分布式运算:编程模型

  浅析云计算分布式运算:系统架构

  浅析云计算分布式运算:算法应用

  要使云计算真正的“落地”主要面临两个重要问题:如何构建与应用程序来紧密结合的大规模底层基础设施?如何通过构建新型的云计算应用程序,能够在网络上提供更加丰富的用户体验?

  Dryad便是实现构建微软云计算基础设施重要核心技术之一。通过使用DryadLINQ编程,使普通的程序员编写大型数据并行程序能够轻易的运行在大型计算机集群里。DryadLINQ开发的程序是一组顺序的LINQ代码,它们可以针对数据集做任何无副作用的操作,编译器会自动将其中数据并行的部分翻译成并行执行的计划,并交由底层的Dryad平台完成计算,从而生成每个节点要执行的代码和静态数据,并为所需要传输的数据类型生成序列化代码。

  DryadLINQ使用和LINQ相同的编程模型,并扩展了少量操作符和数据类型以适用于数据并行的分布式计算。并从两方面扩展了以前的计算模型(SQL、MapReduce、Dryad等):它是基于.NET强类型对象的、表达力更强的数据模型和支持通用的命令式和声明式编程(混合编程),从而延续了LINQ代码即数据(treat code as data)的特性。

浅析云计算分布式并行计算:平台应用
▲图7 DryadLINQ系统架构

  如图7所示,LINQ本身是.NET引入的一组编程结构,它用于像操作数据库中的表一样来操作内存中的数据集合。DryadLINQ提供的是一种通用的开发/运行支持,而不包含任何与实际业务、算法相关的逻辑,Dryad和DryadLINQ都提供有API。DryadLINQ使用动态的代码生成器,将DryadLINQ表达式编译成.NET字节码。这些编译后的字节码会根据调度执行的需要,被传输到执行它的机器上去。字节码中包含两类代码:完成某个子表达式计算的代码和完成输入输出序列化的代码。

  DryadLINQ表达式代码示例片段如下:

Collection<T> collection;
bool IsLegal(Key k);    
string Hash(Key);
var results
= from c in collection
      where IsLegal(c.key)
      
select new { Hash(c.key), c.value};

  这种表达式并不会被立刻计算,而是等到需要其结果的时候才进行计算。DryadLINQ设计的核心是在分布式执行层采用了一种完全函数式的、声明式的表述,用于表达数据并行计算中的计算。这种设计使得我们可以对计算进行复杂的重写和优化,类似于传统的并行数据库。从而解决了传统分布式数据库SQL语句功能受限与类型系统受限问题,以及MapReduce模型中的计算模型受限和没有系统级的自动优化等问题。

  另外,在MapReduce编程方式下,应用程序编写人员需要关注与自己的应用逻辑如何使用Map函数以及Reduce函数进行表达。在Dryad编程模式中,应用程序的大规模数据处理被分解为多个步骤,并构成有向无环图形式的任务组织,由执行引擎去执行。这两种模式都提供了简单明了的编程方式,使得应用程序开发人员能够很好的驾驭云计算处理平台,对大规模数据进行处理。Dryad的编程方式可适应的应用也更加广泛,通过DryadLinq所提供的高级语言接口,使应用程序员可以快速进行大规模的分布式计算应用程序的编写。

0
相关文章