10 月,开发者不可错过的开源大数据大会-2021 WeDataSphere 社区大会深圳站 了解详情
写点什么

SOA 和敏捷:是朋友? 还是敌人?

讨论

2007 年 4 月 22 日

SOA 的目标是以服务作为构建企业应用的“积木块”,使整个企业敏捷起来,而敏捷软件开发则是通过引入一些最佳实践来增加沟通与反馈,以达到同样的目的。哪个是正确的?哪个更好?我们正在拿苹果和桔子做比较吧?它们可以一起使用吗?如果可以,那怎么使用呢?很难用一篇文字来彻头彻尾地评判 SOA 和敏捷,所以让我们一同来关注它们吧。本文仅是关于这个讨论主题中一系列文章之一,随后将有更多的内容。

方法论和架构是互斥的吗?

有人认为,软件开发实践与架构是不重迭的。在其它环境中这么说也许是正确的,但在这个主题中却不尽然。一方面,敏捷方法(例如 XP)直接关注设计,不是特别同意预先做大量设计(BDUF) 的观点。另一方面,大多数SOA 团队主要是围绕构建一系列服务而组成的功能性团队。SOA 本质上鼓励有特性的团队结构和团队间的沟通方式,而这两点又都属于方法论的范畴。

敏捷与SOA 是朋友

SOA 是一种架构,强调业务必须能满足市场要求,而且通过构建各种服务,可以消除重复,并达成“重用”这一很难捉摸的目标。团队通过构建“服务”而非“应用”,来平衡企业内部和外部的工作。

敏捷是一种方法论,强调事物是变化的,软件开发团队必须拥抱变化,并对变化做出反应。通过引入技术性和非技术性实践,团队可以使业务敏捷起来。

架构和方法论是可以一同使用的,它们本质上是互补的。而且,SOA 和敏捷的目标相同,它们都承认 (1) 变化是必然的 (2) 组织需要有效地应对变化。所以,我们期望在构建 SOA 时,能够选择敏捷方法论,反之亦然。对吗?

敏捷和 SOA 是敌人

你可能认为既然目标相同,这两种技术必定是一致的,没有冲突的,也就意味着实践与架构的重迭。但在这一点上,SOA 社区和敏捷社区都有不同的声音。为什么会这样呢?

主要原因之一就是,它们的出发点不同,最初的方向也不相同。尽管最近几年敏捷快速发展,社区中获得很多经验并总结了“敏捷宣言”,并将其应用于大项目,但从发展史上看,敏捷还是“草根”,从小项目中走来。而SOA 是新兴的,具有自顶向下的本性,使用“分而治之”的方法来进行软件开发。这种方法,尤其是其中的“分割法”, 很容易会导致团队间的沟通不畅,如文档、规范等等。

SOA 和敏捷在以下三方面有冲突:

  1. SOA 鼓励架构设计在前,而敏捷对这种称为“BDUF”的方法持相反观点。
  2. SOA 鼓励按功能线索来划分团队,而敏捷倾向于以交叉功能式组建团队。
  3. SOA 中,服务一旦建立起来,SOA 就不再对服务的变化做出相关的反馈,而敏捷则强调及时反馈,无论是技术层面,还是人的层面。

当前现状

现在,虽然很少有文章涉及这一主题,但我还是找到了几篇文章:

Carl Ververs 描述了使用一整套的敏捷实践来构建一个 SOA,并与开发人员共同完成了它(见 Agile: The SOA Hangover Cure )。遗憾的是,这只是一个团队构建了一套服务。在另一个 InfoQ 的访谈中,Geoff Henton 和 Tom Stiehm 也讨论了使用敏捷方法构建 SOA。这篇文件似乎说的是一个项目中的一套服务,它仅是一个敏捷尝试,内部团队的交流如何?当服务完成后,上百个客户在使用这些服务,此时这些服务需要改变,如何维护呢?我建议:一是 SOA 团队应通过测试而非文档进行沟通,二是 Frank Grossman 的观点,但在异构环境中究竟该如何做呢?

此外, 根据我对SOA 团队的个人观察,从来没有发现有在内部团队方式上做任何敏捷实践的。团队被划分开,实现各自的服务与应用,通过分散的会议、文档和WSDL 进行沟通交流。SOA 鼓励BDUF,并很少为服务本身可能的变化做准备。

本文比较短,坦白地说,是因为我也不知道答案。这只是该主题上的第一个讨论。我们将以开放的形式进行,总结过程中出现的重要问题并分别讨论它们。欢迎并鼓励任何评论。

查看英文原文: SOA and Agile: Friends or Foes? - - - - - -

译者简介:乔梁是 InfoQ 中文站的志愿者翻译, BJUG 成员,在 IT 领域工作多年,先后从事过软件开发、架构设计、技术管理等工作,目前从事项目管理工作。关心软件技术领域发展,对软件生命周期管理及过程改进方面的内容很感兴趣,对敏捷方法论亦有所了解。他的个人 Blog 为: http://blog.csdn.net/tony1130 。加入 InfoQ 中文站志愿者翻译队伍,请邮件至 china-editorial@infoq.com

2007 年 4 月 22 日 00:05775
用户头像

发布了 100 篇内容, 共 17.9 次阅读, 收获喜欢 4 次。

关注

评论

发布
暂无评论
  • SOA:我们从这里走向何处?

    “关于SOA是否已死,还是生机勃勃,又或根本未曾存在,还是消逝在新墨西哥的罗斯韦尔,争论已经足够了。不容争辩的事实是,许多组织正朝着至少将他们的业务应用产品的一部分面向服务化而努力,而这还会增长。”Joe Mckendrick谈到,那么从这里出发我们将奔向何处?

  • 是否该重新衡量 SOA 产品了?

    Gartner分析师Roy Schulte是SOA方面的专家,他参与编写了1996年那份为业界引入SOA这一术语的Gartner报告。前不久Susan Hall对他进行了采访。此次采访试图回答这样一个问题,即是否应该重新调整对SOA的期待了?

  • 通俗地理解面向服务的架构(SOA)以及微服务之间的关系

    SOA是一种软件的应用架构方法,它基于面向对象,但又不是面向对象,整体上是面向服务的架构。SOA由精确的服务定义、松散的构件服务组成,以及业务流程调用等多个方面形成的一整套架构方法。 这话是不是听起来,让人觉得有点晕,我们就细细品读一下。

    2021 年 3 月 30 日

  • SOA 的未来怎样?

    有关SOA未来的讨论每隔几年就会掀起一次。最近一次是由McKendrick的博客中启动的,探讨的是SOA如何变身为EA、云、EAR、BPM甚至全部。

  • 专访与书摘:Nicolai Josuttis, "SOA in Practice"

    InfoQ发布了Nicolai Josuttis的新书《SOA in Practice》的样章。InfoQ对作者进行了采访,内容涉及他对SOA的看法,业界对它的一些主要误解和SOA的关键成功因素。

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

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

    2021 年 8 月 14 日

  • 事件驱动架构与面向服务架构

    事件驱动架构(EDA),作为构建更好的SOA的有益且可行的选件,开始出现在人们的视野中。David Luckham最近发布了一个由两部分组成的论文支持这一主张,InfoQ同样也发布了一篇关于BI和SOA的文章来阐述它。

  • 为什么 Netflix 没有运维岗位?

    在运维这个细分领域,Netflix是最佳实践的典范。今天我们一起来看Netflix是如何定义运维以及如何开展运维工作的。

    2017 年 12 月 20 日

  • SOA 的管理策略

    Mike Kavis为SOA协会撰写了一篇文章,他在文中将SOA的成功实现归结为4个因素:人员、流程、技术和业务。他认为,一个好的管理策略将创建和传达一个路线图,它将划分出这些领域中的可提交结果。

  • “一问一答”第 3 期 | 18 个软件开发常见问题解决策略

    通过对开发模块的学习,可以帮助你在项目中搭建持续集成环境,推行自动化测试,改进基于源代码管理工具的开发流程。

    2019 年 5 月 9 日

  • 企业 SOA 到头了?

    Joe McKendrick、Jeff Schneider与其他人讨论了企业SOA是否已踏上不归路,毕竟务实/非正式(pragmatic/guerilla)SOA可能是最佳方法。

  • 文章:SOA 和敏捷:是朋友?还是敌人?

    SOA的目标是以服务作为构建企业应用的“积木块”,使整个企业敏捷起来,而敏捷软件开发则是通过引入一些最佳实践来增加沟通与反馈,以达到同样的目的。这两个来自软件开发社区,而且都举足轻重的“家伙”是朋友?还是敌人?

  • 2011 SOA 虚拟研讨会

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

  • 资助 SOA

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

  • DevOps、SRE 的共性:应用全栈思路打通开发和运维

    我讲述了DevOps和SRE的目标、原则和具体实践,并结合实战给出了通过“人、流程、工具”的步骤落地DevOps的方案。

    2019 年 9 月 9 日

  • 一封普通的 SOA 检讨书

    Gartner的分析师以虚拟一个SOA架构师/工程师给CEO/CTO写信的口吻,从他们的角度解释了SOA为什么会失败。尽管这只是一个虚构的故事,但也提示了一些有趣的观点。

  • 用消费者驱动的契约进行面向服务开发

    在本文中,Ian Robinson讨论了以“服务故事(stories for services)”和服务开发线(service development streams)间交换的单元测试为形式的“消费者驱动的契约(consumer-driven contracts)”何以能增强面向服务开发的生命周期。不同于从提供者角度定义的契约,消费者驱动的契约是通过组合所有已知服务消费者要求得到的。

  • 我们高呼的下一代微服务 Service Mesh 到底是什么?

    考虑到有的同学之前可能没有接触过 Service Mesh 这个概念,所以这里我先对 Service Mesh 做一个简单介绍,作为后续内容的基础。

    2018 年 3 月 17 日

  • DevOps 的“定义”:DevOps 究竟要解决什么问题?

    今天,我带你一起梳理一下DevOps的发展历程。希望你能通过今天的课程,建立起你自己对于DevOps的独特认知。

    2019 年 10 月 8 日

发现更多内容

微信业务架构

Fleng

架构实战营

作业1-20210406

Geek_b437fc

区块链技术,通证经济未来趋势,两者有什么关系?

CECBC区块链专委会

区块链

架构实战营 模块一作业

ercjul

架构实战营

架构实战营 模块一 课后作业

Lingjun

架构实战营

【粉丝需求】如何把一个前端网页都搞下来?

孙叫兽

前端

vagrant同步目录问题引发的一系列问题

尧二水丶

vagrant 虚拟机

华仔架构设计-模块1作业

大师兄

vue接入腾讯实时音视频trtc-js-sdk的技术难点与解决方案

孙叫兽

Vue 音视频 解决方案 trtc-js-sdk

业务架构训练营第 0 期模块一作业

菠萝吹雪—Code

架构实战营 模块1 课后作业

Keyto

软件架构设计分层模型和构图思考

xcbeyond

方法论 分层架构 架构设计 4月日更

架构实战营 模块一 总结

Pitt

区块链技术解决信任问题

CECBC区块链专委会

信任 信任机制

区块链技术引领新一轮技术变革浪潮

CECBC区块链专委会

模块一作业

鲲哥

架构师实战营 模块一作业 微信业务架构图

好吃不贵

Python系列:初遇python

Bob

Python 编程 4月日更

换工作需要做哪些准备

zhou

职业规划

模块1作业

王硕

架构实战营

架构实战营 模块一 作业

Pitt

CLOSE_WAIT过多导致Jetty服务器假死

风翱

Java Jetty Web 4月日更

业务架构:微信与学生管理系统

我不是坏人

常用正则表达式整理【总结】

孙叫兽

正则表达式 前端 正则

架构实战营 模块一作业

Dylan

架构实战营

Redis 6.0 多线程、客户端缓存、权限控制

escray

redis 学习 极客时间 Redis 核心技术与实战 4月日更

复兴or幻象?VR的2021三重门

脑极体

博文推荐|多图详解 Apache Pulsar 消息存储模型

Apache Pulsar

大数据 开源 流计算 Apache Pulsar 消息系统

有哪些可以提高代码质量的书籍推荐?

Guide哥

Java 架构 计算机基础 重构 代码质量

Wireshark数据包分析学习笔记Day26

穿过生命散发芬芳

Wireshark 数据包分析 4月日更

学生管理系统架构

Fleng

架构实战营

SOA和敏捷:是朋友?还是敌人?-InfoQ