[英]How to perform distributed computations with F# (.Net)
所以我最近在F#中使用Async库获得了一点乐趣,特别是Async.Parallel非常惊讶,它基本上采用了一系列异步任务并在一个异步任务下统一它们。
但是,现在我很好奇如何在多台计算机之间分配计算任务,例如我办公桌上的两台笔记本电脑。
是否有可能序列化这些异步任务并将它们发送到另一台计算机,然后执行该任务并将结果发回?
或者我可能需要序列化数据本身并将其发送到另一台计算机,我在其上运行一些代码来执行计算并将结果发送回去?
或者可能还有另一种简单的方法吗?
使用.Net在F#中进行分布式计算的一般方法是什么? (推荐的设计模式,工具,库等)
我的最终目标是将一个大型计算任务分成更小的部分并在多台机器上运行它们。 优选地,以简单的非企业 - 过度复杂的方式。
有一个名为MBrace的项目,它几乎完全按照你的描述:-)。
它允许您使用cloud
编写云计算:
let first = cloud { return 15 }
let second = cloud { return 27 }
你可以用let!
来组合它们let!
与异步工作流一样,您也可以使用Cloud.ofAsync
从异步工作流创建它们。 云计算可以使用Cloud.Parallel
在网络上分布:
cloud {
let! results = [ first; second ] |> Cloud.Parallel
return List.sum results }
目前,有一些MBrace绑定用于在本地(用于测试)和Azure集群内部运行计算,但是在支持Amazon方面也有一些正在进行的工作。
有关更多信息,请参阅mbrace.io ,Mathias Brandewinder也在通过 MBrace 处理大数据时发表了精彩的演讲
fsharp.org有一个处理云数据,计算和消息与F#的页面 ,它提供了有关此事件的最新资源。
正如Tomas Petricek所说, MBrace似乎是在F#中进行分布式计算的惯用方法。 遗憾的是,它专注于云计算(Azure和亚马逊),并提供有关本地多机群集的极少信息。 我找到了一个处理该主题的线程并且似乎提供了一个解决方案但是官方教程(可能还有一些内置函数)会很好。
微软的Prajna是用F#开发的,它提供了Sparks的替代品。 该文档解释了如何构建本地多机群集 (仅在Windows机器上)。 这可能是最简单的解决方案,但似乎已经死了。
另一种选择可能是akka.net,它有一个F#API 。
我绝对推荐你akka.net。 我目前正在使用它实现分布式集成解决方案,并且可以告诉你这很棒。 微软研究院的奥尔良项目也很不错,虽然它不是惯用的f#方法
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.