如何才能最好地将我的应用程序与不可靠的数据库隔离开来?

时间:2008-11-15 17:54:28

标签: java database soap sybase reliability

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

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

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

6 个答案:

答案 0 :(得分:3)

我已经看过几次这个问题,通常是供应商数据库。

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

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

如果这是在Unix的某些风格上,我认为它具有与Windows服务类似的功能 - 可能是一个守护进程。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

RoadWarrior的回应是正确的。执行任何操作的请求都会被放入队列中。用户进入一次以发出请求,并且一次接收请求。这实际上是在Expedia这样的网站上发生的事情,它与不可靠的服务(后端)进行对话。用户的浏览器正在ping服务器,直到红灯变为绿色。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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