Easily distribute any code across multiple servers
gem install madrox-cluster
###Starting a Server
madrox 127.0.0.1 5000
###Adding servers
#configure a server
Madrox.config(["server_1:5000", "server_1:5001", "server_2:5000", "server_2:5001"])
###Executing a block
#Distribute processing across the servers
result = Madrox.collect([35, 30, 35, 37, 25, 30]) do |x|
def fib(n)
n<=1 ? n : fib(n-2) + fib(n-1)
end
fib(x)
end
###Register code in advance
CalcClass = Proc.new { |x|
class Calc
def fib(n)
n<=1 ? n : fib(n-2) + fib(n-1)
end
end
Calc
}
#stores this class in all servers
Madrox.register("Calc", CalcClass)
result = Madrox.collect([35, 30, 35, 37, 25, 30]) do |x|
Calc.new.fib(x)
end
Benchmarks for 10 x fibbonaci(40):
┌──────────────────────┬───────────────────────────────┬─────────────────────┐
│ │ Machines Used │ Time Taken │
├──────────────────────────────────────────────────────┼─────────────────────┤
│ Normal Ruby Process │ 1 mac 4 cores │ 3 minutes 40 secs │
├──────────────────────┼───────────────────────────────┼─────────────────────┤
│ 4 Madrox Servers │ 1 mac 4 cores │ 1 minute 36 secs │
├──────────────────────┼───────────────────────────────┼─────────────────────┤
│ 6 Madrox Servers │ 1 mac 4 cores + 1 mac 2 cores │ 1 minute 5 secs │
└──────────────────────┴───────────────────────────────┴─────────────────────┘
This gem is provided as is - therefore, the creators and contributors of this gem are not responsible for any damages that may result from its usage. Although Authentication and SSL may be added later, Madrox is experimental and is meant to be used in private trusted local networks. Use at your own risk.
Madrox is an experiment. For a more solid solution please check dRuby