【问题标题】:How best can I isolate my application from an unreliable database?如何最好地将我的应用程序与不可靠的数据库隔离开来?
【发布时间】:2010-09-22 12:17:21
【问题描述】:

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

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

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

【问题讨论】:

  • 这是一个内部应用程序吗?其他公司集团是否拥有该数据库?
  • 不可靠是什么意思?偶尔慢?给出错误?破坏信息?丢弃更新?细节会影响合适的解决方案

标签: java database soap sybase reliability


【解决方案1】:

我已经多次看到这个问题,通常是在供应商数据库中。

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

          • 你能更具体地说明如何做到这一点吗?
          【解决方案6】:

          让其他内部团队调整该数据库,让使用该应用的每个人都受益。我真的很喜欢一些索引!

          【讨论】:

          • 我们可以控制的,调整得非常好。然而,它是一个供应商应用程序,许多查询在应用程序中是硬编码的,无法更改。
          猜你喜欢
          • 2020-12-25
          • 1970-01-01
          • 2016-10-14
          • 2021-04-09
          • 2022-11-21
          • 1970-01-01
          • 2011-04-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多