Re: Aplicacion distribuida en Python
lasizoillo <[email protected]>
| Newsgroups | gmane.comp.python.general.castellano |
|---|---|
| Message-ID | <[email protected]> |
El 22 de agosto de 2009 18:08, Hernan M Foffani<[email protected]> 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 <[email protected]>: >> 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