AICon 深圳站 Keynote 嘉宾官宣!共探AI价值转化的实践路径 了解详情
写点什么

向服务组件架构出发

  • 2007-12-25
  • 本文字数:3869 字

    阅读完需:约 13 分钟

相当数量的博客们一直想知道关于服务组件架构(SCA)的标准化努力。

SCA 的挑选(pick-and-chose)规范风格使人很容易在 SCA 的宇宙中迷失。因为社区中基本没有 SCA 的使用经验,许多值得详细说明的领域依旧还处于调查研究之中,或者甚至还未被触及。

首先,读者很容易被误导相信 SCA 是 Java 领域的(又一个)革命。就两点来说,这是错误的。首先,尽管面向 Java 的工作吸引了绝大多数的注意力,但是 SCA 不仅仅只关心 Java 领域:还有针对 C++、COBOL、PHP 和 BPEL 的规范。话说回来,我们所要注意到的是:SCA 主要目的不是替换现有环境(如 Java EE 和 OSGI)而是创建一个基础设施,其中的应用可以穿越这些环境中的不同编程模型间的边界。SCA 将如何与现有技术集成的细节是已发布的 SCA 规范目录中缺失的一块。在描绘出与这些环境在所有层次上集成的繁琐细节之前的确还有很多工作要做。

技术集成是困难的。在它的使用过程中,不应该仅仅局限于单一的有趣的技术。可是,SCA 的全部内容就是关于跨技术(cross-technology)集成的。

SCA 看起来前景不错。在不同的场合(包括公开会议)已展示了一些非常有趣的原型:

  • Oracle 开发者已经示范了 BPEL 过程与专用仲裁组件、工作流组件和事件代理的组合(参见这里)。
  • SAP 开发者已经展示了在一个 Java EE 应用包中 Java EE 组件和 BPEL 过程的组合,以及在几个 Java EE 应用之上的域级别(domain-level)装配。(参见这里的 JavaOne 2007 会议)
  • Apache Tuscany 项目可以运行混合有脚本语言组件和 Java 组件的组合。
  • SCA 的 Fabric3 实现展示了如何在一个分布式运行时环境和不同编程技术实现之上装配服务网络。

让我们尝试总结一下我们可以从这些例子中学到的东西:

SCA 是对框架的增强,该框架为组件和连通性抽象提供了编程模型。那些框架可能是标准产品,但是也可能是私有技术,例如,用于 SAP 系统的远程函数调用(RFC),私有仲裁或脚本组件、SQL 存储过程等。为了兑现一系列的好处,SCA 定义了一门装配语言,它可被集成进入这样的框架中。我们将详细讨论各种益处。我们可以得出以下的结论:

  • SCA 支持与现有技术结合。那将可能是它的主要用例。
  • SCA 的基本价值在于提供了跨技术编程模型集成、分布式部署和装配的基础。
  • SCA 允许实现者以一种一致和公认的方式提供私有技术——这对开发者和厂商都有好处。

与现有环境集成

如果有什么不同的话,那就是 SCA 关心与现有技术的集成。在设计 SCA 时,它就不是关于重用或其它规范的。它的做法另辟蹊径:规范描述如何与 SCA 模型深入集成。当在 osoa.org 浏览 SCA 白皮书或跟踪原型成果时(参见以上),你就会看到这点。这里的想法是,无论一个特定技术好在哪里,只要利用 SCA 向外扩展它的使用就更能增加它的价值。

集成现有技术可能用不同方法,在不同层次上发生。对一门脚本语言来说,一种实现类型定义是一种自然选择。对于服务调用技术来说,例如消息传递、远程协议、绑定都是集成的方式。对于如 Java EE 这样提供了一个部署模型的运行时环境,一个(可能更多)组件模型集成可能发生在不止一个层级上。

与给定环境的 SCA 装配深入集成可以减少由抽象所带来的烦人的模型摩擦,这些抽象一般试图将所有类型的运行时包装成为一个公共的“更高级”运行时模型。

例如,有时通过 WSDL 抽象所有的服务,并在一些通用面向 XML 的 WS-* 运行时中实现服务调用,这看起来是个不错的点子。尽管从高层看那似乎是个不错的主意,但是从一个服务开发者和服务消费者的角度来看缺乏吸引力:不论你身处何出,你都必须付出非集成的阻抗失配代价,这种非集成需要在不同技术之间来回转换——包括命名、事务处理、安全。

相反,一个 SCA 集成将试图给本地器件提供表演机会,这样它们就可以在装配定义中立刻被引用,只有当需要用到以前没有的特性时,才需要修改。

跨技术编程模型集成

SCA 引入了实现类型(implementation type)这一抽象概念。实现类型从 SCA 装配的角度描述了组件的外观。换句话说,它说明了一个组件提供了什么服务端点、它需要什么引用,以及为它指定了哪些配置属性。在那种意义上,一个实现类型提供了独立于技术的组件实现表示。

这听起来有点象是科幻小说,并且我们以前就已经听说过这样的东西了。然而,SCA 并不企图捕获一个组件和它在自身语言内进行交互的所有方面。例如,SCA 并没有定义它自己的接口描述语言,而是依赖 Java 和 WSDL。其他接口语言在需要时被实现者支持。按照同样的精神,尽管 SCA 定义了一个策略框架,它确实尽可能的重用 WS-Policy 定义。

一旦你有了一个实现类型,比方说 foo,你就可以使用 SCA 装配来定义组件类型 foo 如何与其他环境相结合,比方说 BPEL 过程、Java POJO、或 EJB 会话 Bean——凡是你选择的环境所支持的东西。

从一个厂商的角度来看,这意味着 SCA 降低了给他的用户提供实现或绑定技术的边际成本。对于使用者,它意味着 SCA 降低了利用实现或绑定技术的边际成本。

在 Java EE 的情况下,我们实际上在 SAP 进行了一次研究。我们将一个 SCA 运行时和一个 BPEL 引擎与我们的 Java EE 5 环境(就是 SAP Netweaver)集成起来,得到了一个无缝的 BPEL 与 Java EE 组件集成和生命周期模型。让我们看看我们所得到:真正的本地 BPEL 到 Java(反之亦然)本地调用(虽然没有按引用传递,pass-by-reference),因为我们有充足的本地应用装配元数据。特别是一个 BPEL 过程可以通过 SCA 连线(wire)调用一个会话 Bean,使用 Java 持久化 API(JPA)在同一事务中更新持久化数据,而且通过为局部接口暴露 Web 服务不会泄漏隐藏信息。在本例中,SCA 连线有一端由 WSDL 接口定义,它的组件侧由 BPEL 实现;有一端由 Java 接口定义,它是会话 Bean 的业务接口。

从另一侧来说:在为诸如 BPEL 这样的编排(orchestration)语言提供支持时,需要尽可能地能无缝重用现有资产。此处,SCA 有助于允许在本地使用它,几乎是“就地的(in place)”。

尽管没有理由去期望 C++ 代码和 Java 进行类似的集成(但是……谁知道呢),但是有很多的来自企业服务总线(ESB)的编程模型或企业应用集成(EAI)遗产,它们可按照集成 BPEL 的相同套路来被集成。

分布式部署和装配

尽管 SCA 明智地没有描述一个特殊的部署格式,但是它确实定义了部署的一些方面。特别是它定义了“部署到 SCA 域(contribution to the SCA domain)”这个概念。这是 SCA 的另一关键概念。

在我们讨论部署单元(Contribution,即:可部署的)的时候,我们可以超越单个部署单元去谈论装配,它实际上就是 SCA 所说的域(domain)级别的装配。域被可视化为一个包含来自部署单元的组合的组合。即,使用与我们本地使用相同的装配语言,我们得到了一种表示跨部署单元装配关系的方法。

被域概念激活的分布式装配是在编程级别跨技术集成的逻辑对应物。实际上,业务应用必须跨应用包集成,而且往往跨几种技术区别巨大的系统,编程级别的集成是不合理的。

幸运的是,一个域可能横跨不止一个系统和内部互连的几个系统。在这种意义上,域级别装配提供了一个连通性抽象,它将来自系统到系统的物理端点的配置,移到了复合领域结构的定义中。

它不仅关于抽象域内端点寻址。除那之外,装配信息可能对实际使用的传输协议保持沉默,依赖于域的异构性,域把那个决定留给领域管理员或甚至是运行时实现。

从企业服务总线(ESB)的角度来看,这说明今天的趋势是“ESB 能力的边缘化”。即编程模型集成(参见以上)允许我们自由地在业务应用逻辑中实现集成功能,而域抽象了 ESB 拓扑细节——即服务总线上的编程。

私有技术和 SCA

以上得出的一个重要论点是:为提供者和使用者降低新编程模型的边际成本。它是简单的双赢情形。

厂商一般不愿引入新编程模型,因为涉及将它推向开发者和工具所付出的额外努力。新的部署模型、管理工具和工具套件促使引入了一个新的编程语言(如 BPEL),这并不少见。这样公平吗?

类似地,为什么用户应该对必须学习多余的东西而高兴呢?而且这些东西并不能使他们的开发生涯更舒心。

讲到私有技术,这意味着厂商可以使用 SCA 提供对新技术或私有技术更快、更省力的使用。使用者应该期望进入领域特定技术更低的门槛。

总结

你从本文可以了解到 SCA 主要不是企图替换或变革你钟爱的技术。它增加了你可在需要时使用的装配抽象。

它是关于 SOA 的吗?如果我们说 SOA 是关于抽象连通性细节,能为集成和应用部署篡改不同的传输协议和编程模型,那么 SCA 就是简化 SOA 开发的。

现在,SCA 进入 OASIS 并被称为开放组合服务架构(OpenCSA),SCA 的开发将在大众注视下继续进行。保持关注!

参考:

查看英文原文: Setting out for Service Component Architecture

2007-12-25 22:591751
用户头像

发布了 255 篇内容, 共 64.8 次阅读, 收获喜欢 10 次。

关注

评论

发布
暂无评论
发现更多内容

参加HDC用Petal出行,专属打车券立减20元

最新动态

2023-08-04:村里面一共有 n 栋房子 我们希望通过建造水井和铺设管道来为所有房子供水。 对于每个房子 i,我们有两种可选的供水方案: 一种是直接在房子内建造水井 成本为 wells[i -

福大大架构师每日一题

福大大架构师每日一题

准确率提升近4%,自研ASR模型助力公安机关筑牢反诈安全网

中关村科金

Sprint Boot学习路线6

小万哥

Java spring 微服务 后端 springboot

RHG之漏洞自动化利用(AEG)

云起无垠

模块7作业 王者荣耀线上商城异地多活架构设计

sandywrh

“新一代企业数字化联盟”走进嘉定,数划云与众多企业一起探讨数字化转型

数划云

面部表情识别在教育领域的应用

数据堂

探索大模型应用,解决企业数字化转型“最后一公里”

中关村科金

使用 Amazon ECS Anywhere 在边缘部署 Amazon IoT Greengrass

亚马逊云科技 (Amazon Web Services)

物联网 ECS

你真的了解appium吗?

QE_LAB

测试框架 appium

如何用 NPS 确定研发优先级,打破技术与业务的次元壁?

LigaAI

敏捷开发 业务价值 NPS 研发效能管理 企业号 8 月 PK 榜

华为阅读与二十一世纪出版社集团签约 共创优质少儿阅读内容生态

最新动态

作者推荐 | 【底层服务/编程功底系列】「底层技术原理」史上最清晰的采用程序员的视角方式进行深入探索Linux零拷贝技术原理及实现

码界西柚

Linux 操作系统 零拷贝 zero copy 底层原理

【7.28-8.4】写作社区优秀技术博文一览

InfoQ写作社区官方

【腾讯云Cloud Studio实战训练营】如何成为一名合格的Python爬虫“念咒师”(基于ChatGpt)

孤寒者

Python Cloud Studio Python爬虫 念咒师 念咒编程

详解 HashMap 的底层实现原理

树上有只程序猿

Java 数据结构 hashmap 哈希

低代码,更利好前端研发的红海

互联网工科生

前端 低代码 项目 可视化开发 JNPF

组织门户支持成员自主公开,快速搭建内容|ModelWhale 版本更新

ModelWhale

云计算 数据分析 API 算力 数据门户

大文件跨国传输慢有哪些因素,附大文件跨国快速传输解决方案

镭速

大文件跨国传输

如何将超大文件传输给别人,超大文件如何传输呢?

镭速

超大文件传输

基于流量回放的自动化回归测试平台 AREX Agent 技术实现细节分享

AREX 中文社区

开源 Java Agent 自动化测试 流量录制

向服务组件架构出发_SOA_Henning Blohm_InfoQ精选文章