Как выполнять распределенные вычисления с помощью F# (.Net)

поэтому я просто немного повеселился в F# с асинхронной библиотекой недавно и был очень поражен особенно асинхронным.Параллель, которая в основном принимает последовательность асинхронных задач и объединяет их под одной асинхронной задачи.

однако теперь мне интересно, как распределить вычислительную задачу между несколькими компьютерами, например, двумя ноутбуками на моем столе.

можно ли как-то сериализовать эти асинхронные задачи и отправить их на другой компьютер, который затем выполняет задачи и отправляет результат обратно?

или, может быть, мне нужно сериализовать сами данные и отправить их на другой компьютер, на котором у меня есть какой-то код, который выполняет вычисления и отправляет результат обратно?

или может есть другой простой способ сделать это?

каков общий подход к распределенным вычислениям в F# с использованием .Net? (рекомендуемые шаблоны проектирования, инструменты, библиотеки и т. д.)

моя конечная цель-разделить большой вычислительная задача на меньшие части и запустить их на нескольких машинах. Желательно в упрощенном некорпоративных-сложные сторону.

3 ответов


есть проект под названием 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.Ио и есть также хороший разговор от Матиаса Брандевиндера на хруст через большие данные с MBrace


Я определенно рекомендую вам akka.net - ... В настоящее время я использую распределенные интеграционные решения и могу сказать, что это потрясающе. Проект Orleans от Microsoft Research также довольно хорош, хотя это не идиоматический подход f#


fsharp.org имеет страницу, связанную с облачные данные, вычисления и обмен сообщениями с помощью F#, он обеспечивает до-до-даты ressources на этот вопрос.

Как и Tomas Petricek сказал:MBrace Кажется идиоматическим способом выполнения распределенных вычислений в F#. К сожалению, он фокусируется на облачных вычислениях (Azure и Amazon) и предоставляет очень мало информации о локальных многомашинных кластерах. Я нашел нить это касается предмета и, похоже, обеспечивает решение, но официальный учебник (и, возможно, некоторые встроенные функции) было бы неплохо.

Microsoft праджня был разработан в F# и предлагает альтернативу Sparks. В документации объясняется, как построить local Multi-машины кластеров (Windows-машину только кажется). Возможно, это самое простое решение, но оно кажется мертвым.

другой вариант может быть akka.net который имеет F# API.