5

我有一个 Java SOAP 数据服务,它位于 Sybase 数据库之上,由于我无法控制的原因,它的性能不可靠。该数据库是供应商软件包的一部分,该软件包已由内部团队修改,大多数问题是由一天中某些时间的响应时间过慢引起的。

SOAP 服务向计算网格提供数据,当我请求数据时,我需要快速且一致的响应时间。该服务提供基本的 CRUD 功能,但读取与写入的比率约为 100:1。

将自己与数据库不可靠的性能隔离并确保 SOAP 服务快速可靠的最佳策略是什么?

4

6 回答 6

4

我已经多次看到这个问题,通常与供应商数据库有关。

如果这是在 Windows 上,您可以创建一个 Windows 服务作为 SOAP 服务和数据库之间的中介。然后在 SOAP 服务和 Windows 服务之间放置一个消息队列(MSMQ 或 JMS 实现,如 MQ Series),用于异步通信。这样,数据库性能问题将不再影响 SOAP 服务。然而,这种解决方案确实是以增加复杂性为代价的。

请注意,.NET Web 服务可以由其客户端调用并异步响应。我不确定 Java SOAP 服务是否可行。

如果这是某种 Unix 风格,我认为它具有与 Windows 服务类似的功能——也许是一个守护进程。

于 2008-11-15T18:19:27.763 回答
2

为什么不使用线程?这样,即使数据库很慢,应用程序也可以慢慢等待。

于 2008-11-15T22:12:28.230 回答
2

RoadWarrior的回应是正确的。执行任何操作的请求都会放入队列中。用户进来一次以提出请求,一次来接听请求。这实际上是在像 Expedia 这样的网站上正在与不可靠的服务(后端)通信的情况。用户的浏览器正在 ping 服务器,直到红灯变为绿色。

于 2008-11-15T22:34:46.250 回答
1

如何缓存来自 Web 服务的响应(在调用 WS 请求的客户端上,或者通过在两者之间设置代理 Web 服务)?

于 2008-11-15T18:44:05.047 回答
1

如果数据库不太大,您可以缓存数据库中的结果。

于 2008-11-15T18:52:52.953 回答
1

让其他内部团队调整该数据库,让使用该应用程序的每个人都受益。我确实爱我一些索引!

于 2008-11-16T01:21:28.770 回答