microsoft - porta azure
Elegir entre.NET Service Bus Queues vs Azure Queue Service (5)
Colas de almacenamiento frente a bus de servicio
Aquí hay un desglose de algunas de las diferentes consideraciones que tuve al pensar en esta pregunta.
Disponibilidad
Desde la interrupción del almacenamiento en noviembre pasado, Azure prometió que nunca implementarían el código en todas las regiones de una vez más: lo incorporaron al sistema para hacerlo imposible. https://azure.microsoft.com/en-us/blog/final-root-cause-analysis-and-improvement-areas-nov-18-azure-storage-service-interruption/
Esto es lo que dice msdn sobre la disponibilidad:
Si ya está usando Blobs o Tablas de almacenamiento de Azure y comienza a usar colas, tiene garantizada una disponibilidad del 99.9%. Si usa Blobs o Tables con colas de Service Bus, tendrá una menor disponibilidad.
Azure Queues está diseñado para admitir el desacoplamiento de los componentes de la aplicación para aumentar la escalabilidad y la tolerancia ante fallas.
Desarrollo
Personalmente, me siento cómodo con las API de almacenamiento y ya tengo la necesidad de su almacenamiento de blobs en otras áreas de la mayoría de las aplicaciones. Las colas de almacenamiento usan el mismo SDK que los blobs de almacenamiento. Azure Queues proporciona un modelo de programación uniforme y uniforme en colas, tablas y BLOB
Costo
El modo de recepción y eliminación admitido por Service Bus proporciona la capacidad de reducir el recuento de la operación de mensajería (y el costo asociado) a cambio de una garantía de entrega reducida.
Parece que hay algunas herramientas en torno al control de costos para el bus de servicio que podría aprovechar si tuviera que comenzar a mantener un presupuesto para ejecutar su aplicación: intenté reducir los posibles costos de la cola de almacenamiento debajo de :). Se trata de menos de cien dólares al mes en más de 40,000 colas por hora para GRS. Agrupado con el resto de nuestros costos de almacenamiento, no veo beneficio de enfocarse en reducir los costos aquí. (El ancho de banda es el mismo para ambos y se cancela al comparar)
Precios de almacenamiento
Obtienes colas y operaciones gratuitas ilimitadas: pagas por el espacio
- asumir un tamaño de mensaje de 30K como promedio
- asumir 1000K en un MB no 1024
- suponga que no alcanzará el precio graduado por encima de 1TB
30K / 1 mensaje * 1 TB / 1000000000K * $ .095 / 1 GB * 1000GB / 1 TB = $ 0.00000285 / mensaje para la primera TB de uso
1 mensaje / ~ 30K * 1000000000K / 1 TB = 33333333 mensajes en un TB
33333333 mensajes * $ 0.00000285 / mensaje = ~ $ 95 dólares por la primera tuberculosis
distribuidos a lo largo de un mes, podemos hacer como 40,000 mensajes por hora con esa primera TB
Precios del servicio de autobús
- 10 dólares por mes precio base
- pagar por operación (cualquier llamada api es una operación) - agregar una cola / recibir una cola / monitorear la cola / etc.
- obtienes 12.5 millones de operaciones gratuitas por mes
- pagar por millón de operaciones después de eso
Es difícil estimar el uso aquí, pero 100 millones de operaciones cuestan 80 dólares al mes
Batch Receive
El almacenamiento puede generar hasta un máximo de 32 mensajes al especificar el recuento de mensajes cuando se recuperan mensajes, mientras que el Bus de servicio permite que un cliente de cola multiplique varios mensajes en una sola operación de envío.
Por lo tanto, el almacenamiento se recibe por lotes mientras que el bus de servicio se envía por lotes.
Supervisión
Azure Queues le permite obtener un registro detallado de todas las transacciones ejecutadas en la cola, así como también métricas agregadas. Este tipo de soporte no sale de la caja con Service Bus, pero probablemente podría encontrar una solución preconstruida en algún lugar.
Reenvío
Service Bus tiene una función de reenvío automático que hace que falten colas de almacenamiento.
El reenvío automático permite miles de colas para reenviar automáticamente sus mensajes a una única cola, desde la cual la aplicación receptora consume el mensaje. Puede usar este mecanismo para lograr seguridad, controlar el flujo y aislar el almacenamiento entre cada editor de mensajes.
Duplicados
La funcionalidad de detección de duplicación admitida por las colas de Service Bus elimina automáticamente los mensajes duplicados enviados a una cola o tema, en función del valor de la propiedad MessageID.
Los mensajes de la cola de almacenamiento pueden duplicarse sin previo aviso.
Metadata
Service Bus le proporciona 2 partes de un encabezado + cuerpo de mensaje. Esta es una característica muy útil para una infraestructura implementada globalmente. Te permite decorar tus mensajes con cosas como el nombre de la región y el ID de la instancia. Los mensajes de cola son cadenas simples. Por otro lado, las colas de almacenamiento de Azure proporcionan compatibilidad con los atributos arbitrarios que se pueden aplicar a la descripción de la cola, en forma de pares nombre / valor. Para decorar el mensaje en Service Bus y decorar la cola con colas de almacenamiento
Garantía de entrega
Service Bus ofrece la mayoría de las veces y al menos una vez, mientras que las colas solo ofrecen una entrega al menos una vez. Esto podría limitar nuestra capacidad de usar colas si los suscriptores concurrentes alguna vez son un problema.
Actuación
Las colas de almacenamiento de Azure ofrecen una latencia de 10 ms (dentro de un centro de datos) mientras que la latencia de Service Bus 20-25 ms. El bus de servicio ofrece un sondeo largo que sería incluso mejor que 10 ms si lo necesita.
Seguridad
Las colas de almacenamiento usan la clave compartida primaria / secundaria, mientras que el bus de servicio proporciona RBAC a través de Active Directory con funciones de Remitente / Receptor / Administrador.
referencias
Solo una pregunta rápida sobre una aplicación Azure. Si tengo una cantidad de funciones de Web y Trabajador que necesitan comunicarse, la documentación dice que debe usar el servicio Azure Queue.
Sin embargo, acabo de leer que el nuevo .NET Service Bus ahora también ofrece colas. Estos parecen ser más potentes, ya que parecen ofrecer una API mucho más detallada. Mientras que .NSB parece más interesante, tiene un par de problemas que me hacen recelar de usarlo en aplicaciones distribuidas. (por ejemplo, Expiración de cola ... si no puedo garantizar que una cola se renueve a tiempo, puedo perderlo todo).
¿Alguien ha tenido alguna experiencia en el uso de cualquiera de estas dos tecnologías y podría dar algún consejo sobre cuándo elegir una sobre la otra?
Sospecho que si bien el bus de servicio parece más poderoso, como mi caso de uso realmente solo permite que las funciones de Web / Trabajador se comuniquen entre sí, el Servicio de cola de Azure es lo que busco. Pero realmente estoy buscando confirmación de eso antes de programarme en una esquina :-)
Gracias por adelantado.
ACTUALIZAR
He leído acerca de los dos sistemas durante el receso. Parece que el bus de servicio .NET está diseñado más específicamente para integrar sistemas en lugar de proporcionar un sistema de mensajería confiable y de uso general. Las Colas Azure se distribuyen y son tan confiables y escalables de forma que las colas .NSB no son, por lo tanto, más adecuadas para el código alojado dentro de Azure.
Gracias por las respuestas.
Aquí hay un artículo completo de MSDN que compara ambos servicios: colas de Windows Azure y colas de bus de servicio de Windows Azure: comparadas y contrastadas .
Muy interesante !
Las colas de Azure Coinciden porque su caso de uso sigue siendo básico con la interfaz simple Get / Put / Peek basada en REST.
La documentación se ha actualizado recientemente (21/05/2015) y detalla con precisión cuándo se utiliza una u otra, y las características comunes (soporte de transacción, tamaño de la cola y mensaje, Time to Live, ...):
Le recomendaría que se quede con Azure Queues para comunicarse entre la web y los roles de los trabajadores. El uso de colas es la forma oficial y autorizada de comunicación entre los procesos de Azure y sinceramente dudo que se programe en una esquina. Service Bus (AppFabric) tiene una sobrecarga más alta y, aunque es realmente bueno para hablar con aplicaciones externas, puede no ser óptimo para mensajes rápidos y simples dentro de su aplicación Azure.
Tal como lo entiendo, el Bus de Servicio (como estaba) ha tenido colas por un tiempo, pero no se garantiza que entreguen el mensaje - ¡buena oportunidad!