1

我希望互联网上订阅我的服务器的客户端机器捐赠他们的空闲 CPU 周期。(如 SETI@Home)

他们将从服务器获取作业(工作单元)进行处理,并将结果发送回服务器。(这是最简单的描述)。我需要的框架应该允许我定义工作/任务。通信、作业执行/跟踪、客户端二进制文件更新等其他事情应由框架管理。

  • 我对 Alchemi.NET 进行了一些评估,但它没有得到积极的维护,似乎不成熟。

  • BOINC 在 C 中有 API,但我想要一个 .NET 或 JAVA 框架。

  • 我在看 Manjrasoft 的 ANEKA ,但它似乎只适用于 LAN 云。

必须有一些这样的框架可用。我需要专家建议!

4

4 回答 4

0

.net 的 ClickOnce 安装程序如何管理自动更新的客户端二进制文件。 http://msdn.microsoft.com/en-us/library/t71a733d.aspx

我不确定每个“工作框架”,但微软的同步框架支持滚动你自己的工作与客户同步?

http://msdn.microsoft.com/en-us/sync/default

于 2011-01-19T10:42:37.950 回答
0

我几乎不是专家,但我确实对使用 MPI(使用 C)进行分布式计算有一点经验。您所说的听起来不像网格计算,而是主/从系统。那就是您的服务器是主服务器,它指导所有客户端(从服务器)。

我对.net 编程知之甚少,所以我将笼统地说。

那里有很多网络框架作品,可能大多数都有您需要的设施。那就是您的客户将能够上传包含他们收集的内容的文件(或者他们可以只使用 http get/post),因为您不必担心 UI 问题,您可以通过一个操作来处​​理所有事情(假设基于动作的网络框架)。然后服务器可以通过 JSON 或 XML 返回一个响应,客户端可以使用它来进一步指导。如果系统非常简单并且可能是原型设计的好选择,那么 JSON 是正确的选择。

对于应用程序升级,我认为这是一个单独的问题(尽管服务器将其返回给客户端应该是一件简单的事情)。

于 2011-01-13T08:13:03.303 回答
0

BOINC 是最自然地满足您的志愿计算要求的框架,它稳定且高度可扩展——我会确保您在排除它之前已经完全考虑过它。

如果您需要在较短的期限内交付某些东西,那么我会考虑建立一个简单的主管(或调度程序) - 工作模式,只是为了让应用程序启动。主管将负责将数据分块并通过 http 提供。Workers(您的客户端应用程序)将连接到主管服务器;下载大量作品;完成块;并将结果上传给主管。

主要技巧是正确处理状态机,以便您可以准确跟踪每个工作块所处的状态。我会让主管在后台的数据库中持久化状态。

您的第一个版本是否需要在内部发布,还是供公众使用?

虽然这很有效,但我会开始着手了解 BOINC 并计划迁移。

于 2011-01-13T08:39:59.020 回答
0

我的推荐

工作区:

  1. 有一个请求接收器,将消息放入消息队列中,如rabbit mq
  2. 有许多工作人员,听同一个队列,从中获取工作并在完成后响应它。
  3. 完成后,在另一个队列上发送一条消息,其中包含指向已知位置的 URI,例如您的网络驱动器。目标是您解析的数据。
  4. 接收者收听这些“已完成”的消息。从 URI 中获取数据。

完毕。

RabbitMQ 带有很棒的 CLR API。

同样的推理也适用于 Microsoft Azure 及其 AbbFabric 队列。一个优点是缩放非常好。

热版本控制

http://topshelf-project.com/

它提供了一个文件夹,您可以在其中放置二进制文件,然后运行这些文件。它管理这些版本以及将它们作为 Windows 服务运行。

部署

您可以使用 robocopy/xcopy 和“net use Q: pwd \server\share”、“net delete Q:”部署二进制文件

持续集成

团队城市

在广泛使用 MsBuild 之后,我建议使用psake编写脚本并使用 PowerShell 运行构建。如果您对 PowerShell 有所了解,您还可以从构建脚本中获得 WinRM,这非常顺利。

使用 git/subversion 提交号作为 0.0.0.x, x 在以前的版本号中,您将拥有跨“调试”/“生产”构建“共享”的自动版本控制。

蔚蓝之路

工作区:

与上面相同,但使用 AppFabric 队列而不是 RabbitMQ。

热版本控制

通过交换“暂存”和“生产”实例,您可以避免停机。

部署

您可以使用 Azure 工具来执行 Visual Studio 的 MsBuild 任务,可以在此处阅读,或者您可以使用 PowerShell AzureSnapIns 和上面的类似设置进行持续集成。

持续集成

和上面一样。

于 2011-01-19T01:35:17.027 回答