2012-08-29 37 views
12

Estoy tratando de comprender cómo puedo hacer que el Tema de bus de servicio de Azure sea escalable para manejar> 10,000 solicitudes/segundo de más de 50 clientes diferentes. Encontré este artículo en Microsoft - http://msdn.microsoft.com/en-us/library/windowsazure/hh528527.aspx. Esto proporciona una gran cantidad de datos útiles para escalar el bus de servicio azul como la creación de fábricas de mensajes múltiples, el envío y la recepción de forma asíncrona, la realización de envío/recepción por lotes.Azure Service Bus Escalabilidad

Pero todas estas entradas son desde la perspectiva del editor y del cliente suscriptor. ¿Qué pasa si el nodo que ejecuta el tema no puede manejar la gran cantidad de transacciones? ¿Cómo controlo eso? ¿Cómo ejecuto el Tema en múltiples nodos? Cualquier comentario sobre eso sería útil.

También se pregunta si alguien ha hecho ninguna prueba de capacidad con Tema/cola y estoy ansioso por ver los resultados ...

Gracias, Prasanna

+0

¿Qué quiere decir con "ejecutar el tema en varios nodos"? –

Respuesta

12

Si necesita 10K o 100K o 1M o más solicitudes por segundo, eche un vistazo a lo que se está haciendo en la carretera. Más tráfico, más carriles.

Puede obtener tasas de flujo arbitrarias efectivas fuera de Service Bus al dividir su tráfico en varias entidades. Service Bus da una serie de garantías sobre la confiabilidad, p. que no perdamos mensajes una vez que los hayamos tomado de usted o que asignemos números secuenciales sin espacios, y que tengan un impacto en el rendimiento de las entidades individuales como un solo Tema. Eso es exactamente como un carril de la autopista que solo es capaz de lidiar con X autos/hora. Haz más carriles.

+0

Gracias Clemens. Tenía una pregunta sobre las entidades. El artículo que había incluido en mi pregunta original también se refería a las entidades. Cuando decimos entidades múltiples, nos referimos a entidades como temas o colas. Entonces, ¿sugiere que, en lugar de publicar los mensajes en un solo tema/cola, la sugerencia sea publicarlos en múltiples temas/colas? Tenía una pregunta más. ¿Sabemos que Azure divide los temas/colas? ¿Tendríamos un tema ejecutándose en una sola máquina? ¿En qué etapa decide Azure hacer balanceo de carga para incluir <1 nodo por 10s de temas que pueda tener? – phebbar

+0

Cuando digo entidad me refiero a una cola o un tema. Cada cola y/o tema tiene un registro de almacenamiento y un administrador interno que "posee" la entidad y toma decisiones sobre pedido y también gestiona la numeración de secuencias. El administrador se ejecuta en un nodo en cualquier momento dado, pero la asociación puede cambiar a otro nodo en cualquier momento. Haga 10 colas como "myQueue-1" a "myQueue-10" y elija una aleatoria cuando envíe. –

+0

Gracias a Clemens por dar claridad a Entity. Un par de razones por las que no me gusta la opción sugerida (aunque esa podría ser la forma de escalar) => 1. Cuando empiece, solo recibiría 1000 solicitudes por segundo y no necesitaría 10s de Colas. Cuando la base de clientes crece, pueden ser incluso 10 colas que no son suficientes. O tendría demasiadas colas o podría tener colas insuficientes. 2. Ya tengo 10 de temas únicos para pasar diferentes tipos de mensajes. Si tengo 10 copias de cada uno de estos temas, entonces la cantidad de temas crece. ¿No estoy seguro si eso tiene algún otro efecto secundario? – phebbar

2

El bus de servicio tiene sus limitaciones "de la capacidad y Cuotas ", consulte este artículo para obtener una descripción general muy buena de estos: http://msdn.microsoft.com/en-us/library/windowsazure/hh767287.aspx

Le sugiero que se comunique con su especialista local de MSFT si tiene un caso de uso que superará los límites de Azure Service Bus, MSFT tiene equipos dedicados en Redmond (alrededor del mundo) que puede ayudarte diseñar y ampliar estos límites a escala masiva, este es el CAT de Azure de Windows (Equipo Asesor del Cliente). Su objetivo es resolver los problemas del cliente en el mundo real y parece que puede tener uno ...

Debe realizar pruebas de rendimiento y carga para llegar a todas las respuestas a sus preguntas anteriores en función de su situación específica.

El equipo CAT Azure tienen una gran cantidad de métricas de capacidad y pruebas de carga con el servicio de autobuses (Azure en general), estos no siempre están disponibles al público lo que de nuevo llegar a saber si se puede ...

+0

Muchas gracias. Esto es muy útil – phebbar

+0

¡O mejor aún, obtienes a Clemens para que responda! – user728584

1

Si Puede manejar tantas solicitudes que desea asegurarse de recibir los mensajes de tal forma que no alcance el tamaño máximo del tema. Puede usar varias instancias de una función de trabajador en Azure para escuchar suscripciones específicas, de modo que pueda procesar mensajes más rápido sin acercarse al tamaño máximo.

+0

Gracias. Entiendo sobre este concepto. Mi pregunta era específicamente sobre el ServiceBus mismo: ¿cómo se ampliaría si hay miles de solicitudes simultáneas? – phebbar

7

Desde estas respuestas, Microsoft ha lanzado una tonelada de nuevas capacidades.

  1. Azure Auto-Scale puede supervisar los mensajes en una cola (o carga de la CPU) y iniciar o detener las instancias de mantener ese objetivo.
  2. Bus de servicio introducido Partitioned Queue (& temas). Esto le permite enviar mensajes a través de múltiples colas, pero se ven como una sola cola para su API. Incrementando drásticamente el rendimiento de una cola.

Antes de hacerlo me gustaría recomendar que tratan: -

  • asíncrono & por lotes escribe en la cola.
  • Cambie el parámetro Prefetch en las lecturas.
  • Consulte también Receive.OnMessage() para asegurarse de obtener los mensajes en milisegundos de los que están disponibles.

Esto mejorará su rendimiento de ~ 5 mensajes/seg a muchos 100 o 1,000 por segundo.

+0

¿Son los ~ 5 mensajes/segundo el máximo que estaba viendo para las colas no particionadas? ¿En .NET y NodeJS? –

Cuestiones relacionadas