2008/10/15 Francesc E. [email protected]
Que no me salte nadie a la yugular … DRb es lo bastante rà pido para
procesar mensajes? Creo que hice las pruebas pertienentes en ese
momento, por lo que me quedé con starling, que al mismo tiempo no es
tan rà pido como Beanstalkd, pero lo elegimos por la persistencia de la
cola.
He estado haciendo pruebas MUY POCO CIENTÃFICAS con drb y estos son los
resultados y código. El entorno un powerbook g4 con el ruby de serie de
osx
10.5.
Los resultados son los esperados, y se podrÃa concluir que drb es lento
a la
espera de comparar resultados con starling (a ver si esta tarde saco
tiempo
o si puedes implementar un ejemplo parecido), permitiéndome un máximo de
600
peticiones por segundo.
Salvando comparativa con starling, en mi máquina, una simple operación
de
suma remota en drb está limitada a unas 600 peticiones por segundo. Por
lo
que incluso usando drb, habrÃa que bufferear para obtener un rendimiento
decente con mucha carga.
Kakafuti2:drbtest guillermo$ ruby server.rb & sleep 2 ; ruby client.rb ;
fg
[1] 3408
I, [2008-10-15T14:09:15.634353 #3410] INFO – : Connecting to server
I, [2008-10-15T14:09:15.638425 #3410] INFO – : Tring increase in
server
I, [2008-10-15T14:09:25.658296 #3410] INFO – : Total user time in 10
seconds for #Counter:0xa0b04.increase with 6387 calls: 4.7
I, [2008-10-15T14:09:25.659619 #3410] INFO – : Trying increase in
local
I, [2008-10-15T14:09:35.668056 #3410] INFO – : Total user time in 10
seconds for #Counter:0x89850.increase with 5163733 calls: 9.45
I, [2008-10-15T14:09:35.669428 #3410] INFO – : Trying system in server
I, [2008-10-15T14:09:45.695523 #3410] INFO – : Total user time in 10
seconds for #Counter:0xa0b04.sys with 772 calls: 0.989999999999999
I, [2008-10-15T14:09:45.696871 #3410] INFO – : Trying system in local
I, [2008-10-15T14:09:55.701216 #3410] INFO – : Total user time in 10
seconds for #Counter:0x89850.sys with 956 calls: 0.24
ruby server.rb
^Cserver.rb:5:in `join’: Interrupt
from server.rb:5
Kakafuti2:drbtest guillermo$
counter.rb
class Counter
def initialize; @count,@utime = 0,Process.times.utime; end
public :initialize
def utime; Process.times.utime - @utime ; end
def increase; @count = @count+1; end
attr_reader :count
def sys; @count = @count+1 ; %x(ls); nil; end
end
server.rb
require ‘drb/drb’
require ‘counter’
DRb.start_service(“druby://localhost:8787”,Counter.new)
DRb.thread.join
client.rb
%w(drb/drb timeout logger counter).each {|e| require e}
@logger = Logger.new(STDOUT)
def log(msg); @logger.info msg ; end
def timeout(obj,meth)
obj.initialize
Timeout::timeout 10 do
obj.send meth while true
end
rescue TimeoutError
log "Total user time in 10 seconds for #{obj.to_s}.#{meth.to_s} with
#{obj.count.to_s} calls: #{obj.utime}"
end
log “Connecting to server”
server = DRbObject.new_with_uri(“druby://localhost:8787”)
local = Counter.new
log “Tring increase in server”
timeout server, :increase
log “Trying increase in local”
timeout local, :increase
log “Trying system in server”
timeout server, :sys
log “Trying system in local”
timeout local, :sys