nachopro yendo de la cama a la compu…

23Feb/110

Colas para gente como yo

En esta oportunidad les contaré sobre las colas y mi incursión en ellas :)

Primero que nada, amo las colas... las amo por el doble sentido que generan en nuestro idioma, seguramente tendré miles de hits con intenciones de dudooosa moralidad :P

¿Qué es una cola?

Una cola es una estructura de datos, es un elemento en el que podemos poner datos por un lado y sacarlos por el otro :P

¿Para qué sirve una cola?

Según lo recién expuesto, para ponerla y sacarla :P Esto aplicado a la informática serviría para que un programa, encargado de cierta tarea, pueda poner su resultado en la cola; luego, otro programa encargado de procesar esos resultados los tome y haga algo.

RabbitMQPasando a la parte seria del asunto voy a contarles de mi experiencia con RabbitMQ. Jaja, no puedo evitar reirme: colas, meter, sacar, rabbit (conejito), saquen sus conclusiones :P -aunque claro que PlayBoy no es algo del ambiente nerd-

Entendamos la infraestructura y aclaremos los tantos: RabbitMQ implementa el protocolo AMQP, cosa que no conozco en detalle -saliendo de que es un sistema de colas abierto- ni me interesa por el momento. Así hablaré basándome en RabbitMQ (siendo que la mayoría va a ser aplicable a colas basadas en AMQP).

Teoría de colas x $2.-

Vayamos por partes, en todo sistemas basados en colas tenemos tres elementos principales:

  1. Un emisor: Es el que origina un dato y lo pone en la cola.
  2. La cola: Es el lugar donde ese dato reside.
  3. Un receptor: Es el que toma un dato y hace algo con él.

Nos vamos a enfocar en el punto dos: La cola.

La cola en realidad comprende un concepto algo más complejo que un simple lugar donde se tiran cosas y de dónde se las sacan. En ella encontraremos:

  1. El message: Será el portador de nuestra información.
  2. El exchange: Será el recepcionista de nuestro mensaje y deberá saber qué hace con él.
  3. La routing key: Será una simple palabra o texto que nuestro exchange deberá conocer.
  4. La queue: Será la cola en donde realmente residirá nuestro message.
  5. El binding: Será el encargado de decirle al exchange en qué queue guardará el message dado según su routing key.

El message es un objeto que contiene la información concreta que le damos nosotros y una serie de propiedades, en la que destacamos el delivery_mode, que acepta dos valores 1: mensaje temporal, 2: mensaje persistente.

Las colas son demasiado flexibles para los que estamos acostumbrados a las cosas viejas de la informática, por ejemplo: Se declaran en tiempo de ejecución; se borran cuando el último cliente se desconecta y éstas están vacías; por parte del servidor no hace falta configurar un corno; etc; etc.

El exchange es un broker, es con quién charla directamente el programa que se conecta a la cola para meter un message. Él sabe, o debería saber, qué hacer con el mensaje que le damos -es decir, en qué cola guardarlo- y cómo distribuirlo: direct: es un método de trabajo donde una routing key define una única cola de destino, fanout: es un método en el que no importa nada, todo lo que llega va a todas las colas definidas, entre otros modos que hay y que no voy a tratar.

La routing key es un simple texto idenfiticativo, pero que no trataré en mayor detalle.

La queue es la amada cola, que puede ser o no persistente: es decír que puede existir mientras se use y luego desaparecer o bien durar en el tiempo, soportando que el servidor sea reiniciado.

El binding es la acción de crear la siguiente regla: exchange-routing key va a la cola queue.

Hasta aquí, no van a entender un carajo... y mi idea no es ayudarlos, sino quedar como un duque en el tema y ganar minitas :P

Ahora vamos a las acciones básicas que tenemos en la cola:

  1. publish: Se le da el message deseado, el exchange a usar y la routing key.
  2. get: Se le da el nombre de la cola, para obtener un mensaje.
  3. consume: Se le da el nombre de la cola y queda a la escucha de mensajes.
  4. tx_select: Se usa para activar transacciones.
  5. tx_commit: Se usa para confirmar la transacción y automáticamente inicia otra.
  6. tx_rollback: Se usa para abortar la transacción y automáticamente inicia otra.

En fin, acá hay conceptos básicos y otros complejos... realmente esto lo pensé para mí mismo pero les prometo que en breve publicaré unos ejemplos en Python para que puedan aprender un poco más de cómo implementar esta teoría.

Hasta la próxima ;)

Comments (0) Trackbacks (0)

No comments yet.


Leave a comment


*
Before you submit form:
Human test by Not Captcha

No trackbacks yet.

Pages

Categories

Blogroll

Archive

Meta