BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

DryadLINQ让分布式计算更美好

| 作者 Abel Avram 关注 10 他的粉丝 ,译者 赵劼 关注 5 他的粉丝 发布于 2009年5月14日. 估计阅读时间: 3 分钟 | CNUTCon 了解国内外一线大厂50+智能运维最新实践案例。

DryadDryadLINQ是微软研究院的两个项目,用于辅助C#开发人员在在计算机集群或数据中心里处理大规模的数据。

Dryad是一个在计算机集群或数据中心里并行地执行顺序程序的基础架构。如下图所示,并行计算过程被会被组织为一个有向无环图,程序是图的“节点”,而“边”则为程序之间相互通信所用的通道:

dryad

上图简单描述了程序之间的关系,如数据来源及输出的指向。这个图必须是无环的,以避免造成调度上的死锁。任务管理器(Job Manager,JM)获取图之后,便会在程序的输入通道准备完毕,并且有可用机器的时候对它进行调度。JM从命名服务器(Name Server,NS)那里获得一个可用的机器,并通过一个维护进程(daemon,D)来调度这个程序。文件,共享内存,或TCP管道都可以作为程序(节点)之间通信用的通道。在运行过程中可以动态改变图的形状,并得到很好的容错性。在调试的时候,整个图也可以运行在单个系统上。微软已经在AdCenter的生产系统中使用了Dryad。
 
DryadLINQ是“一个把LINQ程序转化成分布式计算指令,以便运行于PC集群的编译器”。这个转化过程可以分解为以下几步:
  • C#和LINQ数据对象转化为分布式的文件块。
  • LINQ查询转化为分布式Dryad任务。
  • C#方法转化为运行于Dryad任务节点上的代码。
DryadLINQ有如下功能:
  • 声明式编程:计算指令要求使用类似SQL的高级语言进行表示。
  • 自动并行化:DryadLINQ编译器将顺序的声明式代码,转化为分布在大规模计算机集群中高度并行的查询计划。而对于单台机器中多核的使用,DryadLINQ则依赖PLINQ并行框架。
  • Visual Studio集成:程序员在使用DryadLINQ时可以利用VS中大量的高级特性,如智能提示、代码重构、集成调试、构建以及原代码管理。
  • .NET集成:所有的.NET类库,包括Visual Basic,以及各种动态语言都可以自由使用。
  • 类型安全:对分布式计算进行静态检查。
  • 自动序列化:数据传输机制会自动处理所有的.NET对象类型。
  • 任务图的优化
    • 静态:一系列丰富的查询优化规则,可以使查询计划有更好的局部性(locality)及更好的性能。
    • 动态:对已经处理完的数据集进行统计,以此作为运行时的优化查询计划的依据。

查看英文原文:DryadLINQ, Distributed Computing Made Easy

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT