2

面向服务的架构原则网站说服务组合是 SOA 中的一个重要内容。但是服务松散耦合也很重要。

这是否意味着“编排层”应该是唯一允许调用系统中服务的层?

据我了解 SOA,“编排层”将所有服务“粘合”到一个软件应用程序中。我试图在 Fig.A 和 Fig.B 上描述这一点。

两者的区别在于,在 Fig.A 中,应用程序是由服务组成的,所有的逻辑都在“编排层”中完成(所有对服务的调用都只在“编排层”中完成)。在图 B 中,应用程序由服务组成,但一个服务调用另一个服务。

图 B 中的架构是否违反了 SOA 的“服务松耦合”原则?SOA 中的服务可以调用另一个服务吗?更一般地说,在服务松散耦合、抽象、可重用性、自治等方面,图 A 上的架构能否被认为优于图 B 上的架构?

我的猜测是 A 架构更加通用,但它可以在“编排层”和所有被调用的服务之间添加一些不必要的数据传输。

SOA 服务调用

4

1 回答 1

0

假设服务 1 和 2 下的所有内容都封装在它们的合约后面,那么它们是松散耦合的。然而,B 没有利用编排层释放服务 1 的能力。A 与 B 之间没有明确的对错,但有权衡取舍。图 A 需要更多的开发工作,因为 B 返回给 A 的详细信息需要提取到编排层 - 如果涉及数据列表,则 B 需要允许将一组参数作为标准传入。然而,这使得 svc 1 对 svc 2 一无所知。因此,如果服务由两个不同的团队拥有和管理,那么 A 将允许这些团队自主工作。例如,如果 svc 1 是客户信息服务 (CIS) 而 svc 2 是支付服务,则编排层可以将 CIS 数据与 Svc 2 拼接在一起,以返回客户名称列表及其最近的支付数据。在图 A 中,在编排层中使用内存中的连接来进行拼接。然后客户端调用编排层。使用 B,客户端可以直接调用服务 1,但如果您开始允许服务相互调用,您最终可能会得到一个令人讨厌的依赖关系图,包括重入调用的可能性。如果您的团队很小并且同时拥有 svc 1 和 2,那么他们可以跟踪这些依赖关系。但是,当您有不同的团队时,您可能会发现依赖关系在 B 中不容易了解或管理良好。在图 A 中,在编排层中使用内存中的连接来进行拼接。然后客户端调用编排层。使用 B,客户端可以直接调用服务 1,但如果您开始允许服务相互调用,您最终可能会得到一个令人讨厌的依赖关系图,包括重入调用的可能性。如果您的团队很小并且同时拥有 svc 1 和 2,那么他们可以跟踪这些依赖关系。但是,当您有不同的团队时,您可能会发现依赖关系在 B 中不容易了解或管理良好。在图 A 中,在编排层中使用内存中的连接来进行拼接。然后客户端调用编排层。使用 B,客户端可以直接调用服务 1,但如果您开始允许服务相互调用,您最终可能会得到一个令人讨厌的依赖关系图,包括重入调用的可能性。如果您的团队很小并且同时拥有 svc 1 和 2,那么他们可以跟踪这些依赖关系。但是,当您有不同的团队时,您可能会发现依赖关系在 B 中不容易了解或管理良好。如果您的团队很小并且同时拥有 svc 1 和 2,那么他们可以跟踪这些依赖关系。但是,当您有不同的团队时,您可能会发现依赖关系在 B 中不容易了解或管理良好。如果您的团队很小并且同时拥有 svc 1 和 2,那么他们可以跟踪这些依赖关系。但是,当您有不同的团队时,您可能会发现依赖关系在 B 中不容易了解或管理良好。

于 2012-12-22T04:21:40.213 回答