1

我需要存储一个必须由多个模块访问和更新的条件变量。在消息队列中存储变量

该系统有一个web前端(servlet容器),它接受http调用并将它们转换为请求发送到消息队列的消息。

消息由具有相同功能的多个处理模块使用,每个处理模块都运行在单独的JVM实例中。

处理模块可能需要调用一些外部Web服务来检索新的信息。有4种可选的Web服务,并且需要根据Web服务在过去10分钟内的平均响应时间决定调用哪个服务。我的问题是如何存储关于web服务响应时间的信息

我的想法是不使用共享数据库,并尝试将共享变量(存储在队列中的专用主题?)中,这些变量只要需要做出决定就可以被处理模块读取和更新要调用哪个Web服务。更新非常简单,因为我们正在讨论平均响应时间(先前的平均值,第一次和最后一次更新TS以及当前响应时间应该足够了)。

并发性不是问题,因为只有20-30个处理模块,每隔几秒平均请求速率为1。即使存在一些碰撞,我们对过时的值也有一定的容忍度。

回答

2

我会将您的响应时间消息发送给某个主题,并且需要此信息的每个节点都会复制一份。当节点需要知道使用哪个服务时,它会查看其本地副本。这样查找速度非常快,节点可以独立运行。

顺便说一句您可能需要定期检查较慢系统的延迟。即一旦系统显得很慢,它不会再被使用,所以你不会看到它不再变慢。您可以定期检查所有服务器,看看它们的性能是否发生了变化。

+0

那么,我应该向所有处理模块广播Web服务的响应时间吗?听起来是一个好主意。 – aviad

+0

@aviad这就是我会做的。我假设多次存储相同信息的成本很小,因此拥有大量独立副本将是最优的(并且很简单) –