2011-07-21 37 views
1

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

我们处理请求并确定某些请求为“良好请求”。 现在我们要专门处理“好请求”的某个百分比(向下游发送到另一个系统)。该百分比值是可配置的。 例如,如果百分比是75%,那么我们收到的每4个“好的请求”中就有3个需要专门处理(下游发送),第4个必须忽略。

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


下面是我认为这个问题的解决方案。

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

计数 - 由下游模块


有几个,我与上述方法预见的问题提出的请求数,因为应用程序部署在两台服务器。

  1. 计数对于两台服务器来说并不是唯一的,每个“下游模块”都有自己的计数。
  2. 由于count不是唯一的,我们可能没有发送配置的百分比。 例如,如果百分比是75%,并且我们收到6个请求。可能有3个去了server1,3个去了server2。每个“下游模块”中的计数将为3.因此,我们不会有效地向下游系统发送甚至1个“良好请求”,这是不可取的。

我以为我会保持,这将插入“良好的请求”,并生成一个唯一的编号(Good_request_count),每个“下游模块”中使用Good_request_count数据库中的表作出的决定是否必须专门处理或不处理。


但恐怕我的解决方案是非常低效的,因为它会涉及到以下

  1. 有(每个JBoss的一个),两个JMS队列
  2. 有两个“下游模块”每个服务器确定好请求是否必须发送到下游。
  3. 每个下游模块必须在“良好请求”中插入一些关键值并从数据库中读取唯一的计数值。

潜在的问题是,我有两台服务器,我希望跨两个唯一的计数。

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

请让我知道,如果我不清楚任何部分,我可以解释。

非常感谢您的阅读!

回答

2

这里有其他两种策略来考虑:

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

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