在SOA架构中从另一个服务调用服务是否可以?

时间:2011-01-11 16:50:12

标签: web-services design-patterns soa

我想我知道这个问题的答案,但我刚刚发现有人恰恰相反 - 谁是一个非常熟练的开发人员,他们只是度过了糟糕的一天?

问:从SOA架构系统中的服务中调用服务是否可以?

我怀疑没有,但无论如何我都会问......

5 个答案:

答案 0 :(得分:6)

我想不出有什么理由不这样做。我可以想到服务可以调用其他服务的多种原因。我已经构建并实现了多个执行此操作的服务。我也知道建立这种系统的其他架构。

答案 1 :(得分:3)

肯定是的。此SOA模式通常称为编排,其中一个Web服务处理,然后将消息传递到另一个处理管道。谷歌,你会找到一些很好的参考 另一种情况可能是更多的技术原因,如路由,您可以使用前端Web服务,根据安全策略,内容,桥接不同技术或传输协议等将您的消息路由到不同的后端服务。

答案 2 :(得分:2)

对此的回答一如既往“取决于......”让我解释一下我的意思。

在SOA中调用另一个服务当然是完全可以接受的事情,SOA的核心是能够用现有服务组合新东西。

更重要的部分是如何调用服务,考虑一个SOA系统,其中多个服务在调用链中协作,每个服务在事务范围内争用另一个。在没有仔细规划的情况下执行此类操作将对系统性能产生巨大影响。使用在正确的工作单元范围内的良好分区服务设计的相同调用链受到的影响较小。

考虑系统稳健性,在典型的体系结构中,一个服务往往比其他服务更受欢迎,并且有许多其他服务调用它。由于所有其他服务都依赖于对这一服务的调用,因此这一服务的失败会导致整个系统崩溃。

考虑同步和异步调用之间的区别,什么时候使用什么?这是每个人的影响吗?

如何设计和划分服务以限制每次通话时跨越服务边界的成本?

很多问题,但如果你环顾四周有很多地方可以找到答案,我建议从这些开始。

我建议您阅读Thomas Erl和Roger Sessions撰写的文章,这将使您能够掌握SOA的全部内容。

Building a SOA

SOA Design Pattern

Achieving integrity in a SOA

Why your SOA should be like a VW Beetle

SOA explained for your boss

WCF Service Performance

答案 3 :(得分:0)

考虑“关注点分离”的架构目标。而不是每个服务知道如何做所有事情,它可以依赖其他专业服务来共享功能

答案 4 :(得分:0)

我有一些不同的情况。如果要在SOA中实现服务级别集群,该怎么办?例如,假设持久性服务驻留在一台机器上,并负责处理集群中的所有持久性任务。因此,在需要持久性功能的其他机器上,只需要连接到该机器(忽略故障转移因子)。

现在登录时,如果用户服务直接具有持久性服务实例,那么您将无法实现服务级别群集。

我们有SOA中间件,我直接相互调用服务。但是当我们使用JMS / ActiveMQ实现服务级别集群时,我们遇到了这些互连服务的问题。