Как выполнять распределенные вычисления с помощью 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.