集群Jboss服务器 - 维护唯一计数

时间:2011-07-21 16:20:40

标签: web-services java-ee jboss jms message-queue

我们有一个Web服务以非常高的频率接收请求。 该应用程序部署在集群中的两个jboss服务器上(用于负载平衡)

我们处理请求并将一些请求确定为“好请求”。 现在我们要特别处理某些百分比的“好请求”(向下游发送到另一个系统)。这个百分比值是可配置的。 例如,如果百分比是75%,对于我们收到的每4个“好请求”,其中3个必须专门处理(发送到下游),第4个必须被忽略。

我不想添加确定“好请求”是否必须作为现有系统的一部分向下游发送的过程。因为这会减慢处理时间。


这是我对这个问题的解决方案。

  • 在每个jboss服务器中创建JMS队列,并将“好请求”发送到队列。
  • 另一个模块/应用程序(名称:Downstream模块)将读取JMS队列。它将保持计数以确定是否必须向下游发送好的请求。

Count - 是下游模块收到的请求数


由于应用程序部署在两台服务器上,因此上述方法可以预见到几个问题。

  1. 两个服务器的计数不会是唯一的,每个“下游模块”都有自己的计数。
  2. 由于count不是唯一的,因此我们可能不会发送配置的百分比。 例如,如果百分比是75%,如果我们收到6个请求。有可能3去了server1,3去了server2。每个“下游模块”中的计数将为3。 因此,我们不会有效地向下游系统发送1个“好请求”,这是不可取的。
  3. 我以为我会在数据库中维护一个表,该表将插入“好请求”并为其生成唯一编号(Good_request_count),并在每个“下游模块”中使用Good_request_count来决定是否必须是否经过特殊处理。


    但我担心我的解决方案效率很低,因为它涉及以下

    1. 有两个JMS队列(每个jboss一个)
    2. 在每台服务器中安装两个“下游模块”,以确定是否必须向下游发送好的请求。
    3. 每个下游模块必须在“good request”中插入一些键值,并从数据库中读取唯一的计数值。
    4. 根本问题是,我有两台服务器,我希望两者都有唯一的计数。

      任何人都可以建议我一个更好的解决方案,或者指出我可以改进的系统效率低下。

      如果我不清楚任何部分,请告诉我,我可以解释一下。

      非常感谢您阅读!

1 个答案:

答案 0 :(得分:2)

以下是另外两个需要考虑的策略:

  1. 创建一个MBean,其中包含保持计数的代码并将其部署在群集中每台服务器上的deploy-hasingleton目录中。您可以通过JNDI查找引用MBean,并保证只有一个实例可以在整个集群中访问。

  2. 如果您使用的是更新版本的JBoss,则可以选择使用单例会话EJB来跟踪计数。