2008-08-20 21 views
20

¿Alguien sabe de un servidor/plataforma de colas de código abierto bueno y confiable?Buena plataforma Open Source Queuing?

Estoy trabajando en un proyecto que necesitamos para procesar millones de elementos de una cola por día. Mi desafío es que la cola no es FIFO, lo que significa que los elementos nuevos se priorizan y se pueden insertar en algún lugar en el medio de la cola. Además, para procesar estos elementos, utilizaremos una plataforma de distribución de servidores paralelos, por lo que es necesario acceder a la cola desde muchos servidores.

Respuesta

5

No es de código abierto, pero bastante abierto: Amazon's Queue service. Muy confiable, muy fácil de usar.

Código abierto Ruby: Beanstalkd.

JBoss tiene Java-Messaging-Service compatible. Vea el message bean page.

Apache tiene un producto JMS; todos los productos Apache son de código abierto.

+1

Beanstalkd es un daemon escrito en C. Tiene bibliotecas cliente para varios idiomas Está lejos de ser una solución solo de rubí. –

3

Me gusta la idea de Gaius de Amazonas SQS sin embargo, tiene un retraso de grande tiempo entre los mensajes. Algunos benchmarks muestran 15-30 segundos de un mensaje, otros son tan lentos como un mensaje minimo. Entonces, si la velocidad es un problema, es posible que desee ejecutar su propio MOM.

Recomendaría ActiveMQ de Apache. Hemos hecho benchmarks y sus velocidades están muy cerca de las conexiones de socket. Sin embargo, nunca lo han usado en una aplicación de gran escala de producción.

+0

Al leer los puntos de referencia a los que se vinculó ([se trasladó aquí] (http://devver.wordpress.com/2008/06/18/speed-with-messaging-matters/)) veo tiempos de 0,4 segundos desde afuera AWS y 0.04 segundos desde EC2. – chmac

7

ActiveMQ es un producto bastante bueno: fácil de configurar, fácil de implementar, fácil de usar. Clusterizable, muchos protocolos compatibles, etc. Estamos intentándolo en producción, parece confiable (con sus propios problemas, pero no tantos)

He intentado con JBoss Messaging, pero me pareció mucho más difícil de usar, y menos maduros (es una refactorización de JBoss MQ y no es bastante estable y completa ...)

[Editar] lo sentimos, no he leído su pregunta con suficiente atención ... comprobé la especificación JMS: lo hace implementar un orden de prioridad de mensaje, pero solo hay 10 niveles de prioridad en JMS, y los implementadores no están obligados a respetarlos (no revisé lo que AMQ hace) Pero la administración de prioridad también se puede lograr usando diferentes colas ... [/ Editar]

+0

ActiveMQ 5.4.2 admite prioridades de mensajes. –

5

Además de ActiveMQ que debería funcionar para sus demandas, también puede consultar RabbitMQ o OpenAMQ.

-2

Escriba el suyo, usando una tabla mysql indexada en el tiempo y la prioridad de inserción. Aunque eso no da pop atómico. Una pequeña magia orientada a las transacciones para obtener pop atómico: un campo de bandera. Actualice el elemento superior con un campo de bandera nulo para tener el identificador único de su cliente, confirmar, seleccionar un elemento con un identificador único, luego eliminarlo cuando haya terminado con el elemento. Ahora no solo tiene un sistema de colas sino también un panel de administración porque puede ver quién está trabajando en qué seleccionando todos los elementos de la tabla de colas con indicadores que no sean nulos.

+0

Hay algo de mérito en esto. Si su servicio ya depende de una base de datos central y si los requisitos de rendimiento no son muy altos. –

15

Como @davidnicol menciona que puede usar una base de datos; aunque la desventaja con una base de datos es que hace un gran equilibrio de carga en muchos hilos/procesos es algo difícil; a menudo se obtiene un hilo que bloquea el encabezado de la cola haciendo que el despacho tenga un solo subproceso.

Uno de los usos principales de una cola de mensajes suele ser obtener un equilibrador de carga confiable: puede ejecutar tantos como Competing Consumers como desee desde la misma cola para brindarle una escalabilidad masiva.

Si va la ruta de la cola de mensajes; entonces Apache ActiveMQ es la implementación de código abierto más popular y recomiendo comenzar con eso ya que tiene el biggest and most active community (mi métrica favorita personal para elegir entre proyectos de código abierto similares).

Hay varias maneras de implement priority queues with ActiveMQ - la desventaja principal es que puede hacer frente a la latencia de la Resequencer pattern introduces o está simplemente usando selectores y diferentes piscinas proceso/hilo de los consumidores para diferentes rangos de prioridades es una solución mejor latencia, baja.

Si bien la implementación de selector no es la implementación de colas de prioridad más pura, tiende a funcionar mejor en la práctica, ya que evita esperar a que aparezcan mensajes de mayor prioridad; Además, evita los mensajes de baja prioridad que tardan mucho tiempo en procesar sus procesadores.

+0

Gracias. Aprendí sobre el patrón Resequencer de tu respuesta. –

2

BTW un aspecto diferente de su pregunta es qué API usar para hablar con la tecnología que elija.

Mi recomendación con cualquier middleware o infraestructura es intentar hide the middleware from your business logic as this article describes. Mantener la lógica de su negocio separada del middleware le permite cambiar fácilmente la implementación del middleware, ya que no existe realmente ninguna tecnología de middleware para todos, todos tienen sus propios pros y contras. Además, los requisitos cambian, especialmente en el caso de carga, volumen, rendimiento, sincronía y latencia, por lo que a veces es necesario cambiar la tecnología de middleware durante la vida útil de un proyecto