12

Saludos,ZooKeeper y RabbitMQ/Qpid juntos: ¿excesivo o una buena combinación?

Estoy evaluando algunos componentes para un sistema distribuido de centros de datos múltiples. Vamos a utilizar colas de mensajes (a través de RabbitMQ o Qpid) para que los agentes puedan realizar solicitudes asincrónicas a otros agentes sin preocuparse por el direccionamiento, el enrutamiento, el equilibrio de carga o la retransmisión.

En muchos casos, los agentes interactuarán con componentes que no fueron diseñados para un acceso altamente simultáneo, por lo que se necesitará la coordinación de bloqueo y agentes cruzados para evitar condiciones de carrera. Además, nos gustaría que el sistema responda automáticamente a las fallas del agente o del centro de datos.

Teniendo en cuenta los casos de uso anteriores, ZooKeeper parece que podría ser una buena opción. Pero me pregunto si tratar de usar tanto ZK como la cola de mensajes es excesivo. Parece que lo que Zookeeper hace podría ser logrado por mi propio administrador de clusters usando la mensajería AMQP, pero eso sería difícil de conseguir realmente correcto. Por otro lado, he visto algunos ejemplos en los que ZooKeeper se utilizó para implementar cola de mensajes, pero creo que RabbitMQ/Qpid son más naturales para eso.

¿Alguien ha usado una combinación como esta?

Gracias de antemano,

-Chris

+0

Hola Chris, ¿has encontrado la respuesta a esta pregunta? ¿Con qué terminaste yendo? Gracias, Ilya – Ilya

+0

Estos son probablemente algunos de los ejemplos a los que se refiere, agregando los enlaces aquí para otros usuarios: http: //www.cloudera.com/blog/2009/05/building-a-distributed-concurrent-queue-with-apache-zookeeper/y http://zookeeper-user.578899.n2.nabble.com/Task-Job-distribution-using-ZooKeeper -td6096815.html – dgorissen

+0

Terminamos yendo con Qpid para mensajería y hemos postergado la implementación de un servicio de coordinación distribuida como ZooKeeper. Sigo siendo un gran admirador de ZK, pero nuestro rendimiento no es lo suficientemente alto como para justificar la complejidad adicional. Estamos viendo algún mecanismo de bloqueo distribuido dentro del centro de datos, probablemente respaldado por MySQL o Redis. Más adelante, podemos graduarnos en ZooKeeper. –

Respuesta

4

Entrando en esta tarde, pero tal vez será de alguna utilidad. La consideración principal deben ser las características de rendimiento de su sistema. ZooKeeper, como dijiste, es más que capaz de implementar un sistema de distribución de tareas usando una cola distribuida, pero zk actualmente está más optimizado para las lecturas que para las escrituras (esto solo entra en juego en los 1000 de rango de operaciones por segundo) . Si sus necesidades de rendimiento son menores que esto, entonces usar solo zk para implementar su sistema reduciría el número de componentes de tiempo de ejecución y lo haría más simple. Por supuesto, siempre debe ejecutar sus pruebas de rendimiento antes de decidir.

La coordinación distribuida es realmente difícil de conseguir, por lo que definitivamente recomendaría utilizar zookeeper para eso y no hacer el suyo propio.

0

No estoy seguro de lo que es exactamente ZooKeeper, pero supongo que el uso de un componente de Apache (si lo hace encajar bien sus necesidades) es antes de la gestión de tales cosas como sincronización distribuida y servicios grupales por su cuenta. Por supuesto, puede contratar un equipo de desarrolladores especialmente para ese fin, pero eso no le garantiza una mejor implementación.

Supongo que de todos modos se implementaría como un componente separado, porque de otro modo podría traer mucha complejidad y desacelerar el flujo de trabajo; entonces la preferencia de ZooKeeper o algo similar es algo obvio (para mí).

Y seguramente, a menos que esté en la fase de optimización global del flujo de trabajo de su proyecto, supongo que sería mejor usar RabbitMQ o similar (incluso destacaría que las implementaciones de cuz (especialmente comerciales) del AMQP serían más confiable que todo lo que se te ocurre).

Así que iría por ambos, eligiendo cuidadosamente los productos de terceros adecuados, pero usando tantos como sea necesario. Y esa es solo mi opinión; gracias por leer :)