如何使用 F# (.Net) 执行分布式计算



所以我最近在 F# 中使用了 Async 库,并且对 Async.Parallel 感到非常惊讶,它基本上采用一系列异步任务并将它们统一在一个异步任务下。

但是,现在我很好奇如何在多台计算机之间分配计算任务,例如我办公桌上的两台笔记本电脑。

是否可以以某种方式序列化这些异步任务并将它们发送到另一台计算机,然后该计算机执行任务并将结果发回?

或者,也许我需要序列化数据本身并将其发送到另一台计算机,我在其上运行了一些执行计算并将结果发回的代码?

或者也许还有另一种简单的方法可以做到这一点?

在 F# 中使用 .Net 进行分布式计算的一般方法是什么?(推荐的设计模式、工具、库等)

我的最终目标是将一个大的计算任务分成更小的部分,并在多台机器上运行它们。最好以简单的非企业过于复杂的方式。

有一个名为MBrace的项目,它几乎完全符合您的描述:-)。

它允许您使用 cloud 块编写云计算:

let first = cloud { return 15 }
let second = cloud { return 27 }

您可以使用let!与异步工作流一样撰写它们,也可以使用 Cloud.ofAsync 从异步工作流创建它们。云计算可以使用Cloud.Parallel通过网络进行分发:

cloud {
  let! results = [ first; second ] |> Cloud.Parallel
  return List.sum results }

目前,有MBrace绑定用于在本地(用于测试)和Azure集群内运行计算,但在支持Amazon方面也有一些工作正在进行中。

有关更多信息,请参阅 mbrace.io,Mathias Brandewinder也发表了关于使用MBrace处理大数据的精彩演讲

我绝对推荐你 akka.net。我目前正在使用它实现分布式集成解决方案,可以告诉你这太棒了。Microsoft Research的奥尔良项目也相当不错,尽管它不是惯用的f#方法

fsharp.org 有一个页面处理 F# 的云数据、计算和消息传递,它提供了有关此事的最新资源。

正如Tomas Petricek所说,MBrace似乎是在F#中进行分布式计算的惯用方法。可悲的是,它专注于云计算(Azure和Amazon),并且提供有关本地多机集群的信息很少。我找到了一个处理该主题的线程,似乎提供了一个解决方案,但官方教程(也许还有一些内置函数)会很好。

Microsoft的Prajna是用F#开发的,提供了Sparks的替代方案。该文档解释了如何构建本地多机集群(似乎只有Windows机器)。这可能是最简单的解决方案,但它似乎已经死了。

另一个选项可能是具有 F# API 的 akka.net。

最新更新