7

Escenario:hace múltiples trabajador Azure función de votación misma cola provoca Dead Lock o mensaje veneno

si he escindir múltiples roles de trabajo o uno de rol de trabajo con múltiples hilos, que los sondeos de nuevos mensajes en la cola de Azure.

¿Podría alguien confirmar si este es el enfoque de diseño correcto? La razón por la que me gustaría tener muchos roles de trabajador es acelerar el PROCESSJOB. Nuestra aplicación debe ser casi en tiempo real, es decir, tan pronto como haya mensajes que debemos obtener, aplique reglas comerciales complejas y comprométase con AZURE DB. Esperamos 11,000 mensajes por 3min.

Gracias.

Respuesta

16

Puede tener tantos lectores de cola como desee. Es muy común escalar las instancias de rol de trabajador, ya que todas pueden leer desde la misma cola, lo que le proporciona un rendimiento de trabajo mucho mayor.

Cuando lee un mensaje de cola, se marca como "invisible" durante un período de tiempo, para evitar que otros lean y hagan el mismo trabajo. El propietario del mensaje debe eliminarlo antes de que caduque el período de tiempo; de lo contrario, el mensaje volverá a estar visible y se lanzará una excepción cuando el lector original intente eliminarlo. Esto significa que sus operaciones deben ser idempotentes.

No hay un manejo directo de los mensajes envenenados, pero es fácil de implementar, ya que cada mensaje tiene un conteo de descarte. Simplemente verifíquelo y elimine los mensajes de envenenamiento después de leerlo de 3 a 4 veces. También puede ajustar dinámicamente el período de tiempo de espera en función del recuento de dequeue, ya que es posible que el procesamiento falle debido a una ventana de tiempo demasiado corta.

Aquí está el MSDN documentation para DequeueCount.

EDITAR: En cuanto al procesamiento de 11,000 mensajes en 3 minutos: el objetivo de escalabilidad para colas es 2,000 TPS, o hasta 360,000 transacciones en 3 minutos (mucho más allá del requisito de mensaje de 11,000 que tiene). Puede acelerar aún más las cosas combinando mensajes en un solo mensaje de cola, así como leer varios mensajes a la vez, lo que también reducirá el número de transacciones. También puede consultar la propiedad ApproximateMessageCount de una cola para ver si su cola está realizando una copia de seguridad (y luego escalar a instancias adicionales para ayudar a consumir los artículos en cola).

+0

Gracias @David Makogon para una respuesta detallada. Lo aprecio. –

Cuestiones relacionadas