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

2010 年 7 月 21 日

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

在 SearchSOA 上,Rob Barry收集了一些关于自底向上和自顶向下两种方法的观点:

当增建 SOA 时,一个自底向上的治理方法会关注于将围绕一些可以快速组装的 ESB 个体的服务集成起来。这种方法由于需要过度的更新和随后的返工而遭遇批评。与此同时,与之相反的“自顶向下”的治理方法包括了周密的计划和严格的政策规范。但该方法也存在缺陷,因为它需要花太多时间才能产生结果。

文章汇集的观点认为:基本上,如果主要的目标在于集成,自底向上方法是一个不错的出发点。他们也认同自顶向下的方法需要更多业务的介入。至于到底是使用哪种策略,他们的结论是这取决于业务和 IT 的关系。

Barry 在 ebizQ 上的一篇博文点燃了导火索,引起了不多但却很有意思的回复。在其中一个回复中,Avi Rosenthal 基于你正要构建的东西对两种方法进行了区分:

SOA 是一种架构风格。构建架构是自顶向下而不是自底向上的。Web Service,有时错误的被定义为 SOA,是技术性的。Web Services 是自底向上构建的。自底向上地构建 SOA 是错误的方法,有时也被称为 ABOS(一堆服务)。如果你自底向上的构建 SOA,那么很有可能你最终会得到很多冗余的东西,而毫无架构可言。尽管如此,如果仅仅通过自顶向下构建 SOA,其结果往往是得到不能构建在任何运行时产出物之上的感性架构,因此应该将 SOA 的一些工作放在自底向上的事情上。总而言之:最开始,SOA 是自顶向下的方法,但实际使用中需要同时结合自顶向下和自底向上两种方法。

在对该问题的另一则回复中,Michael Poulin 认为 SOA 以用户为中心的本质迫使了自顶向下的方法的使用:

如果从现在你已有的东西去构建服务——使用自底向上方法的话——最终很可能以你有什么而告终,而不是你的用户需要的。SOA 是以用户为中心、业务为导向的架构。以用户的需求为出发点将使你不得不去使用自顶向下的方法。这始终都可以作为出发点。但是,接下来,你最好评估你自身的能力,比如,挖掘你的最底层的资源来审视用户的需求。

这样的争论已经不是什么新鲜事儿了。早在 2005 年,John Crupi 就撰文称 SOA 是业务驱动的架构风格,正因如此只有自顶向下的方法才能获得成功:

自顶向下,意味着从问题,到架构,再到解决方案。它并不是指,从我们现有的东西着手,然后采用一些新技术对其进行包装,仅仅就因为我们可以使用这些技术。虽然自底向上的方法看起来是那么自然和简单,好像是治疗 SOA 失败的绝妙处方。

在那以前,还有其他一些诸如 Bill de hÓra 的博文那样反对“自顶向下或失败原则”的声音:

仅仅使用自顶向下方法的困难之处在于并不存在所谓的“顶”,现实中的 SOA 系统往往是分散式的——不存在架构杠杆支点或治理点,没有哪一个人有能力声称,“他可以十分钟之内做出决定或是下一个决定是有效力的,立刻就能付诸执行”。

这样的争论已经持续很多年了。到目前为止,看起来一些工具厂商已经选择了自顶向下的策略。


查看英文原文: The Top-Down vs Bottom-Up SOA Debate Revisited

2010 年 7 月 21 日 11:50 2113
用户头像

发布了 0 篇内容,共 22 次阅读,收获喜欢 0 次。

关注

评论

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

用户故事为什么要关联开发数据?

Worktile

敏捷开发 开发数据

GrowingIO 大数据多维分析自动化测试实践

GrowingIO技术专栏

大数据 自动化测试 parewise

「首度揭秘」大规模HPC生产环境 IO 特征

焱融科技

sds io 高性能 存储 焱融科技

10分钟了解Flink

代码诗人

Nginx 入门及命令行操作

子杨

nginx 运维

工厂模式(三)泛型工厂的概念以及示例代码

LSJ

Mysql常用删除方式比较

云也退

MySQL

我们可能都误解了什么是情商

七镜花园-董一凡

情绪

阿里巴巴为什么让初始化集合时必须指定大小?

王磊

Java 性能

终于找到了一篇文章!通俗地讲解计算机工作原理

图灵社区

cpu 存储器 编译器 计算机工作原理

卧槽,接到一个阎王的需求

码农神说

程序员

Android 通过opencv实现人脸识别,追踪

sar

android OpenCV 人脸识别

神经网络中为什么不能将权重初始值设置为一样的值

王坤祥

神经网络 机器学习

ARTS_20200529

凌轩

Java ARTS 打卡计划

“Plus Token”传销主犯被公诉!警惕,区块链不是“取款链”!

CECBC区块链专委会

1024讲话 CECBC 区块链技术 人才发展 培训

你有信息焦虑症吗?

Neco.W

创业 学习方法 知识体系

基于 Markdown 的中文文档排版规范

Murphy

markdown 排版规范 GitHub GFM 物联网学前班

Go netpoll I/O 多路复用构建原生网络模型之源码深度解析

潘建锋

go 源码分析 网络编程 多路复用 开源项目

游戏夜读 | 改写图形API的意义

game1night

2020智源-京东多模态对话挑战赛开战 产学研联合推动AI技术发展

DT极客

奈学干货分享:分布式CAP实践分析

奈学教育

分布式

为什么你要学习 Go?

司徒公子

go golang 编程语言 谷歌Google

图片与标题的Ken Burns动效

寇云

CSS css3

架构师训练营0期开营

刁架构

架构师

从位图到布隆过滤器

王坤祥

位图 布隆过滤器

kudmp介绍和安装

唯爱

Nginx 基础原理和命令行的真相

子杨

nginx 运维

Weex开发:页面跳转以及Android端多应用选择窗口的处理

brave heart

android Vue 大前端 跨平台 Weex

幂等问题及解决方案

Joker

幂等 解决方案

备案问题汇总

云也退

网站 备案

Cassandra可调一致性的使用及原理

老任物联网杂谈

大数据 分布式 Cassandra 可调一致性

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