Singleton en Cluster

138 views
Skip to first unread message

Juan Carlos Martin

unread,
Jun 14, 2013, 7:56:02 PM6/14/13
to jav...@googlegroups.com

Hola a todos.

Tengo que diseñar un proceso java que se ejecuta en un cluster de weblogic. El asunto es que debo controlar que dicho proceso no se ejecute dos veces al mismo tiempo independiente de la máquina en la que se esté. Ejecutando.
He hablado con compañeros y me han comentado que el cluster no interpreta el patrón singleton y me han dado dos opciones.
1. Controlarlo por bbdd
2. Generando un fichero serializado en un disco NFS.

Ambas opciones son sencillas de implementar pero el problema es que el proceso debe ejecutarse en cuestión de milisegundos y ambas soluciones son relativamente lentas.

Conocéis la forma de implementar un patrón singleton que un cluster de weblogic pueda entender?

Se os ocurre algún otro método más eficiente que los que os he citado?

Gracias y saludos.

pablo.a....@gmail.com

unread,
Jun 14, 2013, 8:03:06 PM6/14/13
to jav...@googlegroups.com

Nosotros lo hacemos con hazelcast, que provee locks distribuidos. Los locks implementan la interface lock de java, así que podes usar el método lock (bloqueante) o tryLock (no bloqueante).

En mi opinión es mejor que las alternativas que mencionaste. Tene en cuenta que esos locks no sirven a nivel JVM, si dos threads llaman al método lock no los va a bloquear (no es problema si usas un singleton).

Saludos

Saludos

--
www.JavaSOS.com
---
Has recibido este mensaje porque estás suscrito al grupo "JavaSOS" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a javasos+u...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/javasos.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
 
 

cot...@gmail.com

unread,
Jun 14, 2013, 8:08:51 PM6/14/13
to jav...@googlegroups.com
Hola!

Yo lo hice compartiendo un enumerado en los los nodos, y
consultando/actualizando a través de mensajes (tcp).

Me parece que la opción de bbdd es buena también, el problema de
hacerlo por mensajes es que le queda a toda la aplicación el manejo de
concurrencia.

Saludos,

Bernardo

unread,
Jun 15, 2013, 8:36:13 AM6/15/13
to jav...@googlegroups.com
Creo que Apache Zookeeper sirve para el problema que tenes.
Saludos.

Juan Carlos Martin

unread,
Jul 18, 2013, 4:01:09 PM7/18/13
to jav...@googlegroups.com
Gracias a todos vuestras respuestas. Al final me he decidido a utilizar el servicio de migración de singleton que provee weblogic. Básicamen configuras una clase (singleton por supuesto) para ser ejecutada en un único nodo del cluster y en caso de error o fallo en ese nodo migra dicha clase para que se ejecute en otro nodo. Es muy util a la hora de realizar pases a producción dado que puedes reiniciar nodos sin miedo a detener el servicio singleton.

Lo dicho, gracias por vuestras respuestas.
Saludos.


El 15 de junio de 2013 14:36, Bernardo <bfa...@gmail.com> escribió:
Creo que Apache Zookeeper sirve para el problema que tenes.
Saludos.

--
www.JavaSOS.com
---
Has recibido este mensaje porque estás suscrito al grupo "JavaSOS" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a javasos+u...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/javasos.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.





--
Un cordial saludo,
Juan Carlos Martín
«j.mart...@gmail.com»
Reply all
Reply to author
Forward
0 new messages