A-A+

BOINC 分布式计算平台简介

2011年02月16日 学习随笔 暂无评论 阅读 1 次
摘要:

这是一篇特别的投稿,作者 Alan 曾供职于多家跨国IT公司,在作为一名Geek的同时也在不断地思考IT行业特有的行为模式,本文作为整篇稿件的上半部分,主要介绍了 BOINC 的基本概念,为进一步的讨论打下基础。他最近打算开展自己的咨询业务。如果你对分布式计算,移动设备,IT人员管理,互联网,量子物理和电影感兴趣,欢迎与他联系。

BOINC 分布式计算平台提供了一个运行环境,使得用户可以在其上处理各种运算任务。目前全球最大的分布式计算项目SETI@home 就运行在这个平台上。 BOINC 的全称是”Berkeley Open Infrastructure for Network Computing”,它由美国加州大学伯克利分校开发,美国国家科学基金会支持,项目主页是 http://boinc.berkeley.edu/

这个分布式计算平台的主要功能是把批处理提交上来的计算任务自动地分配到网络中的各个计算机去执行,这里的网络可以是局域网,也可以是广域网。

在 任务执行完毕后,这些负责运算的机器再把计算结果回传到指定的位置。它有一个主控主机,然后各个负责运算的计算机通过安装这个平台的客户端软件连接到这台 主控主机,主控主机负责接收提交上来的计算任务,并把它们合理地分配到负责运算的计算机上运行,最后接收计算结果。当然计算结果并不需要非得回传到主控主 机,它可以被传输并存储到网络上的任何一台计算机,或者是专门的存储系统,比如 NAS。BOINC 也可以使用云计算服务中的计算和存储资源。有些企业和组织可能很小,他们觉得租用一定的计算和存储资源去解决他们的问题更划算,在这样的情况下,BOINC 可以使用 Amazon EC2 和 S3 来满足用户需求。

这个系统的典型客户是大学和研究机构。对于他们来说,计算密集型任务非常普遍,比如说物理,化学,生物,甚至数学,都经常需要运行大量的计算型任务去做模拟。

比如说有个物理实验,这个实验有一个程序可以用来模拟实验的结果,这个程序可以接收各种参数,并产生该物理实验在不同参数下的结果,这些 参数可能是磁场强度,电流强度,风速等等,由于需要覆盖尽可能多的情况,于是这些参数被分成了一个一个组,假如有一千组吧,这样我们就有了一千个计算 任务需要处理,并且他们之间是互相独立的。

现在把这一千个任务提交到我的主控主机,然后它们就被分配到各个运算机器上去运行了。一般来说,每个任务会占 用运算计算机的一个 CPU 逻辑核。假如你有一台计算机有 2 个物理 CPU,每个物理 CPU 有 4 个逻辑核,那么该计算机在同一时刻就可以同时运行 8 个任务。其 它的任务形式还有视频转换,编码解码,信息的加密解密,文件的 MD5,SHA1 校验等等。

BOINC 平台目前可以完整地支持 GPU 协处理器运算。现在的主流显卡都提供了 GPU 辅助运算的技术,比如 Nvidia 的 CUDA 和AMD 的 Stream 技术,也就 是我们常说的协处理器的概念。所以如果现有的硬件上刚好有支持 CUDA 的 Nvidia 显卡或者 Stream Technology 的 AMD 显卡,那么 GPU 的运算资源也可以被利用起来。
BOINC 这个框架还是跨平台的。在服务器端的配置文件里定义好目标程序的运行平台,然后在负责运算的客户机上安装对应平台的 BOINC 客户端,就可以实现任务按平 台自动分配。比如说在一个 BOINC 系统中,主控主机是 Linux,要进行运算的任务是跑在 Linux 环境下的,客户端的机器既有 Linux 的,也有 Windows 的。那么当一个运算任务被提交到主控主机后,系统会自动把这个任务分配到 Linux 平台的客户机运行,而忽略 Windows 平台的客户机。
如果没有这个平台,在上述应用的场景下,人们将不得不手动地让这些任务在各个计算机上跑起来,每过一阵去看看它们的运行状况,如果任务运行完毕,还得手动把运行结果放到合适的地方,然后再执行一个新的任务以防止机器闲着,很显然这样做人力成本和计算资源的利用率都不高。
BOINC 平台把上述所有的操作都自动化了。主控主机和执行任务的客户机之间保持着一个 Heartbeat,传送负载和任务状态等信息。如果网络中的计算机处于满负荷运转的状态,主控主机则把等待运行的任务放在队列里等着。在系统运行期间,几乎可以保证所有执行任务的客户机满负荷运转,充分发挥它们的硬件效能。这个平台还有一些简单的用户和组的管理功能,并且提供一个 Web 界面,使得人们在网络上任何地方都能得到自己的任务和系统的运行状态。

当然,这个平台也并非适用于所有类型的任务,正是所谓的”no silver bullet”。BOINC 最适合的应用场景是”bag of task computations”,即:数量巨大,互相之间独立,且每个任务的运算量和对内存及外部存储的要求适中的任务。

这并非意味着 BOINC 在其他应用场景下无法工作,事实上 BOINC 并不关心实际运行的任务是什么,任何可执行的程序均可运行在这个平台上。但在”bag of task computations”的应用场景下,BOINC 平台的效率是最高的。

但在这里 BOINC 平台其实回避了一个重大且艰深的问题,就是运行时需要极大运算量和存储量的任务应该如何拆分? 对于极大运算量的任务而言,如何拆分总是令人头疼的问题。

假设某个计算任务在一台普通配置的服务器上需要一年时 间才能得到结果,并且有 2 个这样的任务需要运行,这时,生活可能会变得不再美好。 假设有 100 台普通配置的服务器作为计算资源,很显然不能直接把这 2 个任 务提交到 BOINC 系统里。如果这样做的话,100 台服务器中将只有 2 个CPU逻辑核处于满载运转状态,其它计算资源都闲着,而且得等上 1 年才能拿到 结果。

对于这样的任务,需要考虑的是如何将其分拆为计算量较小的,彼此互相独立的子任务,然后用 BOINC 提供的一组 API 进行封装,最终提交进系统,这样,100 台服务器的计算资源就能全利用上了,每个子任务的计算结果分别通过既定的方式进行验证,最后汇总为整个任务的结果,这也正是 SETI@home 项 目的运行模式。

但是并非所有的极大计算量任务都能成功分拆,有些是算法本身的限制,有些则是程序的限制。比如说对于一个第三方的二进制程序而言,用户可能既没有源代码,也无权进行逆向工程,在这种情况下,分拆工作很显然是没法进行的。

不过对于一个公司或组织内部的研究项目而言,一般来说,项目的设计思路和 源代码的取得没有问题,所以如果算法上可能,则非常推荐针对 BOINC 平台进行任务分拆,这样就可以利用尽可能多的计算资源。

如果运算结果的验证机制 做得很完善的话,甚至还可以面向广域网征集志愿的计算资源。 这个平台目前的许可证是 LGPL,一个比较宽松的许可证,Android 也是 LGPL。这意味着你不必公开自己对系统所做的定制化修改,对一些企业用户而言,可以满足他们在知识产权方面的要求。事实上,该系统的使用几乎都需要进行或多或少的定制化,因为每个项目的情况可能都不一样,任务的计算类型和计算量也各异。

可能有些读者听说过 SETI@home。它是一个使用计算机分析射电望远镜的无线信号数据,以寻找地外生命的项 目。当然,到目前为止,还没找到。这个项目的主导者是 David P. Anderson,他同时也是 BOINC 平台的主导者。事实上,设计 BOINC 平台的初衷就是为了 SETI@home 这一项目,此后才慢慢发展成为一个通用的分布式计算平台。

SETI@home 项目问世已经很多年了,在本世纪初的时候有着不小的影响力,它的项目主页是 http://setiathome.berkeley.edu/。 根据 2008 年 1 月的数据,该项目每天增加的待处理数据为 300 GB。目前全球已有大约 520 万个参与者。截止到 2009 年 11 月,该项目的计算能力为 769 teraFLOPS (FLOPS == floating point operations per second,tera == 10^12,作为对比,当前世界第一的超级计算机,天河 1A,实测为 563.1 teraflops)。

SETI@home 项目成功地做到了任务拆分,从而得到了极大的可用计算资源。当然,计算资源永远是不够的,所以 SETI@home 还在持 续招募志愿者。大家可以通过加入 SETI@home 项目来体验一下这个平台的运作模式,除了 SETI@home 以外,还有很多其他项目也运行在这个平台 上,这里是它们的列表:http://en.wikipedia.org/wiki/List_of_distributed_computing_projects

在这个全民 iPhone 4 的浮躁时代,研究底层计算型应用的人们越来越少。大家都把注意力转移到了所见即所得的东西。比如网页和 iOS 或 Android 平台上运行的 app。不过我个人还是希望能有更多的人关心底层,科学计算和大尺度的一些东西,这会让我们明白 0 和 1 世界的本质。

在下一篇文章里,我会着重介绍我对系统的一些修改和几个典型的应用场景。 非常感谢坚持读到这里的读者,谢谢!
标签:

评论已关闭!

Copyright © 浩然东方 保留所有权利.   Theme  Ality 07032740

用户登录