当前位置: 首页 > news >正文

使用DryadLINQ

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

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

图8 DryadLINQ系统架构

如图8所示,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所提供的高级语言接口,使应用程序员可以快速进行大规模的分布式计算应用程序的编写。

Dryad技术的应用

虚拟化(Virtualization)是云计算的基石。也就是说企业实现私有云的第一步就是服务器基础架构进行虚拟化。基础设施虚拟化之后,接下来就是要将现有应用迁移到虚拟环境中。云计算最重要的概念之一就是可伸缩性,实现它的关键则是虚拟化、虚拟化就是在一台共享计算机上聚集多个操作系统和应用程序,以便更好地利用服务器。当一个服务器负载超荷时,可以将其中一个操作系统的一个实例(以及它的应用程序)迁移到一个新的、不相对闲置的服务器上。

图9 实现云计算步骤

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开发人员来说也是一次很重要的技术革新机遇。

http://www.jsqmd.com/news/1125834/

相关文章:

  • 深入解析TipDM大数据挖掘建模平台:从拖拽式可视化建模、全生命周期管理到产学研一体化应用的实战指南
  • Windows Phone 7重量级版本升级 - Mango (芒果)
  • 【SI_加重技术】快速了解高速信号传输加重技术
  • Learn Harness Engineering 课程全总结:12 讲核心要点
  • Qt 高级编程 034:深耕QWidget底层内核—彻底吃透无边框窗口设计核心原理
  • 自动化设备为什么要用减速机?以 ANDANTEX(恩坦斯特)精密传动选型为例
  • Power BI工具提示实战:构建可交互的微型子报表
  • 推荐六款小众实用宝藏APP
  • DeepLabv3+ 特征图可视化实战:从单通道提取到伪彩色映射的5步流程
  • EdgeRemover:Windows 10/11 中专业卸载Microsoft Edge的终极解决方案
  • 如何高效使用QRazyBox:终极二维码修复与恢复完全指南
  • 天学网英语听力对孩子有用吗?2026最新实测给家长靠谱答案
  • 什么是函数式编程
  • 为什么网卡停止收包?——Intel网卡RX Buffer Replenishment机制深度解析(上)
  • Bellman方程 - RL强化学习中价值估计的数学根基
  • LangChain快速入门-03Retrieval(上)
  • 为什么测试这么难写?
  • HagiCode 是怎么把 13 个 Agent CLI 接到一套系统里的
  • 成都热门的中央空调企业哪家可靠
  • 告别重复劳动!GIMP BIMP批量图像处理插件完全指南
  • 自动售货机运营需要了解哪些政策法规?新手必看~YH
  • 数据血缘追踪与元数据管理平台
  • NET中的异步编程(四)- IO完成端口以及FileStream.BeginRead
  • 全球邮轮旅行服务市场投资前景分析及发展研究建议报告2026年版
  • Nano Banana 2 怎么用?14 种宽高比 + 4K 出图完整步骤
  • 国漫视效巅峰最好的国产动画片哪吒魔童
  • 四步部署Dify:构建私有化AI应用开发平台
  • 从文档到AI知识库:工程化SOP与RAG实战指南
  • Engine-Sim实战:3大技术挑战与精准仿真验证指南
  • 智商平平”学软件