Pregunta

Necesito replicar una secuencia / contador en un clúster de ocho nodos. Esto significa que cada solicitud http recibe el siguiente valor en la secuencia llamando a algo como getNextIntAndIncrement (), donde el estado de la secuencia se sincroniza en todos los servidores. Para aclarar, esto debe existir en el ámbito de aplicación / global, no en la sesión. Sé que suena como una idea horrible y indudablemente conducirá a un cuello de botella, pero este es el requisito.

Mi pregunta es ¿cuál es la mejor solución? He examinado los beans de sesión con estado, pero parecen estar diseñados para un solo cliente. Considere una secuencia de base de datos. También he visto agrupaciones de terracota; tienen una demostración de secuencia http://www.terracotta.org/web / display / orgsite / Recipe? receta = secuenciador Sin embargo, me gustaría evitar soluciones de terceros si existe una solución J2EE. Estoy usando Weblogic 8.1.

¿Fue útil?

Solución

Algunos proveedores de Java EE han distribuido soluciones de caché (p. ej., Object Grid de WebSphere) y ya ha identificado ofertas de terceros, pero no creo que exista un estándar portátil.

¿Qué tiene de malo la solución DB? Está claro que será necesario bloquear, así que ¿por qué no dejarlo en la base de datos? Supongo que si realmente necesita valores incrementales verdaderos, no se pierden valores, etc., las relaciones transaccionales con otros valores de la base de datos serán importantes, así que use la base de datos.

Si puede relajar la necesidad de valores secuenciales absolutos (es decir, permitir huecos), puede dividir conjuntos de números y, por lo tanto, reducir en gran medida la contención. Si realmente necesita valores secuenciales, sin espacios, está comprando la necesidad de cierto grado de bloqueo entre las instancias: no puede permitir un segundo '' hilo '' para obtener un nuevo número de secuencia hasta que se "comprometa" El uso del actual. Si puede permitirse perder el número de secuencia impar, entonces lo hará mucho mejor. O si puede esquemas de numeración independientes entre instancias, está en una posición mucho mejor. Por ejemplo, nombre sus servidores a, b, c ... tienen identificadores a001, a002, b001, c001, c002, etc.

Otros consejos

Creo que una secuencia de base de datos probablemente le dará el resultado más determinista, especialmente si utiliza transacciones altamente serializadas para solicitarlo.

Sin embargo, cuestionaría seriamente la validez de hacer algo como esto, pero eso es solo mis 2 centavos.

Usted tiene weblogic en las etiquetas para esta pregunta: Weblogic permite singletons de clúster. p.ej. una instancia por clúster con soporte de conmutación por error.

Esto debería cumplir su requisito:

http: // e-docs .bea.com / wls / docs100 / javadocs / weblogic / cluster / singleton / SingletonService.html

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top