Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Web services 从SOA体系结构中的另一个服务调用服务可以吗?_Web Services_Design Patterns_Soa - Fatal编程技术网

Web services 从SOA体系结构中的另一个服务调用服务可以吗?

Web services 从SOA体系结构中的另一个服务调用服务可以吗?,web-services,design-patterns,soa,Web Services,Design Patterns,Soa,我想我知道这个问题的答案,但我刚刚发现有人做了完全相反的事情——他是一个非常熟练的开发人员,他们只是度过了糟糕的一天吗 问:在SOA架构的系统中,从服务中调用服务可以吗 我想不会,但我还是要问……我想不出任何理由。我可以想出一个服务可以调用另一个服务的多种原因。我已经设计并实现了多个这样做的服务。我也知道有其他体系结构建立了这种系统。想想“关注点分离”的体系结构目标。与其说每个服务都知道如何做每件事,不如说它可以依赖其他专门服务来共享功能我有一些不同的场景。如果您想在SOA中实现服务级别集群,该

我想我知道这个问题的答案,但我刚刚发现有人做了完全相反的事情——他是一个非常熟练的开发人员,他们只是度过了糟糕的一天吗

问:在SOA架构的系统中,从服务中调用服务可以吗


我想不会,但我还是要问……

我想不出任何理由。我可以想出一个服务可以调用另一个服务的多种原因。我已经设计并实现了多个这样做的服务。我也知道有其他体系结构建立了这种系统。

想想“关注点分离”的体系结构目标。与其说每个服务都知道如何做每件事,不如说它可以依赖其他专门服务来共享功能

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

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


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

当然是。这种SOA模式通常被称为choreography,其中一个web服务进行处理,然后通过处理管道将消息传递给另一个web服务。用谷歌搜索一下,你会发现一些很好的参考资料。

另一种情况可能是更技术性的原因,比如路由,您有前端Web服务,根据安全策略、内容、桥接不同的技术或传输协议等将您的邮件路由到不同的后端服务。

对此的答案总是“视情况而定…”让我解释一下我的意思

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

更重要的部分是如何调用服务,考虑一个SOA系统,其中多个服务在一个调用链中进行协作,每个调用都在事务范围内注册另一个服务。如果没有仔细的计划,那么做这类事情将对系统性能产生巨大的影响。使用分区良好的服务设计的同一个调用链,其范围在正确的工作单元上,所受的影响较小

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

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

如何设计和划分服务以限制每次调用跨越服务边界的成本

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

我建议您阅读Thomas Erl和Roger Sessions的文章,这将使您对SOA的意义有一个明确的认识


考虑到架构应该进行适当的垂直切片,您不认为这会创建一个意大利面架构吗?我认为如果您在服务器上垂直运行saw,您将有其他问题需要处理。我还认为意大利面对内部结构有害。你有没有具体的例子来说明你认为可能会出现什么问题?我的一个问题是,例如,如果在我的网站上,我调用一个wcf服务,它调用一个wcf服务,它可能调用一个wcf服务。。。等等等等等等,换句话说。。。比如说,在你的服务中,你访问一个数据库服务器。这不是另一种“服务”吗?它并没有超越SOAP,但从概念上讲,它并没有什么不同。“服务”总是呼叫其他“服务”。仅仅因为我们任意地将一件事标记为“服务”,而不是另一件事,在概念上不会改变体系结构。我在这里考虑延迟-这不像调用驻留在同一应用程序池中的对象。我们现在是不是已经到了这样一个地步:跨边界调用服务的费用是如此之低,以至于我们甚至不关心调用的接口是否是远程的?我完全不同意这一点。面向服务的核心原则之一是服务是自主的。如果您“依赖”其他专门服务来实现共享功能,那么您就是在创建对其他web服务的依赖。