Aplicacion distribuida en Python

lasizoillo lasizoillo en gmail.com
Sab Ago 22 23:14:16 CEST 2009


El 22 de agosto de 2009 18:08, Hernan M Foffani<hfoffani en gmail.com> escribió:
> Quizás podrias echarle un vistazo a ActiveMQ de Apache.
> (Y luego contarnos qué tal es, para los curiosos que no tenemos mucho tiempo)
>

No se muy bien como será, pero mirando por encima la ayuda pinta complicado.
http://activemq.apache.org/networks-of-brokers.html

Eso si, una vez instalado hay librerias faciles de usar como carrot.
Yo instalé rabbitmq y la verdad que es muy facilito usarlo con carrot:
http://github.com/ask/carrot/tree/master

Eso si, en el tutorial de ayuda el autor mete la pata bien. ZeroMQ
implementa el protocolo amqp como cliente, no es un broker que pueda
usarse con carrot. Pero hay que reconocer que pinta bien:
http://www.zeromq.org/whitepapers:brokerless

Aunque no recomiendo su uso. Los bindings de python tienen más peligro
que el equipo A en una chatarrería. Las pruebas que estuve haciendo
con ellos daban cores por todos los lados.

Espero que eso te haya despejado algo de tu curiosidad ;-)

Ahora voy a tratar de despejarsela a él poniendo un ejemplo de como
resolverlo con amqp.

> 2009/8/22 Otto Machado <ottomachado en infomed.sld.cu>:
>> Hola colegas:
>>
>> Necesito implementar una aplicacion distribuida en python. La idea es la
>> siguiente:
>>
>> Como se ve en la figura adjunta tengo 3 entidades. Yo necesito comunicar
>> dichas entidades entre si. Nunca se comunican A y B directamente, sino que
>> MASTER actua como intermediaria (MASTER actua como una entidad que enruta la
>> comunicacion). Un ejemplo de comunicacion seria:
>>
En master metes un broker amqp. El que más rabia te dé. Bastará que
tenga un solo exchange y redirija las comunicaciones a través de la
routing_key.

>> Un cliente en A manda un mensaje a su servidor local (que esta en A). Este
>> servidor lo manda para un servidor que esta en MASTER y de aqui se manda
>> para un servidor destino local que seria en B. El cliente en B para leer el
>> mensaje lo lee de su servidor local. (algo parecido a los sistemas de
>> correo)
>>
Olvidandonos por un momento del servidor local en los nodos A y B:
* A y B publican mensajes a MASTER diciendo que la routing_key es el
nodo destino ("A", "B", ...).
http://ask.github.com/carrot/introduction.html#sending-messages-using-a-publisher

* A y B consumen mensajes de MASTER en los que la routing_key es igual
a su nombre de nodo ("A", "B", ...).
http://ask.github.com/carrot/introduction.html#receiving-messages-using-a-consumer

Con esto ya tienes el HUB de comunicacion.
http://es.wikipedia.org/wiki/Hub

Tienes un único punto de fallo que puedes montar en cluster (lee la
documentacion del broker) y tener persistencia de los mensajes (lee la
documentacion de carrot). Puedes hacer optimizaciones montando varios
exchanges según la durabilidad de los mensajes (seguridad vs
velocidad).

>> El problema es que si no hay conectividad entre alguno de los puntos,
>> necesito que los servidores locales pongan en cola los mensajes hasta que se
>> reestablezca la comunicacion y se pueda enviar los mensajes.
>>
Ahora es cuando recordamos el servidor local. Mete el publisher en un
hilo que consuma de un objeto Queue de python. Para publicar alimenta
esa cola.
http://docs.python.org/library/queue.html#Queue.Queue

Si necesitas que dicha cola tenga persistencia te lo puedes currar de
mil maneras. Quizá la más fácil es usar Durus.

>>
>> Conocen alguna herramienta que me sirva para hacer esto y que pueda
>> interactuar con Python????
>> Agradezco todas las ideas que me aporten.
>>
Con lo que te he comentado deberías poder montar el sistema en un par
de tardes. Además sería un sistema muy escalable y usable en
producción.

Si no te gusta amqp como protocolo de cola de mensajes puedes usar
cualquier otro. La base va a ser la misma. Lo bueno de amqp es que es
un protocolo abierto y vas a poder elegir entre un abanico de clientes
y servidores que no van a tener problemas de interoperabilidad.


Un saludo:

Javi

>> Saludos,
>> Diana
>>
>>
>> --
>>
>> Este mensaje le ha llegado mediante el servicio de correo electronico que ofrece Infomed para respaldar el cumplimiento de las misiones del Sistema Nacional de Salud. La persona que envia este correo asume el compromiso de usar el servicio a tales fines y cumplir con las regulaciones establecidas
>>
>> Infomed: http://www.sld.cu/
>>
>> _______________________________________________
>> Lista de correo Python-es
>> http://listas.aditel.org/listinfo/python-es
>> FAQ: http://listas.aditel.org/faqpyes
>>
> _______________________________________________
> Lista de correo Python-es
> http://listas.aditel.org/listinfo/python-es
> FAQ: http://listas.aditel.org/faqpyes
>
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es