低代码到底是不是行业毒瘤?一线大厂怎么做的?戳此了解>>> 了解详情
写点什么

SOA 耦合的 7 个级别

2007 年 12 月 05 日

“完全解耦是极其困难和昂贵的,否则就是不可能的,”Ron Schmelzer 如是说到,他是 ZapThink 的高级 SOA 分析师。一般人们都认为:系统要么是松耦合的,要么不是。在这篇最近的帖子中,Schmelzer 炮轰了这个信仰。尽管松耦合的重要性得到认识已经有些时日了,但是围绕这个帖子展开的对话却收集了一些有趣的讨论。

Schmelzer 如此描述松耦合的 7 个维度:

  1. 实现
  2. 服务契约
  3. 服务策略
  4. 过程
  5. 数据模式
  6. 基础设施
  7. 语义级别

这个报告是这样说明松耦合实现级别的:

所有 SOA 的实现必须在实现级别是松耦合的,但是显然这并不足以保证达到业务期望的那种完全的松耦合。

服务契约提到了使用服务描述框架的好处:

服务描述框架(SDF)……是一种技术中立的服务契约模板。以那种方式,新的服务契约并不是简单地替代旧的契约。除非给服务消费者提供一个转换路径,否则旧契约就永远不会被弃用。

延迟绑定的问题也被提了出来:

在这个舞台上 [可能] 的最佳实践就是使用一种延迟绑定的方法,该方法利用了运行时注册和基于契约的绑定,这样抽象了特定于服务消费者的绑定,并使服务契约变更照成的影响不致于蔓延开来。

Anil John 就这一观点表示怀疑

直到我们解决跨 Web 的无缝互操作问题之前(主要是 XML 到对象数据绑定引起的问题),由涉及产生和实现动态客户端代理的消费者来把运行时绑定到服务只不过就是一次视觉探索(VisionQuest)!在当前那些确实“利用运行时注册和基于契约的绑定”的环境中,唯一可行的运行时办法只限于动态绑定到不同的 SOAP 端点(它能在注册中使用一个运行时的查找得到),当且仅当已经在潜在的生产者和消费者之间的 Web 代码中完成了上述的互操作测试。

报告将服务策略与服务契约这样联系起来:

公司指望服务可变性在处理策略变更的方法与它们处理服务契约变更的方式一样:延迟绑定、启用服务仲裁、基于注册和治理。

业务过程的处理是类似的:

通过在元数据中定义过程并使用服务契约暴露这些过程(作为服务暴露,服务组合时采用递归方式),可以把过程实现从服务消费者中抽象出来。

第一次提到对数据模式进行不同的处理:

模式是服务数据互操作能力的关键。但是,当模式发生变化时情况会怎样呢?解决问题的一个关键就在于将信息和模式按照服务元数据相同的管理方式进行管理。数据模式被视为元数据的一种形式,并且异常管理、转换、服务仲裁和数据服务全部都是数据结构松耦合的关键。

现在,再一次回头看看服务契约中说的——“模式和服务契约没有什么不同”。

报告认为,尽管从基础设施观点来看,松耦合可能很容易定义,但是极少有厂商提供这种灵活性:

[这] 意味着在任何时间,公司都可以改变他们的基础设施,而无需重新构建所有的服务消费者和提供者。

最后的解决方案是在语义级别描述的——动态服务定义,其中“服务接口的定义必须基于服务请求者的上下文改变。结果是,服务可以在调用之间改变它们的契约”。这种宽松的语法看起来会和 REST 模型一起工作得很好,但是与 WS 标准结合的效果在现阶段是未知的。

Nicholas Gall 在他的分析中增加了松耦合的另一个方面:

这个列表遗漏了松耦合最重要的一个方面:普遍性。如果我和唯一的另一合作伙伴采用了世界上最动态的可重新配置的中间件架构,那么他和我就紧密的彼此联系到一起了。试想我们两人设计出了 WS-* 的自家变种,姑且称之为 WS-Silo。那么,我们之间可以在一端进行随意的变更,而不会破坏另一端。但是,我们不能和其他的任何人进行互操作。

尽管在怎样达到松耦合上并没有获得一个广泛认同,但是在众多人的意见中,它的目标是一致的——通过将系统变得彼此来降低改变它们的成本。

查看英文原文: 7 Degrees of SOA Coupling

2007 年 12 月 05 日 03:18764
用户头像

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

关注

评论

发布
暂无评论
  • 微服务通信策略

    在GeeCON 2018大会上,Michael Plöd在一场介绍微服务之间不同的通信策略的演讲中解释说,在从单体架构迁移到微服务架构时,暗含在单体架构中的复杂性会明确显露出来,通信挑战将呈指数级增长。

  • 建立服务治理组织

    服务治理是一个成功的面向服务架构的关键方面。它的建设必须在SOA实施的初期尽早地被计划和检验。在本文中,Jean-Jacques Dubray展示了创建这样一个有效组织的必要条件。

  • ESB 这个词到底是什么意思?

    微软Connected Systems部门的程序经理Nick Allen在他的博客中收集了对ESB的几种定义,并澄清了微软在这个问题上的立场。

  • 基于云的 BPM 需要 RESTful 服务吗?ZapThink 答说是,引发质疑声不断

    ZapThink的Jason Bloomberg声称基于云的业务流程管理(BPM)软件将会给那些传统的、不能很方便地迁移到云交付模式的BPM引擎带来颠覆性影响。Bloomberg这篇文章并没有描述基于云的BPM所呈现的价值,而是着眼于他的一个断言——任何云BPM引擎想要工作,基于REST的服务都是必不可少的。

  • 契约的版本管理、兼容性和可组合性

    Kjell和Jean-Jacques回顾了契约设计的原则,重点探讨了鼓励服务重用和对治理起补充作用的基于XML、XML模式和WSDL扩展性的兼容性契约概念。这篇文章包含了一种新颖的管理企业数据模型相关消息类型的方法。

  • 使用 Resilience4j 实现服务熔断

    2019 年 5 月 10 日

  • 在 ESB 中选择路由还是编配?

    在这篇文章中,Adrien Louis和Marc Dutoo在一个典型的ESB场景中讨论了编配和路由的区别和优缺点。他们讨论了几种连接服务的方法,从使用如自定义路由这样的低级别方法,到使用如工作流和编配这样面向业务的高级别方式,并总结说不存在“一边倒”的解决方案。

  • 异构系统跨语言服务化初探

    从单体应用到 RPC 服务化、容器化,到后期的混合云应用以及跨语言支持,再到目前的 WeiboMesh,Motan RPC 在其中扮演了至关重要的角色。

    2018 年 3 月 19 日

  • 面向对象之继承:继承是代码复用的合理方式吗?

    很多程序员把实现继承当作了一种代码复用的方式,但实际上,实现继承并不是一个好的代码复用的方式。

    2020 年 6 月 29 日

  • 在实现 XML 和 Web 服务时要避免的三种常见错误

    在其最新的文章中,IBM的Kyle Brown检查了3种常见的反模式,或者说是“坏习惯”,正是它们给采纳Web服务和SOA实现造成了不必要的麻烦。

  • gRPC 服务调用原理

    gRPC 服务调用支持同步和异步方式,同时也支持普通的 RPC 和 streaming 模式。

    2018 年 3 月 15 日

  • 不要让消费者和服务提供者直接通信

    ZapThink的Ron Schmelzer讨论了为什么绝大部分集成——开发者不是在“做”SOA,以及为什么这对面向服务体系架构不利。他讨论了问题,并指出了一些直接的方式来缓和问题,这些方式并不会经常要求在新的基础设施上进行大的投资。

  • 2011 SOA 虚拟研讨会

    在本次虚拟研讨会上,SOA专家们分享了他们对于SOA现状以及未来趋势的观点及看法。

  • SOA 专用消息模式

    Adobe刚刚公布了一份关于SOA消息交换模式的文档。文档还包含一个关于SOA原理的优异初级读本。OASIS的SOA参考模型技术委员会的主席Duane Nickull是文档的合作者之一,这也让该文档很值得一读。

  • SOA 执行者应该首先定义标准

    标准,因其可以防止厂商锁定并提供了异构的服务实现之间的互操作性,通常被人们所重视。然而,正如Steve Jones最近指出的,SOA的执行者们在SOA生命周期之初忽视了标准选择的现象依然很常见。在本文中,他总结了标准用在何处最为恰当,以及为什么对于这个规则,REST也不例外。

  • 如何发布和引用服务?

    想要构建微服务,首先要解决的问题是,服务提供者如何发布一个服务?服务消费者如何引用这个服务?

    2018 年 8 月 30 日

  • 服务注册库在 SOA 的戏份越来越重

    从UDDIv1以来,服务注册库(service registry)的概念已经在技术先驱和商业领袖们的推动下日益发展。最近踏入这块市场的厂商是SAP。SAP的新注册库着眼于从设计到运行的业务架构、企业架构和解决方案架构的调整。

  • 文章:SOA 治理──企业视图

    在这篇新文章里, SOA架构师Michael Poulin解释了SOA治理在确保SOA项目成功中的必要性,并解释了OASIS SOA参考模型以及相应的分派给SOA治理的SOA参考架构。Michael从企业的视角观察了SOA治理的细节并通过几个SOA治理策略的例子进行了阐释。<a href="http://www.infoq.com/cn/articles/poulin-governance" target="_blank">直接点击阅读完整文章</a>。

  • 意见:SOA 不需要公共信息模型

    松耦合并不只是使用一个公共的语法和一些协议,它还涉及一组共享语义的创建和管理。让我们快速地了解一下公共信息模型和共享语义的区别,并决定那种更可能地被使用在面向服务架构中。

  • ZooKeeper 提供什么服务?

    2019 年 8 月 19 日

发现更多内容

第二周作业

alpha

极客大学架构师训练营

第二周总结

睁眼看世界

极客大学架构师训练营

依赖倒置原则

知行合一

软件设计原则

架构师训练营第 1 期 -- 第二周作业

发酵的死神

极客大学架构师训练营

架构师训练营 1 期 -- 第二周作业

曾彪彪

极客大学架构师训练营

十七张图玩转Node进程——榨干它

执鸢者

前端 进程 Node

软件设计的基本原则

天天向上

极客大学架构师训练营

架构师训练营 Week2 总结

lggl

总结 极客大学架构师训练营

架构师训练营第二周学习感悟

吴传禹

极客大学架构师训练营

SpringBoot 异步任务

hepingfly

Java springboot 异步任务

什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?

魏小龙

敏捷开发 依赖倒置原则

Mac mini 2020上手体验

墨凡

Mac

架构师训练营第 1 期 - 第二周学习总结

Anyou Liu

极客大学架构师训练营

一文轻松理解内存对齐

C语言与CPP编程

程序员 编程语言 面试题 C语言 编译器、程序语言、CPU

面试中常见的C语言与C++区别的问题

C语言与CPP编程

c++ 编程语言 面试题 C语言 编译器、程序语言、CPU

深拷贝与浅拷贝到底是什么

C语言与CPP编程

c++ 面试题 C语言

依赖倒置及接口隔离原则

天天向上

极客大学架构师训练营

Spring 5 中文解析数据存储篇-JDBC数据存储(上)

青年IT男

Spring5

架构师训练营学习总结——第二周

文智

极客大学架构师训练营

架构一期 - 甘霖 - Week2 - 作业一

小粽

回首挑灯看剑谱 - Week2 - 学习总结

小粽

荷之美 | 中国荷苑

xcbeyond

生活 摄影 摄影征文 荷花

week1--作业一

hero_genlot

极客大学架构师训练营

架构师训练营第二周课程笔记及心得

Airs

十大经典排序算法(动态演示+代码)

C语言与CPP编程

算法 编程语言 面试题 编译器、程序语言、CPU

架构师训练营第 2 周学习总结

netspecial

极客大学架构师训练营

架构师训练营第二周作业

吴传禹

极客大学架构师训练营

架构师训练营 1 期 -- 第二周总结

曾彪彪

极客大学架构师训练营

食堂就餐卡系统设计-作业

Kenny

作业

训练营第二周作业1

Yangjing

极客大学架构师训练营

开源推荐:国内3大主流前端UI表单设计器,千万不要让领导知道

互联网应用架构

Vue Element antd

2021 ThoughtWorks 技术雷达峰会

2021 ThoughtWorks 技术雷达峰会

SOA耦合的7个级别-InfoQ