是否可以在没有服务代理的情况下构建 SOA?这有什么好的例子吗?
Is it possible to build a SOA without a service broker? Is there any good example of this?
我在 OSGi 中构建了一个应用程序,它提供了一个 REST API 用于从不同数据源读取值。然后我在我的应用程序中安装了几个模块来公开这些数据源。例如,一个模块从数据库公开读数,另一个从网站公开,另一个从 TCP/IP 设备读取,等等...
例如,如果我这样做:
http://--------/listAllDataSources
如果我安装了 3 个模块,我会得到这样的结果:
{
dataSources : [ 0, 1, 2 ]
}
那么如果我这样做:
http://--------/read/1
我将从数据源编号 1 中获取读数。
{
currentValue : "44.5"
}
所以我的架构包括:
[ External Apps]
|
|
*Web*
|
|
[ REST API ]
[M1][M2]....[Mn]
这算作 SOA 吗?
此外,如您所见,我没有使用任何服务代理。这会使我的应用程序不是 SOA 吗?
谢谢!
SOA 是一个抽象概念,类似于 3 层架构,可以应用于不同的级别。
如果您将 "External Apps" 视为系统的一部分,那么这些应用程序是服务消费者,而“[Rest API] with [M1]..[Mn]”是服务提供者。通信是通过 http 进行的。这就是 SOA。
如果您的系统范围只是“[Rest API] with [M1]..[Mn]”那么您仍然有消费者 - [Rest API](这也是提供者外部服务)和提供者 [M1]..[Mn]。
这个模块中的每一个都是一个服务,所以我认为这个设计是一个非常简单的 SOA。 Service broker 工作由 OSGI 运行时完成,通信协议可以只是 Java 方法调用 - 然而它可以简单地由 ECF 替换以跨不同的 JVM 分发模块,然后通信协议取决于 ECF 中的配置。
我认为你在这里混淆了概念,PedroD。您可以详细阅读术语 SOA 指的是什么 here。 (我故意不链接到维基百科文章,这绝对是可怕的和误导性的)。
您的应用程序是为公开功能而构建的,因此可以说它可以是 SOA 的一部分,但它本身并不是 SOA。
SOA是指支持面向服务的架构风格。它帮助组织以面向服务的方式集成和开发其系统。 SOA 是一种比您拥有的范例更广泛的范例,它大大超出了单个应用程序的上下文 - 例如它建立了内部企业指南、治理流程、跨多个业务领域的服务清单构建和服务编排,以使组织能够非常快速地实施业务流程,从而缩短上市时间。
当然,SOA 有发展的层次。您可能还没有适当的流程,或者您可能没有使用消息代理,可以说您仍在努力实现完全面向服务的体系结构。但为了实现 SOA,您必须至少拥有某种中间件层,这样您就可以避免点对点集成,并至少进行简单的服务组合。
我会说您的应用程序是在考虑集成和面向服务的情况下构建的,但它本身并不是 SOA。
注意:如果您希望以借鉴 SOA 的许多概念的方式在内部组织您的应用程序,您可能需要查看 Microservice Architecture。其实对我来说,你的架构更像微服务
我在 OSGi 中构建了一个应用程序,它提供了一个 REST API 用于从不同数据源读取值。然后我在我的应用程序中安装了几个模块来公开这些数据源。例如,一个模块从数据库公开读数,另一个从网站公开,另一个从 TCP/IP 设备读取,等等...
例如,如果我这样做: http://--------/listAllDataSources
如果我安装了 3 个模块,我会得到这样的结果:
{
dataSources : [ 0, 1, 2 ]
}
那么如果我这样做: http://--------/read/1
我将从数据源编号 1 中获取读数。
{
currentValue : "44.5"
}
所以我的架构包括:
[ External Apps]
|
|
*Web*
|
|
[ REST API ]
[M1][M2]....[Mn]
这算作 SOA 吗?
此外,如您所见,我没有使用任何服务代理。这会使我的应用程序不是 SOA 吗?
谢谢!
SOA 是一个抽象概念,类似于 3 层架构,可以应用于不同的级别。
如果您将 "External Apps" 视为系统的一部分,那么这些应用程序是服务消费者,而“[Rest API] with [M1]..[Mn]”是服务提供者。通信是通过 http 进行的。这就是 SOA。
如果您的系统范围只是“[Rest API] with [M1]..[Mn]”那么您仍然有消费者 - [Rest API](这也是提供者外部服务)和提供者 [M1]..[Mn]。
这个模块中的每一个都是一个服务,所以我认为这个设计是一个非常简单的 SOA。 Service broker 工作由 OSGI 运行时完成,通信协议可以只是 Java 方法调用 - 然而它可以简单地由 ECF 替换以跨不同的 JVM 分发模块,然后通信协议取决于 ECF 中的配置。
我认为你在这里混淆了概念,PedroD。您可以详细阅读术语 SOA 指的是什么 here。 (我故意不链接到维基百科文章,这绝对是可怕的和误导性的)。
您的应用程序是为公开功能而构建的,因此可以说它可以是 SOA 的一部分,但它本身并不是 SOA。
SOA是指支持面向服务的架构风格。它帮助组织以面向服务的方式集成和开发其系统。 SOA 是一种比您拥有的范例更广泛的范例,它大大超出了单个应用程序的上下文 - 例如它建立了内部企业指南、治理流程、跨多个业务领域的服务清单构建和服务编排,以使组织能够非常快速地实施业务流程,从而缩短上市时间。
当然,SOA 有发展的层次。您可能还没有适当的流程,或者您可能没有使用消息代理,可以说您仍在努力实现完全面向服务的体系结构。但为了实现 SOA,您必须至少拥有某种中间件层,这样您就可以避免点对点集成,并至少进行简单的服务组合。
我会说您的应用程序是在考虑集成和面向服务的情况下构建的,但它本身并不是 SOA。
注意:如果您希望以借鉴 SOA 的许多概念的方式在内部组织您的应用程序,您可能需要查看 Microservice Architecture。其实对我来说,你的架构更像微服务