2011-09-05 10 views
7

Estoy tratando de escribir una herramienta que requiere el conocimiento del estado de otras máquinas en un clúster (LAN local). Esto es para un sistema de conmutación por error de red/alta disponibilidad similar a VRRP y corosync/openais, pero deseo contener más información (como características de velocidad/rendimiento casi en tiempo real) para que los dispositivos puedan tomar decisiones más inteligentes. Esto significa usar un protocolo más complicado que un mecanismo predetermi- nado basado en el peso: al permitir que todas las máquinas en clúster vean el estado del otro, pueden acordar comunalmente cuál es el más adecuado para ser el dispositivo maestro.Estado de distribución en muchas máquinas

De mis búsquedas, no he encontrado ninguna biblioteca (C, C++ o JavaME) que ofrezca un mecanismo de estado distribuido. Idealmente, estoy buscando algo que difunda/multidifunde cada máquina individual de forma periódica para que las máquinas participantes puedan construir una tabla de estado global y todos puedan ver quién debería ser el maestro. El estado en este caso es pares arbitrarios de clave/valor.

Prefiero no reinventar las ruedas, así que tengo curiosidad por saber si alguien aquí puede indicarme la dirección correcta.

+0

¿Ha comprobado Boost MPI. Creo que es para computación distribuida. Pero no estoy seguro de si te ayudará o no. – Arunmu

+4

Parece un caso clásico del teorema CAP (consistencia, disponibilidad y partición) de Brewer. Leer sobre eso debería proporcionarle una mejor comprensión de los problemas reales. – MSalters

+0

@MSalters - ¿No estás seguro de lo que quieres decir? Entiendo que es imposible garantizar que cada nodo tenga un conocimiento del 100% del estado de todos los demás participantes, ya que ocurrirán interrupciones. Se producirán horizontes divididos, etc. Lo que estoy buscando es un buen marco genérico para acumular y compartir el estado. Si observa OSPF y otros protocolos de enrutamiento, verá que esta técnica se usa bien en áreas especializadas. – Mike

Respuesta

1

No estoy seguro si hay alguna aplicación para su propósito o no. Pero sé que puede escribir un programa simple con la biblioteca MPI y transmitir cualquier información que desee.

todos los clientes pueden enviar su estado al nodo raíz, y el nodo raíz luego transmite el mensaje.

funciones que necesita para esto son:

MPI_Bcast 
MPI_Send 
MPI_Recv 

hay un montón de tutorial de C++/MPI en la red, sólo Google él!

2

Si yo fuera usted investigaría memcached (memcached.org) o una de las variantes de nosql.

+0

yup - simple pero verdadero – sehe

+0

+1 Es una solución limpia y simple, que me parece atractiva. Por otro lado, todos los artilugios de infraestructura de otros sistemas deben construirse a mano. – Iterator

2

Parece que Apache ZooKeeper podría ser una buena combinación. Se distribuye, almacén jerárquico de valores-clave. Para citar a su Overview page:

ZooKeeper fue diseñado para almacenar datos de coordinación: la información de estado, configuración, información de ubicación, etc.

He aquí un ejemplo de un simple Leader Election recipie, aunque requeriría la adaptación para determinar un líder por un criterio ponderado.

Cuestiones relacionadas