1

我的测试实验室中有以下架构:

  • N 个 SOAP 客户端向不同的 Web 服务发出请求(我无法控制客户端技术,但请求始终是通过 HTTP 的 SOAP XML);

  • 1 个网关,它服务于所有传入的 SOAP 请求,将它们路由到正确的 WS。

问题:

我的服务每天会收到数百个(有时是数千个)请求。其中许多是 GET 请求,它只收集信息。因此,这些请求中有许多是相似的,唯一的区别是:

  • Soap-Env\Header 中的 1 个控制字段,用于标识每个请求(请求 ID)。
  • Soap-Env\Body 中的 1 个控制字段,用于标识请求创建的时间戳。

解决方案:

在网关中实现缓存机制。当网关收到对 WS XPTO 的请求时,缓存机制会将其与该 WS 的缓存请求进行比较,如果相等,则将缓存的响应返回给客户端,避免查询目标 WS。

我正在考虑从 XML 请求字符串中删除 2 个请求控制属性,然后再将其存储在缓存后端。在将其与缓存的请求进行比较之前,我可以对每个传入请求执行相同的操作。

要求:

  • 使用JAVA实现;
  • 我只需要为每个 WS 维护一个缓存的请求/响应;
  • 后端的读/写响应时间必须非常快;
  • XML SOAP 请求的比较必须由后端处理,因为显然为了性能,我不能顺序检索它们并在 JAVA 中进行比较。

问题:

鉴于这个详细的描述(对不起它的长度),我想从专家那里听到哪些技术最适合我的需求,特别是后端。我已经考虑过 NoSQL 和内存中的键值存储,但我不能确信其中一个能够满足我的所有需求。

  • 我应该将 XML 存储在常规字符串 DB 字段中,然后进行简单的 WHERE 查询吗?
  • 我是否应该将 XML 请求转换为 JSON 文档,将其存储在 NoSQL DB 中,然后以这种方式进一步查询和比较请求?
  • 我应该选择内存数据库系统,将条目存储为: (service_name, [request_XML, response_XML])
4

1 回答 1

1

您是否探索过EHCache并且有来自ibm的具体示例也可能对您有所帮助

还要考虑在客户端缓存

于 2013-09-09T18:02:39.167 回答