我已经阅读了很多关于分布式Haskell的文章。已经做了很多工作,但似乎是在分配计算领域。我看到remote包似乎实现了Erlang风格的消息传递,但它是0.1和早期阶段。
我想实现一个系统,其中有许多单独的进程提供不同的服务,并由几个主要进程捆绑在一起。这似乎是Erlang的自然选择,但对于Haskell则不然。但我喜欢Haskell的类型安全性。
Haskell最近是否采用过Erlang风格的流程管理?
答案 0 :(得分:16)
如果您想了解有关remote
包,a.k.a CloudHaskell的更多信息,请参阅the paper以及Jeff Epstein的thesis。它的目的是准确地提供你想要的演员抽象,但正如你所说它处于早期阶段。关于parallel-haskell mailing list的改进有积极的讨论,因此,如果您有remote
未提供的特定需求,我们很乐意您加入并帮助我们确定其未来方向。< / p>
haskell-mpi
包比Serialize
更成熟但更低级别remote
。如果您坚持使用Simple
接口,则可以发送包含任意monad-par
个实例的消息,但抽象仍然低于remote
。
有一些实验系统,如在Haskell中实现高级分布式内存并行Haskell(Patrick Maier和Phil Trinder,IFL 2011,无法在线找到pdf)中所述。它融合了cloud and HPC Haskell确定性数据流并行性的方法,以及使I结构在网络上可序列化的有限能力。这些抽象有望进行分布式计算,但由于重点是计算纯函数值而不是提供Erlang样式的过程,它们可能不适合您的应用程序。
另外,为了完整起见,我应该在distributed Haskell上指出Haskell wiki页面,它涵盖了我在这里描述的内容,以及{{3}}上的子部分,它似乎需要刷新。
答案 1 :(得分:7)
我经常感觉IPC和演员是超卖特征。有很多有吸引力的消息传递系统,它们具有Haskell绑定,例如: MessagePack,0MQ或Thrift。恕我直言,你唯一需要补充的是正确处理流程并决定谁/什么管理这种寻址能力。
顺便说一句:许多程序员采用例如0MQ进入他们的Erlang环境,仅仅是因为它提供了通过消息代理构建消息传递的可能性,而不是依靠纯流程来处理超大规模的消息传递。
在“大规模多核世界”中,我个人认为共享内存方法最终会超越消息传递。当然,有人可以随时提出异议。但是当你写下你想要通过“几个主要过程”将你的过程“联系在一起”时,你实际上已经谈到了同步。此外,您当然可以challenge一个函数,进程或线程是否是正确的并行化级别。
简而言之:我可能会看到MessagePack或0MQ是否能满足我在Haskell中的需求,并在我的代码中关注其余部分。