【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表达式代码示例片段如下:
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所提供的高级语言接口,使应用程序员可以快速进行大规模的分布式计算应用程序的编写。
分布式技术的应用
虚拟化(Virtualization)是云计算的基石。也就是说企业实现私有云的第一步就是服务器基础架构进行虚拟化。基础设施虚拟化之后,接下来就是要将现有应用迁移到虚拟环境中。云计算最重要的概念之一就是可伸缩性,实现它的关键则是虚拟化、虚拟化就是在一台共享计算机上聚集多个操作系统和应用程序,以便更好地利用服务器。当一个服务器负载超荷时,可以将其中一个操作系统的一个实例(以及它的应用程序)迁移到一个新的、不相对闲置的服务器上。
▲图8 实现云计算步骤
Dryad可以结合Hyper-V(Windows Server 2008的一个关键组成部分)虚拟化技术,可以实现TB级别的数据的在线迁移。中小型企业也可以针对企业内部小型群集服务器进行分布式应用系统编程,以及制定私有云开发与应用解决方案等设计。Windows Azure是微软公有云非常好的解决方案,但是目前由于各种原因为时过早。使用现有Windows第三方产品实现私有云,花费成本却很大。然而Dryad技术却给我们带来了不错的折中的选择,当我们基于Windows Server平台运行应用系统或者网站时,便可以基于Dryad分布式架构来开发与设计实现。当公有云时机成熟和各种条件完备时,系统很轻易的升级到公有云,企业而无需花费太多成本。
写在最后
通过以上介绍,我们已经了解到Dryad是实现构建微软云计算基础设施重要核心技术之一。云计算可以看成是网络计算与虚拟化技术的结合。利用网络的分布式计算能力将各种IT资源筑成一个资源池,然后结合成熟的存储虚拟化和服务虚拟化技术,让用户实时透明地监控和调配资源。我们也体会到Dryad的诸多优点,如DryadLINQ具有声明式编程并将操作的对象封装为.NET类方便数据操作、自动并行化、Visual Studio IDE和.Net类库集成、自动序列化和任务图的优化(静态和动态(主要通过Dryad API实现))、对Join进行了优化,得到了比BigTable+MapReduee更快的Join速率和更易用的数据操作方式等。不过,Dryad和DryadLINQ也同样具有局限性。它更适用于批处理任务,而不适用于需要快速响应的任务;这个数据模型更适用于处理流式访问,而不是随机访问。虽然目前Dryad还是测试阶段尚未大规模普及,但是微软已经在AdCenter的生产系统中使用Dryad。
与 MapReduce不同的是DryadLINQ使用的是.NET的LINQ查询语言模型,并且Dryad是针对运行Windows HPC Server的计算机集群设计,而非兼顾Linux,而目前Apache的Hadoop环境只支持Linux。目前而言,高性能计算市场被Linux所占领,但是笔者相信Dryad平台在将来一定具有很广泛的发展前景,尤其对.NET开发人员来说也是一次很重要的技术革新机遇。