服务可以在其代码中调用另一个服务吗?

时间:2014-09-29 11:59:54

标签: web-services service architecture soa

以下是与SOA相关的演示幻灯片中提到的一点,它让我对服务编排和服务编排的概念感到困惑。要启用服务编排,Web服务是否应该能够调用其他Web服务?

SOA builds applications out of software services. Services comprise intrinsically
unassociated, loosely coupled units of functionality that have no calls to
each other embedded in them.

2 个答案:

答案 0 :(得分:3)

理论上,服务可以做任何事情来完成它的工作。因此,似乎没有理由禁止使用第二项服务来完成您的工作。为什么重新发明轮子?

在实践中,问题更复杂。如果您开始在自己的Web服务器上调用其他服务,那么您最终会使资源匮乏。充其量,"真实"当您的Web服务服务器自行播放时,客户端必须等待更长时间才能得到答案。

另一个问题是递归循环:服务A调用B调用C调用A调用B ...你明白了。一项服务中的小改动可以引入这样一个循环,没有人注意到它可以在那里坐很长时间,直到它突然杀死你的服务器。

这就是为什么你应该在服务器内部的中构建微服务(即在web服务层下面 - 不向客户端公开)。这些微服务可以以自上而下的方式相互使用(以避免循环)。单元测试然后确保它们正常运行。

最后,这种重用非常缓慢。每个HTTP请求都需要大量资源来创建,发送,解析和处理。直接调用内部方法可以快10到10000倍。

这些是单个服务器公开的服务不应该通过"公共客户端API重复使用的主要原因。

注意:有些Web服务使用现有服务构建新服务。 IFTTT - "If This Then That"就是这样一个野兽。

答案 1 :(得分:0)

您可以根据自己的需要采用每一个概念。在我目前的项目中,我们有一个单独的模块,负责Orchestration。这是必需的,因为在现实生活中,场景可能非常复杂。因此,为了接近系统的实际管理,您需要拥有这样的系统。

此方法的另一个优点是保留了 Separation_of_concerns 。还将业务请求与您拥有的应用程序,数据和基础结构对齐。它通过自动化工作流程,配置等来定义策略和服务级别。

业务流程在提供云服务方面也至关重要。它们联网以允许共享数据处理任务,集中数据存储以及对服务或资源的在线访问。

相关问题