我需要在八节点集群中复制一个序列/计数器。这意味着每个http请求通过调用类似getNextIntAndIncrement()的方式接收序列中的下一个值,其中序列状态在所有服务器之间同步。为了澄清,这必须存在于应用程序/全局范围,而不是会话。我知道这听起来像一个可怕的想法,无疑会导致瓶颈,但这是要求。

我的问题是什么是最好的解决方案?我查看了有状态会话bean,但它们似乎只针对一个客户端。我考虑过数据库序列。我也看过兵马俑聚集;他们有序列演示 http://www.terracotta.org/web / display / orgsite / Recipe?recipe = sequencer 但是,如果存在J2EE解决方案,我想避免使用第三方解决方案。我正在使用Weblogic 8.1。

有帮助吗?

解决方案

一些Java EE供应商已经发布了缓存解决方案(例如WebSphere的Object Grid),并且您已经识别了第三方产品,但我认为不存在便携式标准。

数据库解决方案有什么问题?显然需要锁定,所以为什么不留给DB。我的猜测是,如果你真的需要真正的增量值,没有遗漏的值等,那么与其他数据库值的事务关系将很重要,所以使用数据库。

如果您可以放松对绝对后续值的需求(即允许间隙),那么您可以分组数字,从而大大减少争用。如果你真的需要顺序值,没有间隙,那么你就需要在实例之间进行某种程度的锁定 - 你不能允许第二个“线程”。获取新的序列号,直到你“提交”为止。使用当前的一个。如果你能承受丢失奇数序列号,那么你做得更好。或者,如果您可以在实例之间使用独立的编号方案,那么您处于更好的位置。例如,你服务器a,b,c ...的名称有ids a001,a002,b001,c001,c002等。

其他提示

我认为数据库序列可能会给您最确定的结果,特别是如果您使用高度序列化的事务来请求它。

但是,我会严肃质疑做这样的事情的有效性,但这只是我的2美分。

此问题的标签中有weblogic - Weblogic允许群集单例。例如每个群集有一个具有故障转移支持的实例。

这应符合您的要求:

http:// e-docs .bea.com / WLS / docs100 / javadocs中/的WebLogic /簇/单/ SingletonService.html

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top