Skip to content

Using MBrace in distributed processes on-premise / local network #165

@smoothdeveloper

Description

@smoothdeveloper

I'd like to have a look at MBrace which looks amazing, but my use case implies having distributed processes on-premise / internal network.

I tried to figure out in the documentation if this was supported use-case, I found there is Thespian which is "not for production" for "test only" but it is not clear how I could at least investigate it's usage on the network.

I tried this:

on cluster (supervising process)

#r "packages/MBrace.Core/lib/net45/MBrace.Core.dll"
#r "packages/MBrace.Runtime/lib/net45/MBrace.Runtime.dll"
#r "packages/MBrace.Thespian/lib/net45/MBrace.Thespian.dll"

#I "packages/Vagabond/lib/net45/"
#I "packages/FsPickler/lib/net45/"
#I "packages/Thespian/lib/net45/"
#I "packages/Mono.Cecil/lib/net45/"
#I "packages/Argu/lib/net40/"
open System.IO
open MBrace.Library
open MBrace.Thespian
MBrace.Thespian.ThespianWorker.LocalExecutable <- Path.Combine(__SOURCE_DIRECTORY__, __SOURCE_FILE__)
let cluster = MBrace.Thespian.ThespianCluster.InitOnCurrentMachine(0, false)
let workerref1 = ThespianWorker.Connect("mbrace://machine1:2468")
let workerref2 = ThespianWorker.Connect("mbrace://machine2:2469")
cluster.AttachWorker(workerref1)
cluster.AttachWorker(workerref2)

on workers:

#r "packages/MBrace.Core/lib/net45/MBrace.Core.dll"
#r "packages/MBrace.Runtime/lib/net45/MBrace.Runtime.dll"
#r "packages/MBrace.Thespian/lib/net45/MBrace.Thespian.dll"
#r "packages/Vagabond/lib/net45/Vagabond.dll"
#I "packages/Vagabond/lib/net45/"
#I "packages/FsPickler/lib/net45/"
#I "packages/Thespian/lib/net45/"
#I "packages/Mono.Cecil/lib/net45/"
#I "packages/Argu/lib/net40/"
open System.IO
open MBrace.Library
open MBrace.Thespian

let getWorkDir i =
  let dir = Path.Combine(__SOURCE_DIRECTORY__, sprintf "thespianworkdir%i" i)
  Directory.CreateDirectory dir |> ignore
  dir

ThespianWorker.LocalExecutable <- Path.Combine(__SOURCE_DIRECTORY__, __SOURCE_FILE__)
let workDir1 = getWorkDir 1
let worker1 = ThespianWorker.SpawnAsync("machine1", 2468, workDir1, 4)
Async.RunSynchronously worker1

this seems to get stuck on either side.

Can anyone provide guidance?

Is there any plan for production support of on-premise distributed setup?

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions