# 【iShout】BOINC 平台的改进以及应用场景简介

- 作者：alansun
- 发布时间：2011-01-04 10:57
- 分类：公司
- 原文：https://www.ifanr.com/29593

> 这是有关 BOINC 投稿的下半部份，作者 Alan 曾供职于多家跨国IT公司，在作为一名 Geek 的同时也在不断地思考IT行业特有的行为模式，本文在上半部分的基础上，介绍了 Alan 对于 BOINC 平台的改进，并且给出了可能的应用场景。Alan 最近打算开展自己的咨询业务。如果你对分布式计算，移动设备，IT人员管理，互联网，量子物理和电影感兴趣，欢迎与他[联系](mailto:newsbt521@gmail.com)。

[![](https://s3.ifanr.com/wp-content/uploads/2011/01/3_boinc-3-480x342.jpg "3&#95;boinc-3")](https://s3.ifanr.com/wp-content/uploads/2011/01/3_boinc-3.jpg)

我在 BOINC 平台上增加的功能主要在任务提交这个部分。在原始的BOINC平台上，提交任务按照任务的类型有不同的方式。对于单一任务而言，可以归为 single job 类型，BOINC 平台提供了一个脚本供用户在命令行下提交和查看任务。对于已经针对该平台进行拆分设计的任务而言，需要用户使用 BOINC 提供的一组 API，写程序封装后提交。因为在这种情况下，每个任务的计算结果有比较复杂的验证机制，以免最终结果出错。

对于一个一般的计算型任务而言，即”bag of task computations”之一，则可以认为是 single job 类型。以计算圆周率 pi 为例，在这种情况下，我把 single job 的提交形式做成了程序+配置文件的模式。

在配置文件里，可以填写任务的各种信息，比如说要计算圆周率小数点后面多少位，目标程序的输入输出文件是什么，运算结果的回传位置在哪里等等。还可以写些注释来对任务进行说明。在配置文件里还可以对任务进行分组管理，这样，用户可以把类似的几个任务写进一个组，然后提交一组或者几组任务，而不提交全部。如果任务的配置相似，还可以用程序自动生成配置文件。

在第一篇文章里也提到了，BOINC 是一个通用框架，这就意味着它的对外接口不能有很多花哨的功能，而是提供一组完成基本操作的 API，花哨的功能或者特定需求的实现需要用户自己动手完成。

上述这些功能的实现并不困难，BOINC 这种开放的平台在这方面很有优势，类似的功能增加或者定制化修改还可以做很多，所以一旦有客户愿意使用 BOINC 平台，那么该客户将会是一个长期客户，这是一种很健康的商业模式。

当然，除了客户的需求，还有一些一般性的增强型功能可以做，比如说通过移动设备控制任务，友好的任务状态提醒模式（电话，短信或者闹钟），系统的负载平衡（在服务器的性能差距悬殊时尤其需要）等等。

下面简单介绍一下应用的场景。

第一个是构建自动化系统，甚至多层自动化数据处理系统（你在第几层？）。比如说我取得了一部电影的网络播放版权，拿到了电影的原始 DVD 或者视频文件，游戏就开始了。

系统自动扫描某个路径，比如说是 A 光驱里的 DVD 内容或者原始视频文件被自动放到这个路径下。如果系统发现这个路径下有了新东西，则触发一系列的操作，最终生成可供网络播放的各种媒体格式，并把它们放到另一个路径，比如说 B。系统还会扫描路径 B，如果发现有新东西，则按照一定的规则生成 URL 并添加到网站的更新中去。如此一来，整个过程无人值守。

BOINC 平台工作在视频转码阶段，利用服务器进行运算。由于任务互相独立，BOINC平台中可以同时运行不同种类的任务。假设一台服务器有 4 个 CPU 逻辑核，其中两个可以用来计算圆周率，另两个可以用来进行视频转码。当然，在这种情况下要考虑负载的问题，任务之间如果计算量差距悬殊，还是推荐另部署一套计算资源和 BOINC 系统，以防止出现木桶短板的情况。

所以甚至可能出现这种场景，BOINC 系统 A 负责处理某个运算量级别的任务，相应地配备符合这个运算量级的计算资源，运算结果作为 BOINC 系统 B 的输入，系统 B 对系统 A 的运算结果进行再加工，然后输出到 BOINC 系统 C，如此罗列下去。这对有数据筛选的任务很有效。假设某个物理实验装置产生了原始数据，需要一层一层剥离，或者按照类别剥离，就有可能出现上述的场景。

第二个应用的场景是负责响应用户提交的互相独立的需求。比如说用户提交的，用来验证某个软件某项功能的任务。这任务可能是进行一个运算或一系列动作，来验证是否得到了预期的结果。

该软件需要运行大量类似的任务来确保它的功能和稳定性达到了要求。这时则可以部署 BOINC 平台，把要测试的软件部署到各个负责计算的客户机上或者直接封装进任务里。然后分组或者分批地提交任务。这种类型的需求普遍出现在自动化测试，性能评估，电信仿真，软件架构验证等领域。

第三个应用的场景是作为高等院校计算机相关专业的分布式计算演示平台，让学生们在学校里就能接触到这些实际应用的东西。现在大学里计算机系学生的动手机会还是不多，课程都以理论为主，学生们没什么机会来实际操作甚至控制一个在现实世界中广泛应用的系统。

运算型任务的种类有很多，也有各自的需求，理解客户的需求，并进行定制，这是 BOINC 系统所擅长的事情。

上面三个只是我暂时想到的应用场景，其实每个有类似需求的客户都可以思考一下自己的项目能否从 BOINC 平台中获得帮助。BOINC 平台不是一个超市里货架上的软件，它需要专业人员维护和定制才可以发挥最大效能。

最后希望有更多的公司和组织能意识到这个框架所能带来的效率的提升。如果有客户对这个系统感兴趣，我也很乐意提供相关服务和咨询意见。我工作的很长一段时间都在设计和实现各种自动化系统，我不能忍受周遭的人们使用古老的，效率低下的，易出错的方式工作。并且，这种能给予人们帮助的感觉也是我的工作乐趣所在。

本文为 cc-by-sa 许可，欢迎转载，转载请保留原作者信息。
