2011-04-13 121 views
2

我们当前的应用程序必须以SOAP风格服务的形式与SAP PI层交谈。不幸的是,这个服务层没有实现任何形式的缓存,导致响应时间很长,甚至对于后续请求也是如此。我们认为我们有两种选择来解决这个问题。请注意,这些是HTTP POST。缓存SOAP响应

  • 缓存我们在第一次调用后创建的java响应对象。
  • 通过引入缓存代理来缓存xml响应。在这里验证和检查缓存响应似乎更加困难,因为它涉及到请求主体。

我们想知道,如果任何人有两种方法,或当遇到类似的情况,你会怎么解决这个问题的任何经验

+0

你需要奖励那些已经用自己的时间为你提供答案的人。少一点就是不敬。 – oligofren 2011-08-19 23:28:33

回答

8

你运行工作了你的缓存机制的路径之前请记住哪些服务和流程(SOA和BPM)是关于什么的。它们旨在抽象出基于标准接口背后的某种业务功能的实际实现。

当你说有很高的响应时间时,你分析了延迟的来源是什么?

  • 您的延迟有多少是网络延迟?
  • 集成堆栈读取和写入SOAP请求和响应的数量是多少?
  • 是否还有其他开销,例如记录或持续请求/响应(例如,如果使用持久性消息传递作为传输层)?
  • 在SAP PI中实际处理请求的时间有多少?

您所调用的服务和流程应被视为黑匣子,即您不必知道封面背后发生了什么,只是它正在执行您要求的功能。但是,如果您实施缓存,则假定您所调用的服务没有副作用,如更新数据,保留审计跟踪,向其他方或系统通知事件等。因此,即使你找到了一个实现缓存需求的技术方式,你可能实际上正在破坏服务实现。对于您的应用程序,它看起来不错,但是您可能会影响其他您不知道的系统或进程。

如果你有信心,你知道你在做什么,那么一定要看看缓存。通过存储响应对象在应用程序中实现它可能会最快,但不会被其他应用程序使用,因此性能优势将被本地化。如果你采用这种方法,你可能仍然要考虑建立一个选择性缓存机制,而不是全部应用。

某些ESB甚至XML网关/设备具有缓存功能。例如,我知道IBM DataPower设备具有文档缓存功能,您可以在其中控制缓存哪些服务/ URL以及这些缓存副本具有何种生存时间。这种方法的优势在于为所有SAP服务的使用者提供所需的性能提升。请注意,缓存会增加内存消耗,因此如果您不仔细处理,可能会导致您的应用程序或ESB或您实现的任何内存耗尽内存不足。 DataPower似乎有一个不幸的习惯,就是在没有告诉任何人我们在项目中遇到这个问题时重置自己! :)

希望有所帮助。

+0

很好的答案!太糟糕了原始的海报没有奖励你的工作点。对我有用。 – oligofren 2011-08-19 23:30:40

+0

谢谢,很高兴知道有人阅读并赞赏它! – ChrisC 2011-08-25 22:50:14