La Coctelera

por Guillermo Álvarez

image

DRB

DRB o Distributed Ruby es una abstracción de sockets tcp y serialización de objetos que trae integrada ruby por defecto.

Tenía ganas de jugar con drb y su abstracción superior sobre el patron tuple spaces que es una forma de implementar el paradigma de memoria asociativa (associative memory) desda linda, que es una forma de coordinar y comunicar diferentes procesos entre máquinas. Ya jugaremos con Rinda, pero como bien dice mi amigo Jack... Vayamos por partes.

En este caso vamos a poner un caso real en rails para procesar emails. No es que sea necesario utilizar DRb, es que es la única forma rentable que he encontrado. Recibimos e-mails con una frecuencia indeterminada, y los procesamos desde una tarea rake. Esto está bien salvo por que levantar una tarea rake que como dependencia tiene :environment, puede suponer bastante tiempo. Si supone 10 segundos y cada instancia supone 40 o 50 megas. 10 correos por segundo... tumbarían la máquina.

Pues lejos de ir más lejos se implementa una arquitectura cliente-servidor en el que el servidor es la tarea rake y el cliente es lo que se conecta con el MTA(Mail Transfer Agent) del sistema. Al grano:

El cliente, solo necesita esto

#!/usr/bin/env ruby 
 require 'drb' 
 URI="druby://localhost:9999"  
 server = DRbObject.new_with_uri URI 
 return server.process($stdin.read.to_s) 
 

Mientras que el servidor se arreglaría con esto

 
   desc 'Start Mail Daemon' 
   task :daemon => :environment do 
     require 'drb' 
     URI="druby://localhost:9999" 
     class Processor 
       def process(mail) 
         ModeloActiveRecordParaMails.create(TMail.new(mail)) 
       end 
     end  
     DRb.start_service URI, Processor.new 
     DRb.thread.join 
   end
 

Con esto estaría ya todo el trabajo hecho.

Creo que el código es bastante auto-explicativo. Si hay alguna duda... A los comentarios.

4, ene | sin comentarios Posteado por: cientifico compártelo Tags: client server, start service, thread join, drb, ruby, rails, daemon, cliente, servidor, druby

Escribe un comentario