HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

访谈及书摘:Thomas Erl 的《SOA 设计模式》

  • 2009-04-30
  • 本文字数:3285 字

    阅读完需:约 11 分钟

3 月,InfoQ 发布了 Thomas Erl 的新书(《SOA 设计模式》)的摘录(~30MB PDF),并借此机会采访了作者。话题涉及到模式目录(patterns catalog)的作用,面向服务、SOA 和 Web 服务三者之间的区别,以及 SOA 世界的现状。

InfoQ:在您看来,服务目录给 SOA 社区带来的主要好处是什么?

Thomas Erl (TE):对于有兴趣了解某个已知设计问题曾经是如何被成功解决的人来说,设计模式非常具有参考价值。服务目录包含的设计解决方案集合是专门针对实现面向服务的。

模式社区在给设计模式分门别类方面已经做得相当不错,我也有幸从先前发布模式的作者们那里得到了帮助。

InfoQ:您认为,您的“SOA 模式”在多大程度上等价于“Web 服务模式”?

TE:好的,首先我要声明,它们不是“我的”SOA 模式。该目录是社区共同努力的结晶,其规模相当的大:经过了三年时间,涉及数十名贡献者以及超过 200 号的审阅者。以前,关于 SOA 和面向服务的书籍也曾得益于大量的社区参与和验证,但都未曾达到这样的规模。

至于你的问题,该目录中的模式都有一个共同的上下文,即面向服务。每个模式都试图回答:“对于该问题,哪个推荐设计解决方案是能够帮助实现面向服务的?”,而不是:“用这种特殊技术如何解决这个问题?”

换句话说,这些模式并不等价于或特定于 Web 服务或其他特定技术。另一方面,确实有部分模式代表了受成功技术进步所启发或影响的设计方案。这些进步有些来自 Web 服务和基于 Web 的技术,而其他则来自 EAI 框架和中间件、企业服务总线平台、网格计算、事务管理系统、消息队列、事件驱动的消息传递框架、代理和仲裁技术等。我们还曾计划包含 20 页的内容来讨论一组受 REST 启发的 SOA 设计模式,但这些模式在复查阶段都被砍掉了,而被放在了 soapatterns.org 上的候选列表中。它们目前还在进一步的发展,以备讨论 REST 和 SOA 的书籍使用。

令某些人感到困惑的是,书中给出的很多示例都是使用 Web 服务技术来演示模式应用的。由于本书是 Prentice Hall 出版社的面向服务计算系列丛书的一部分,我们很早就决定:大多数示例都采用供应商中立的技术。出于这个目的,在 Web 服务领域中选择可用的行业标准是件很自然的事情。为了保持抽象内容和基于 Web 服务的示例相分离,本书明确区分了“服务”和“Web 服务”。本系列中即将出版的其他书籍将给出使用其他技术来应用模式的例子。因此,你可以把本书视为一个大型出版计划中的第一步,后续还有一系列的书要出版。让我再次重申,这种情况只是个案。大部分模式并不是受技术进步启发而得到的,相反它们代表了受从业者启发、已被证明有效的设计技术。

InfoQ:您认为它们可以脱离 SOA 环境使用么?

TE:当然,毫无问题,来自其他目录的模式同样可以解决其他 SOA 相关的设计问题。与之类似,SOA 相关的任何技术(包括 Web 服务)也能够在非 SOA 环境下使用。这个目录的作用是为了提供对实现面向服务有帮助作用的设计解决方案集合。因此,如果你打算将一个模式用于其他目的,一个好的想法就是记住:在这个目录中,模式仅仅记录了跟该特殊上下文相关的东西(译注:即模式本身的内涵远远不止于此)。

InfoQ:您对 SOA 现状的总体看法是什么?您认为哪些方面我们已经有了非常不错的认识,哪些方面还有待新的研究?

TE:我很高兴看到越来越多的人在讨论“面向服务”,它才是任何被合法贴上“SOA”标签的东西的关键所在。我认为,随着面向服务范式越来越为主流 IT 所接受,对于组织如何取得历来都被认为是 SOA 所带来的战略收益,将会得到更广泛地理解。关注范式还有助于克服歧义和误解,正是它们导致了对 SOA 采纳情况的失望,因为它们试图在不实际应用面向服务的情况下实施 SOA。至于我们需要在哪些方面进行新的研究,我可以给你拿出一份相当长的愿望清单,范围从服务建模符号和复杂服务组合,到治理和组织变革实践。

InfoQ:这是您第二次明确区别“SOA”和“面向服务”。您能大致总结一下您对面向服务的定义以及它跟 SOA 的区别么?

TE:尽管 SOA 一词经常被厂商和媒体拿来指代任何跟服务沾边的东西,但一旦你处于实际的交付生命周期中,你就需要清楚地认识到“是什么使一个技术架构成为面向服务的?”。正是这导致了划清面向服务和面向服务技术架构之间关系和区别的需求。这里有一种方法可以把事情弄明白:

面向服务是一种范式,它形成了构建软件程序的方法基础,以便使它们共同帮助实现某个特定的目标状态。

这个目标状态由一组跟面向服务计算相关的战略目标描述。面向服务的应用在某种意义上导致了被认为是面向服务逻辑单元(它们被称为服务)的软件程序的产生。

面向服务的技术架构,在支持服务及由一个或多个服务构成的解决方案(它们被称为面向服务的解决方案)和促进面向服务的方面有独特的特点。

因此,“简明”的回答就是:面向服务是一种特殊的范式,你可以用它来实现某种特定的目标状态;如果一个技术架构拥有支持应用这个范式必需的全部特性,那这个技术架构就可被认为是面向服务的。

我明白这是一个相当抽象的定义,但在进一步说明相关问题(如“面向服务实现的目标状态是什么?”,“面向服务计算的战略目标是什么?”,“面向服务 范式包含了哪些内容?”,“面向服务技术架构的必需特性是什么?”等)之前,本系列迄今为止我们所写的大部分内容都一直在致力于回答这些问题。

我认为,如果你刚刚接触面向服务,那么理解上述的目标状态(以及实现该状态的必需条件)是必需的,因为正是它来帮助你判断面向服务是否支持你的业务 目标和优先级,以及在实施它的时候所进行的投资程度。只要你选择采用它,那么理解面向服务本身就成为了成功实现这个目标状态的核心要求之一。

InfoQ:您如何看待模式目录在 SOA 实施中所起的作用?

TE:一种看待模式的方式是把它们当作经验丰富的从业者的一些建议,只不过这些建议碰巧出现在了正式的出版物中。

因此,要是你正在实施项目并发现自己正面对一些特别的挑战,模式目录会是一个有用的资源。或许你会发现问题的确切答案,又或你会发现某些相关技术和 实践会启发你自己找到那个唯一的解决方案。你甚至能够通过将特定模式组合成一个应用序列来组装一个设计解决方案。另一方面,你正在处理的问题或许还没有被 记录成模式;或者该问题已被某个模式解决,但你却不喜欢建议的解决方案(所谓尽信书不如无书,你不一定非得按模式来)。

模式发挥作用的另一个情况是在你正规划一个 SOA 项目并希望更好地理解他人已经解决的常规挑战的时候。其实,某些模式确实能帮助你定义实施计划。例 如,领域目录(Domain Inventory)就是通过建议将实施工作分割或阶段化成可管理、独立的领域方式,为大型 SOA 项目提供一种通用解决方案的模式。

我还发现模式是一个非常有用的学习工具,特别是在学习那些更基础知识的时候。由于这些模式是专门针对于实 现面向服务的,通过研究它们建议的设计解决方案,你可以真正深入理解面向服务范式的独特特性。这种层次的理解不仅可以揭示 SOA 模式解决问题的方式,还揭 示了它们使用该方法解决问题的原因。

InfoQ: 非常感谢您接受采访!

TE: 谢谢。在访问的最后,我期望人们能访问 soapatterns.org 站点,并能将经验贡献出来。该站点允许你提交和审阅模式候选,这样它们就能在社区的参与下得到进一步发展,从而使 SOA 模式目录与时俱进。

请下载 Thomas Erl 的《SOA 设计模式》一书的样章,该书已由David Chappell,Jason Hogg,Anish Karmarkar,Mark Little,David Orchard,Satadru Roy,Thomas Rischbeck,Arnaud Simon,Clemens Utschig,Dennis Wisnosky 等共同编著完成。

版权声明:该样章摘自由Thomas Erl 等人共同编著的《SOA 设计模式》,该书已由Prentice Hall 于2009 年1 月出版,并且是Thomas Erl 主编的Prentice Hall 出版社面向服务计算系列丛书的一部分,它的ISBN 是0136135161。欲知该书详情和所有模式目录,请访问 www.soapatterns.org

查看英文原文: Interview and Book Excerpt: Thomas Erl’s SOA Design Patterns


给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家加入到 InfoQ 中文站用户讨论组中与我们的编辑和其他读者朋友交流。

2009-04-30 00:053996
用户头像

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

关注

评论

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

【秋招面试专题解析】成功入职头条月薪35K

欢喜学安卓

android 程序员 面试 移动开发

【性能优化实战】Android架构组件Room功能详解

欢喜学安卓

android 程序员 面试 移动开发

当企业遭遇分布式拒绝服务 (DDoS) 攻击时,第一时间该如何进行操作?

九河云安全

这些智能合约漏洞,可能会影响你的账户安全!

华为云开发者联盟

区块链 智能合约 安全 形式化验证 华为区块链服务

【Git技术专题】如何使用git中的tag进行版本开发控制?

洛神灬殇

git 8月日更

Java代码中,如何监控Mysql的binlog?

码农参上

Binlog 实战

如何用EasyRecovery恢复U盘内损坏的数据

淋雨

文件恢复 硬盘数据恢复 Easyrecivery

态势感知一屏可视:数治安全,智理未来

一只数据鲸鱼

网络安全 数据可视化 数据监测 数字孪生

你使用的SimpleDateFormat类还安全吗?

华为云开发者联盟

Java 安全 线程 高并发 SimpleDateFormat类

频繁出现的分布式拒绝服务 (DDoS) 攻击​,有什么办法可以抵御吗?

九河云安全

编译脚本:编写CMakeFile(一)

正向成长

CMakeFile

我两年的坚持,值了!

程序员鱼皮

Java JavaScript 腾讯 职场 大前端

「跨链网关的模块化进程」插件机制演化

趣链科技

【吐血整理】大牛耗时一年最佳总结,让你的app体验更丝滑

欢喜学安卓

android 程序员 面试 移动开发

FIL分币系统源码|分销商城功能开发模式介绍

Geek_23f0c3

fil Fil算力挖矿分币系统 Filecoin分销商城

DataPipeline荣膺CFS第十届财经峰会“2021数字化转型推动力奖”

DataPipeline数见科技

大数据 数据融合 数据管理

gitlab无法通过ssh拉代码

阿呆

#GitLab

LeetCode题解:173. 二叉搜索树迭代器,栈,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

经验之谈:程序员应该如何学好大数据技术

博文视点Broadview

手把手教你怎么导入Go语言第三方库「让我们一起Golang」

Regan Yue

后端 Go 语言 8月日更

android 工作资料!职场中的中年危机

欢喜学安卓

android 程序员 面试 移动开发

立体车库数据管理被卡脖子?织信车库管理系统全面掌控车辆新状况

优秀

低代码

基于 Apache APISIX,新浪微博API网关的定制化开发之路

API7.ai 技术团队

Apache 网关 APISIX 微博

混合基础设施下,服务网格(Service Mesh)如何对应用进行统一管理

韩陆

啃书一年多的我,推荐Python初学者不要在乱看书了,有这三本就妥妥的

冇先生

24岁,月薪35k!全靠这份阿里P5-P9知识核心手册+10W字面试题总结

Java架构追梦

Java 阿里巴巴 架构 面试

体验有奖 | 1 分钟 Serverless 部署掌上游戏机,“一行命令”找回小时候的乐趣!

Serverless Devs

FastApi-04-请求体-1

Python研究所

FastApi 8月日更

TRTC代码示例文档集合完毕!哪里不会点哪里!

腾讯云音视频

腾讯云 音视频 API sdk

分布式拒绝服务 (DDoS) 攻击对企业运维造成的影响分析

九河云安全

迅捷录屏大师 Tech Support

凌天一击

访谈及书摘:Thomas Erl的《SOA设计模式》_SOA_Stefan Tilkov_InfoQ精选文章