2011-03-25 21 views
9

Tengo un conjunto limitado de recursos que quiero compartir entre procesos múltiples que ejecutar en varios servidores. Supongo que lo que necesito se podría llamar un semáforo distribuido .¿Cómo implementar un semáforo distribuido?

He encontrado un viejo Perl implementation (basado en memcached) que podría ser adaptado. No lo he investigado completamente todavía.

¿Existe una biblioteca/componente/software que ya lo haga? Un algoritmo, tal vez? ¿Qué tal la conmutación por error?

Respuesta

7

El algoritmo para esto se llama Paxos. Hay otros algoritmos, pero todos se reducen a Paxos (o son incorrectos). La implementación más popular es Apache Zookeeper. Los servidores de Zookeeper ejecutan Paxos entre ellos. Los clientes se refieren a objetos con nombre y pueden bloquearlos, etc.

+0

Yo como que deseaba que podría conseguir algo más sencillo, pero supongo que voy a aprender algo de profundizar en esto. Gracias por el enlace. – Mac

+1

[Zab ≠ Paxos] (https://cwiki.apache.org/ZOOKEEPER/zab-vs-paxos.html) – smparkes

+0

Zab ​​INSTANCEOF Vertical Paxos; Vertical Paxos Paxos INSTANCOF –

1

Para implementar un semáforo distribuido, debe definir una autoridad entre un clúster de nodo, y una vez que esté seleccionado, debe centralizar las solicitudes. Manejar las solicitudes de bloqueo es pan comido, seleccionar al líder es más complicado.

Paxos lo resolverá por usted. Acabo de actualizar la página wikipedia, porque la descripción del algoritmo era incompleta y engañosa.