首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >服务可以在其代码中调用另一个服务吗?

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

Stack Overflow用户
提问于 2014-09-29 11:59:53
回答 2查看 11.8K关注 0票数 5

下面是与SOA相关的演示文稿幻灯片中提到的一点,它混淆了服务编排和服务编排的概念。要启用服务编排,web服务不应该能够调用另一个web服务吗?

代码语言:javascript
复制
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.
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-29 13:13:23

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

在实践中,这个问题更为复杂。如果您开始在您自己的web服务器上调用其他服务,那么您最终会使它缺乏资源。在最好的情况下,“真正的”客户端需要等待更长的时间才能得到他们的答案,而您的web服务服务器则是自行其是。

另一个问题是递归循环:服务A调用B调用C调用A调用B.你知道这个主意。一个服务中的一个小变化可以在没有任何人注意的情况下引入这样一个循环,并且它可以在那里坐很长时间直到它突然杀死您的服务器。

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

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

这就是为什么单个服务器公开的服务不应该通过“公共客户端API”相互重用的主要原因。

注意:有些web服务通过使用现有服务来构建新服务。IFTTT --“如果这样的话”就是这样一只野兽。

票数 5
EN

Stack Overflow用户

发布于 2014-09-29 13:25:14

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

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

编排对于云服务的交付也是至关重要的。因为它们是联网的,以便共享数据处理任务、集中数据存储和在线访问服务或资源。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26099432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档