paperplane

Conociendo a Marconi, el servicio de cola de mensajes de OpenStack

El potencial de OpenStack está continuamente siendo probado en contextos que necesitan soporte para aplicaciones más grandes y complejas, las cuales suelen requerir una forma confiable, robusta y eficiente para intercambiar información.

Esto puede hacerse usando infraestructuras de mensajería local, pero esta estrategia agrega un overhead adicional debido a la capacidad dispuesta para enfrentar picos de demanda inutilizada, recursos humanos requeridos para mantener dichas estructuras y el tiempo ocioso de las aplicaciones esperando por los datos requeridos.

¿Habrá una forma mejor de hacer esto? ¡Claro que sí!

Colas como servicio

Las colas de mensajes proveen un protocolo de comunicación asincrónico – el remitente no necesita interactuar con la cola al mismo tiempo que el receptor – originalmente creado para el pasaje de mensajes dentro de un sistema operativo – comunicación entre procesos – o dentro de una aplicación.

Pero esta idea ha sido extendida y otras implementaciones permiten el pasaje de mensajes entre diferentes computadoras, potencialmente conectando múltiples aplicaciones y múltiples sistemas operativos.

Más aún, nuevas implementaciones proveen estos recursos como un servicio. Esto es, Colas como servicio (Queues as a Service, QaaS).

Al usar esta estrategia el acceso a los recursos de mensajería se ve simplificado y la integración con diferentes aplicaciones es más sencilla. Además de esto, se reducen los costos, se aumentan el desempeño y la confiabilidad, y se mejora la escalabilidad.

¿Cómo funcionan las colas de mensajes?

Hay algunos puntos sencillos que resumen el funcionamiento de las colas – en sus implementaciones más simples -.

  • Una cola puede ser creada en cualquier momento por el administrador.
  • Aquellos interesados en intercambiar mensajes se suscriben en la cola deseada.
  • Los mensajes pueden ser enviados, recuperados o eliminados.
  • Los mensajes alojados en la cola son almacenados hasta que el receptor los recupera o hasta que un período de tiempo preestablecido termina.

Esto puede ser extendido con funcionalidades extra como el manejo por lotes, claiming – obtener mensajes específicos de la cola -, y controles de sanidad.

Marconi, el Servicio de Colas y Notificaciones de OpenStack

Marconi es un nuevo proyecto de OpenStack que tiene como objetivo proveer a las aplicaciones siendo ejecutadas en las nubes de OpenStack un Servicio de Colas Simple (Simple Queue System – SQS) y un Servicio de Notificaciones Simple (Simple Notification Service – SNS) de código abierto.

Define una REST API basada en HTTP, usa una arquitectura modular y soporta las semánticas unified publish-subscribers y job-queuing. Además, los usuarios podrán personalizar Marconi para ajustarse a sus necesidades.

Marconi puede ser usado para distribuir tareas entre múltiples trabajadores (colas de trabajo transaccionales), reenviar eventos a colectoras de datos (colas de eventos transaccionales), publicar eventos para cualquier número de suscriptores (publish-subscribers), enviar comandos a uno o más agentes (punto a punto o publish-subscribers) y solicitar acciones u obtener información de un agente (RPC).

Un resumen mejor y más completo de qué es Marconi y cuál es su estado actual puede conocerse en los siguientes videos.

Allan y Kurt explican rápidamente en el OpenStack Summit de Portland lo básico sobre Marconi, su arquitectura, sus modos de operación, el estado del proyecto y qué está siendo planificado para futuras implementaciones. Además, ¡nos muestran Marconi en acción!

Flavio nos cuenta qué es Marconi, que NO es Marconi, su arquitectura y detalles sobre la API v1 en el contexto de EuroPython 2013. También, hay excelentes preguntas contestadas durante el QA.

Alejandro presenta sobre por qué es necesario Marconi, la diferencia con otros servicios como Amazon SQS, Celery o RabbitMQ, la estructura de código actual, y algunas características del cliente. ¡Muy bueno!

Test drive de Marconi

En este momento Marconi está bajo desarrollo, pero es posible probar la versión actual siguiendo estos simples pasos.

  1. Instalar MongoDB
  2. Clonar el repositorio de Marconi con git clone https://github.com/stackforge/marconi.git
  3. Ir a la copia local del repositorio de Marconi cd marconi/
  4. Copiar los archivos de configuración a la carpeta ~/.marconi cp marconi/etc/*.conf-sample ~/.marconi/
  5. Renombrar dichos archivos de configuración a *.conf
    mv logging.conf-sample logging.conf
    mv marconi.conf-sample marconi.conf
  6. Encontrar la sección [drivers:storage:mongodb] en ~/.marconi/marconi.conf y modificar la URI para que apunte a tu instancia local de mongodb. Debería verse como sigue:
    [drivers:storage:mongodb]
    #uri = mongodb://db1.example.net,db2.example.net:2500/?replicaSet=test&ssl=true&w=majority
    uri = mongodb://localhost
    database = marconi
  7. (Opcional) Crear un entorno de Python aislado con virtualenv. Asegurate de que está instalado y luego ejecuta
    virtualenv marconi
    source marconi/bin/activate
  8. Ejecuta python setup.py develop para realizar una instalación usando los archivos del repositorio local
  9. Inicia el servidor de Marconi con marconi-server

Deberías obtener algo como esto…

Una vez que ya tenés el servidor de Marconi en ejecución, ya podés empezar a crear colas y a enviar mensajes para verlo en acción. Esto puede ser realizado fácilmente a mano o usando cualquier cliente REST. Yo actualmente estoy usando un plugin para Chromium, Postman.

Contribuyendo a Marconi

Como en todo proyecto de OpenStack, hay mucho por hacer y cualquier ayuda adicional es siempre bienvenida. Podés unirte a través de IRC en irc.freenode.org en #openstack-marconi y ayudar a hacer este proyecto aún mejor.

Actualmente se está dedicando mucho trabajo a la API y estamos por empezar a desarrollar el
cliente.

Echa un vistazo al código en Github, y conocé más detalles sobre qué está pasando con Marconi en Launchpad.

Seguir aprendiendo

Antes de terminar este artículo quisiera agradecer a Malini (malini), Flavio (flaper87), Kurt (kgriffs), Alejandro (cppcabrera) y Allan (amets) por su guía y por haberme ayudado a ser parte de este increíble proyecto. o/.

Más información

Miren este interesante artículo de Python For Beginners en donde se explica qué es un entorno virtual y cómo usarlos. How to use virtualenv in Python.
Pueden encontrar información adicional sobre Marconi en la wiki de Marconi.
flaper87 nos cuenta por qué se eligió a MongoDB para Marconi en Why MongoDB for Marconi?.
ladquin se puso técnica y nos enseña sobre RESTful APIs en Let’s get technical: RESTful APIs.

Leave a Comment

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>