Azure Storage Queue vs Azure Service Bus Queue
Introducción
Azure Storage Queues son parte de la funcionalidad de Azure storage, una interfaz simple basada en REST y con interfaz Get/Put/Peek, que ofrece un intercambio de mensajes persistente y fiable dentro y entre servicios.
Infraestructura de Azure Storage
Azure Storage ofrece la posibilidad de almacenar y recuperar grandes cantidades de datos, tales como documentos y archivos multimedia vía Azure Blobs, datos estructurados no basados en SQL vía Azure Tables o intercambio de mensajes vía Azure Queues.
Azure Service Bus Queues es parte de la infraestructura de Azure messaging que cuenta con queuing así como con publish/subscrib en un Web Service remoto y patterns de integración.
Infraestructura de Azure messaging
Azure Service Bus Queue es un sistema de mensajes para conectar aplicaciones, servicios y dispositivos, no importa donde estén esos componentes. Podemos usar un bus de servicio para conectar aplicaciones de Azure con on-premises. Podemos también conectar aplicaciones, sensores y otros dispositivos como tablets o teléfonos a una aplicación central o entre ellos.
La infraestructura de Azure messaging cuenta con cuatro mecanismos diferentes de comunicacion: Queues, Topics, Relays y Event Hubs.
Donde usar Azure Queues.
La principal razón para usar colas es para obtener conectividad entre varios componentes. Por ejemplo tenemos dos componentes de una aplicación que intercambian datos, uno de ellos está en local y el otro en la nube. Si usáramos un servicio web para intercambiar los datos tendríamos los siguientes problemas:
- Ambos componentes deberían estar online simultáneamente. Si uno de ellos no está activo la comunicación no funcionara.
- Es difícil de escalar.
En Azure Queues contaremos con un controlador de colas que conecta los dos componentes, así cuando si el receptor esta caído, el transmisor aun puede seguir insertando mensajes en la cola. Una vez que el receptor vuelva a estar online, recibirá todos los mensajes de la cola. Por la parte de la escalabilidad bastaría con añadir mas receptores y la cola se procesaría en paralelo.
Algunos inconvenientes del uso de una cola:
- Tienen ciertas cargas, aunque son mínimas.
- La cola hace de mediador, si la cola esta caída, no se comunicaran los dispositivos.
Azure Storage Queues
Azure Queue Storage pueden almacenar múltiples mensajes a los que se puede accede vía HTTP o HTTPS. Ofrece un servicio de colas altamente fiable y barato. Un mensaje de una cola tendría hasta 64 KB de tamaño y una vez fura de la cola seria visible como un mensaje para otros receptores. Una cola puede contener millones de mensajes dependiendo de la capacidad de la unidad de almacenaje.
Los usos más comunes de Azure Storage Queue son:
- Proveen de una comunicación asíncrona.
- Pueden transmitir mensajes de Azure Web a Azure Worker.
- Medir el nivel de carga.
- Permiten balancear la carga.
- Permiten desacoplamiento y el acoplamiento parcial.
Azure Service Bus Queues
Microsoft Azure Service Bus ofrece dos soluciones de mensajería, una es intermitente y la otra es brokered messaging.
Brokered messaging provee una comunicación asíncrona donde emisor y receptor no tienen que estar online a la vez. La mensajería intermitente proporciona una comunicación asíncrona, donde emisores y receptores no necesitan estar en línea al mismo tiempo. Esta infraestructura almacena los mensajes de forma fiable en una cola hasta que la parte receptora está lista para recibirlos, y el remitente no tiene que esperar una respuesta del receptor a fin de continuar su procesamiento y enviar más mensajes.
Service Bus Queue tienen las siguientes propiedades:
- Service Bus Queue soporta la comunicación interrumpida, donde el emisor y el receptor no tiene porque estar conectados al mismo tiempo.
- Las colas utilizan un sistema de gestión FIFO, (Fisrt Out), los mensajes son recibidos y procesados por el/los receptores en el orden en el que se agregan a la cola.
- Cada mensaje es recibido y procesado por un solo receptor.
Usos más comunes de un Queue Storage:
- Proporciona un comunicación entre Web y Worker Role.
- Se puede escalar la aplicación de forma sencilla.
- Proporcionan la comunicación entre los diversos componentes de la aplicación y aplicaciones de correo.
Diferencias entre Storage Queue and Service Bus Queue
Costes:
- Coste de transacción: El coste de almacenamiento con Storage Queue es de 0,0005 $ por cada 10.000 transacciones y para Service Bus Queue es de 0,05 $ por cada millón de operaciones. Por lo que Storage Queue es mas barato.
- Coste de almacenamiento: Para Storage Queue, el coste de almacenamiento es de 0,07 $ por GB de datos. En cambio para Service Bus Queue no hay ningún costo de almacenaje.
- Operaciones facturables: En Storage Queue todas las operaciones son facturables, pero en Service Bus Queue solamente es facturable el envió/recepción.
Rendimiento:
- Promedio de latencia: Azure Storage tiene una latencia media de 10 ms, mientras que Service Bus Queue tienen una latencia de media 20-25 ms.
Capacidad:
- Tamaño máximo de las colas: Azure Storage soporta hasta 200 TB en una sola cola de almacenamiento, mientras que Azure Bus Queue solo soporta 80 GB.
- Tamaño del mensaje: El tamaño máximo de un mensaje en Azure Storage es de 64 KB, mientras que un mensaje Azure Bus Queue puede llegar hasta los 256 KB incluyendo la cabecera y el cuerpo del mensaje.
- Tiempo máximo de un mensaje en la cola: Para Azure Storage los mensajes pueden estar como máximo 7 días, mientras en Service Bus Queue el tiempo es ilimitado.
- Número máximo de colas: Con Azure Storage no hay un número máximo de colas, mientras que con Azure Bus Queue soportan un máximo de 10.000 colas para un mismo nombre de espacio.
Seguridad
Para autenticarse en un Storage Queue se usan tokens de seguridad que son compartidos por otros componentes como tablas y blobs. Para accede es necesario proporcionar el nombre y el token que nos facilita Azure.
Azure Access Control Service (ACS) se usa como el mecanismo de autenticación en Service Bus Queue, pero también soporta otros mecanismos de autenticación predefinidos como Facebook, DropBox… o los podemos personalizar nosotros. ACS es un servicio de Azure, que proporciona una forma sencilla de autenticación, permitiendo a los usuarios acceder a sus aplicaciones y servicios web sin tener que agregar una lógica compleja en el código.
Otras diferencias
Cuando usar las colas de mensajes.
Debemos usar Azure Storage Queues cuando:
- Si nuestra aplicación requiere de mas de 80GB de almacenamiento en una cola, sino podemos utilizar Azure Service Bus Queue.
- Si nuestros mensajes van a permanecer menos de 7 días en la cola de almacenaje. En cambio en Azure Service Bus Queue permanecen un número de días ilimitado.
Aspectos importantes en el uso de Azure Storage Queues:
- Escalabilidad.
Una sola cola puede procesar aproximadamente 2.000 mensajes, de 1 KB de tamaño, por segundo. Si necesitamos procesar mas mensajes se debe utilizar mas colas de mensajes, permitiendo a la aplicación trabajar con múltiples colas mejorando el rendimiento. - Detección automática del Proxy.
Por defecto, en Azure está activado, por lo que las conexiones se ralentizan en cada mensaje enviado. Se puede desactivar desde el portal de Azure. - Limitar el tamaño del mensaje.
Solo debemos de enviar la información que necesita el receptor en un mensaje, ya que el rendimiento y la escalabilidad de la cola disminuye a medida que aumenta el tamaño del mensaje. - Recuperar mensajes por lotes.
Para mejorar el rendimiento de nuestra aplicación, se pueden recuperar hasta 32 mensajes en una sola operación. - Aumentar instancias Web o Worker role.
Para procesar un aumento de mensajes en un determinado momento, se pueden añadir o eliminar instancias Web o Worker role, que va a mejorar el rendimiento. - Uso del modo asíncrono.
Ayuda a evitar los cuellos de botella de rendimiento y mejora la capacidad de respuesta global de la aplicación. - Uso de Blobs para los mensajes de gran tamaño.
Utilice Blobs para almacenar mensajes de gran tamaño e imágenes, almacenado la referencia en el mensaje. De esta forma se optimizan los costos de transacción y de almacenamiento.
Conclusiones:
Con la realización de este post se pretende que el usuario tenga una visión y conocimientos mas amplios a la hora de tomar una decisión al utilizar Queue en Azure. La decisión de usar Azure Stotage o Service Bus Queue dependen de las necesidades de nuestra aplicación y de su arquitectura. Si la aplicación ya emplea servicios de Azure, es posible que nos decantemos por Azure Storage, especialmente si queremos una comunicación básica entre los servicios o necesita colas con un tamaño superior a 80 GB.
Dado que Service Bus Queue ofrecen una serie de características mas avanzadas, tales como sesiones, transacciones, detección de mensajes duplicados…. Puede elegir esta opción si estamos construyendo una aplicación hibrida o si la aplicación requiere algunas de estas características.