免费下载!由 O’Reilly 出版的《NGINX 完全指南》中文版已正式上线 了解详情
写点什么

微服务与 SOA

  • 2014-06-17
  • 本文字数:2377 字

    阅读完需:约 8 分钟

过去的几年来,“微服务”这个术语逐渐得到关注,它描述的是由一系列更小的服务所组成的架构。在 QCon San Francisco 2012 上,Thoughworks 的 James Lewis 针对这个概念发表了演讲,同时还就这个话题与 Martin Fowler 合作撰写了一篇文章。最近,Steve Jones加入了讨论,他认为微服务并不是大家所认为的那样,是什么新东西,而只是SOA 的另一个叫法。为了证明这一点,他对微服务目前的定义和 OASIS SOA 参考模型进行了对比。他遵循了 James 和 Martin 在他们的文章中所列出的要点:

通过服务实现组件化:OASIS SOA 参考模型这样写到:

面向服务架构(Service Oriented Architecture,SOA)这个范型是用来组织和使用分布式能力(capability)的,这些能力可能由不同所有者的域来进行控制。

Steve 指出:

根据 OASIS 可以得出 WTF 实际上也是一种服务, - 为其他人执行任务的功能

  • 为其他人提供的任务规范
  • 能够为其他人执行任务

在 SOA 中,按照服务的机制,可以将需求和能力组织在一起。

在这个话题上,Steve 对比了 Martin/James 的说法:

服务是进程外的组件,它与组件明确的接口进行交互

围绕业务能力进行组织:这是 Steve 认为 Martin 产生误解的地方,并且相信微服务并不是新的东西。OASIS SOA 参考模型将能力(capability)定义为:

服务提供者所能够提供给服务消费者的一种真实的效果。

Steve 指出区分能力(谁做这项任务)与服务(组织化的结构)是非常重要的。

在过去的十多年间,我们在第一线实践 SOA,与 OASIS SOA RM 这些富有经验的人的共同发现就是 _ 组织化的框架(organising framework)_ 与行为本身是分离的。至关重要的原因就是人们在开始制定服务的时候通常将服务等同于能力(service = capability),这样最终你会有很多很多的服务(如果刻薄一点的话,我可能就会将其称之为微服务了)。

他认为尽管在这个话题上 Martin 的说法是可以的,但是并没有参考过去的重要材料。

这是新鲜的事物吗?我甚至编写过一本书来阐述如何围绕这种方式建模、管理和组建团队。 SOA Manifesto (2009)讨论了 SOA 背后的关键理念(尽管我还是更欣赏 RM),这是由大量的实践者做出的。这里有两个问题,第一就是混淆了服务与能力,第二是在管理方面没有充分识别层级(hierarchies)的重要性。

基于产品而不是项目(Products not Projects):Steve 说在这个话题上 Martin 和 James 的文章比 SOA RM 介绍的更深入,但是依然没有什么新鲜的东西。

在 Google 上快速搜索一下就能看到在这个问题上已经有了很多的材料,有一些材料比其他的更好,也有一些更棒的产品,但是在这方面的确没有什么新鲜的。我曾经使用过这样一个术语“关注程序而不是项目(Programs not projects)”,并且经常会谈及将完整的生命周期分派给架构师,从而“使其更加具有责任感”。同样,这种说法完全没有错误,而是没有什么新意。多年以来我们就已经知道这会有所帮助,但是它有一个很明显的问题:成本。

智能端点与哑管道(Smart endpoints and dumb pipes):Steve 完全同意这一原则,但他同样认为这并没有什么新意。他的说法略微有些不同:

在 OASIS SOA RM 中有一个“执行上下文(execution context)”的概念。这是服务被调用及其能力被触发的地方。显然,端点是“智能的”,因为它是用来完成工作的,因此上文中用到了“机制(mechanism)”这个词。“通道”可能是也可能不是哑的(我认为与火星上的漫游者进行对话“通道”是相当智能的),但它们是什么 并没有什么价值。这是在 SOA 中的一项重要发现,并且在 SOA RM 进行了很好的记录。执行上下文是所有内部任务完成的地方,但服务提供了访问能力的入口,能力是交付价值的所在。

去中心化的治理(Decentralized Governance):在有些方面,Steve 同意 Martin 和 James 的观点,但是……

我认为这是一个好的建议,在管理方面,SOA 比微服务做的更好。正如 OASIS SOA RM 所述, SOA 允许将这些理念应用到所有的 IT 资产上,而不仅仅是根据特定风格实现的资产,事实上,仅仅考虑 IT 资产是商业课程上就讲授过的方式。

微服务与 SOA:在开始的时候,James 和 Martin 的文章似乎并没有参考 SOA(也许参考得不够,也许根本就忽略了)。最近,在与 Steve 进行了交流后,针对这一话题,文章添加了一个侧边栏(sidebar)。不过,Steve 认为这不仅是远远不够的,反而与事实毫不相干:

[…] 这并不是 SOA 的真正定义,而只是介绍了陈旧的“庞大的”ESB 以及 WS-* 术语,REST 拥护者(RESTafarians)在阐述他们的方式为何更好时惯用这样的手法。按照这篇文章的说法,它“清楚(crisply)”地描述了微服务的风格,因此在与 SOA 的对比方面也是有根据的,他们将 SOA 描述为“SOA 意味着太多的事情”。这一点上,我完全不能同意,首先如果能够阐述清楚如何适应非微服务的方式,那微服务可能更多的是一种实现,这一点上 SOA 已经做得很好了,其次,它没有解释什么能够使服务变得“微小(micro)”,服务可能是由规模恰当的团队(12 个人)制定的,也可能是单个人制定的。

最后,Steve 重复了他的观点,那就是微服务并不是什么新鲜的理念,仅仅是一种面向服务交付(Service Oriented Delivery)的方式。在他看来架构师和开发人员最好使用 SOA,因为它的定义更加完备并且现在已经取得了更多的经验。与其将微服务定义为什么新事物,还不如谈论一下“如今”的 SOA。Steve 这样说到:

另外,在文章的脚注中重点提及了 Netflix,实际上它所使用的词汇是“细粒度的 SOA”,另外一个案例(Amazon)讨论的也是 SOA

那么您的观点是什么呢?微服务仅仅是 SOA 呢,还是提供了一些根本上有所区别的东西呢?

查看英文原文: Microservices and SOA


感谢张龙对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-06-17 03:118088

评论

发布
暂无评论
  • ESB 这个词到底是什么意思?

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

  • 十年 SOA:当前的位置和未来的方向

    SOA 10岁了。在这次虚拟研讨会中,InfoQ聚集了几位经验丰富的企业架构师来分享他们的观点,他们是:Jeff Andre,Eric Ballou,Dave Hollander和William El Kaim。他们谈到了重用、业务/IT对齐、治理……

  • 资助 SOA

    在Web上的一个快速搜索表明,资助SOA几乎像禁忌话题一样很少有人提到。Todd Biske为我们提供了一个Gartner应用体系结构开发与集成(AADI)高层会议上对这个话题讨论的概要。

  • SOA 与云计算有多大关联?

    在最近的ebizQ的云QCamp大会上有一个分会场讨论了云计算的当前状态以及它与SOA之间的关系等话题。与会成员达成的共识是云能够加强SOA所承诺的那些优势,并促使其为业务提供更坚实的基础。

  • 自顶向下还是自底向上—SOA 之争战火重燃

    开源ESB厂商MuleSoft在宣布其管理控制台发布时,声称支持使用自底而上的方法来实现SOA管理理念,在这之后,SOA社区中一个一直以来争论不休的话题:使用自顶向下还是自底向上的SOA方法,又引起了大家新一轮的争论。

  • 19|如何将模型实现为微服务?

    在我看来,行业内做伪微服务的人多,而做真微服务的人少。很多问题不值得去解决,因为没有将问题定义清楚。而一旦明白什么是真微服务,大多问题都变得不言自明。

    2021-08-14

  • Michael Poulin 炮轰 SoaML

    Michael Poulin对SoaML规范提出了批评,认为它是一个以角色/参与者为中心的模型,不是一个以服务为中心的模型。在他看来,SoaML搞的就是一种权力、责任和义务的结构,以该结构而非业务需求作为企业服务架构的基础将有损于面向服务的精神。

  • 方面和服务,差别大吗?

    Arnon Rotem-Gal-Oz认为,那种认为一个东西不是单体就是微服务的观点是无稽之谈。同时,他认为,越来越多声称是微服务的实现并不完全符合微服务的原则。不过,他并没有低估对于半独立可部署软件组件的需求,并探讨了一种他发现非常有用的方法“方面(Aspect)”。

  • 书摘与采访:SOA 100 问 - 问与答

    Kerrie Holly和Ali Arsanjani编著的《SOA 100问:问与答》一书深入解析了SOA,它涵盖了很多SOA相关的话题,包括SOA基础知识,它对业务及组织的影响,SOA方法与架构以及SOA的未来。InfoQ就这本书采访了作者Kerrie Holley和Ali Arsanjani。

  • 打住!SOA、SOA 2.0、ROA 和 WOA,缩略词也太过头了吧?

    当SOA 2.0风头已过,REST vs SOA vs Web服务的争论也不像之前那么激烈的时候,业界又有一些人开始宣扬面向Web的架构(WOA)。可这和现有的东西有任何区别吗(比如REST)?如果有的话,它是什么,它又是怎么样帮助开发者和部署者的呢?来自Burton Group的Anne Thomas Manes认为这一术语有些过头了,也并没有为现在的争论带来任何的价值。

  • 2011 SOA 虚拟研讨会

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

  • 溯源微服务:企业分布式应用的一次回顾

    本文是对企业分布式应用的一次回顾,与前微服务时代相比,我们究竟在哪些领域吸取了教训,哪些方面持续搞砸。

  • 一种针对 SOA 的消息类型架构

    这篇文章提出了一种新的消息类型架构,它以两个DSL为基础,起到了帮助管理SOA中消息格式的作用。这种方法通过消息类型定义中引用的企业数据模型促进了重用,并且有助于使数据治理流程和SOA治理流程保持一致。

  • 基于 Kubernetes 的 DevOps

    2019-01-02

  • 概念:设计模式

    2019-11-20

  • SOA 治理的仙境

    Michael Poulin详细阐述了治理和管理的区别并试图在面向服务的环境内探寻治理的“仙境”。他定义了SOA治理,探究了治理和企业架构的关系,讨论了治理工作的权责关系以及执行者SOA治理的手段。

  • SOA 与 DDD 存在共生现象吗?

    随着现实问题复杂性的增大,毫无疑问,我们有时需要综合多种技术才能解决这些问题。而面向服务的架构(SOA)与领域驱动的设计(DDD)之间良好的共生关系就是这样一个例子。

  • 持续交付和 DevOps 是一对好基友

    持续交付与 DevOps的关系可以概括为:DevOps 的概念更宽泛,是持续交付的延伸;持续交付更专注于技术与实践,是 DevOps 的工具及技术实现。

    2018-07-10

  • 使用 Spring Data REST 实现简单的超媒体服务(上)

    2019-03-28

  • 可扩展架构案例(一):电商平台架构是如何演变的?

    这一讲,我会针对最近十几年电商平台的架构变化过程,具体说明为了支持业务的快速发展,架构是如何一步步演进的。

    2020-02-28

发现更多内容

Java面试题整理《基础篇》,java面试宝典pdf百度云

Java 程序员 后端

JDK新特性——Stream代码简洁之道,spring视频教程在线观看

Java 程序员 后端

JVM 内存模型,百度笔试题百度校招面试经验

Java 程序员 后端

JVM性能优化(三)G1垃圾收集器,附大厂真题面经

Java 程序员 后端

JVM探究:全面解析OOM异常,都在这了,mysql数据库基础与实例教程孔祥盛

Java 程序员 后端

JDK的前世今生:细数 Java5 - 15 的那些经典特性,java高级程序员的要求

Java 程序员 后端

Java面试-final的内存语义,我就不信你还吃不透Java的泛型

Java 程序员 后端

Jenkins用户权限管理-Role-based Authorization Strategy插件

Java 程序员 后端

Jib使用小结(Maven插件版),Java程序员面试必备的知识点

Java 程序员 后端

JVM类加载你真的【了解】了吗(1),网易的朋友给我这份339页的Java面经

Java 程序员 后端

Java面试----2020年MyBatis常见实用面试题整理,字节跳动算法工程师面试

Java 程序员 后端

Java面试很难?靠这份文档学习2个晚上拿到阿里,网易等大厂offer

Java 程序员 后端

JSP 标准标签库(JSTL),javaee教程视频

Java 程序员 后端

JSP、EL表达式、JSTL标签,rabbitmq源码分析持久化

Java 程序员 后端

JVM性能优化(三)G1垃圾收集器(1),java原理书籍

Java 程序员 后端

JVM的YGC,这次被它搞惨了!,rabbitmq实战指南pdf最新版

Java 程序员 后端

JAVA面试——请记住这些,mybatis动态代理原理

Java 程序员 后端

Java面试题总结(乱序版,2020-08-20,面试总结+详细解答

Java 程序员 后端

JMX客户端及对commons-pool的监控,java工程师面试视频

Java 程序员 后端

JVM--运行时数据区与内存模型,java开发基础知识点

Java 程序员 后端

Java面试知识点解析——JVM篇,分布式中间件技术实战

Java 程序员 后端

JPA基本使用,Java虚拟机学习集锦是我攒来的

Java 程序员 后端

Json的FastJson与Jackson,java阻塞队列原理

Java 程序员 后端

JVM总体概述,java高级编程内容

Java 程序员 后端

Java高级特性——注解,kafka消息队列的实现原理

Java 程序员 后端

JNI开发之方法签名与Java通信(二),mongodb入门篇

Java 程序员 后端

Java面试八股文中,常问的那些spring高频题目解析,网易架构师深入讲解Java开发

Java 程序员 后端

Java面试通关要点汇总集,开发者必备的顶级Java开发工具

Java 程序员 后端

Java面试题原理和底层,java面试突击第二季

Java 程序员 后端

Jenkins集群下的pipeline实战,kalilinux使用教程pdf

Java 程序员 后端

JVM性能优化(四)提高网站访问性能之Tomcat优化,java程序开发实用教程邱加永答案

Java 程序员 后端

微服务与SOA_SOA_Mark Little_InfoQ精选文章