写点什么

SOA 为什么不“香”了?丨建设数据中台系列(三)

2020 年 8 月 06 日

SOA为什么不“香”了?丨建设数据中台系列(三)

SOA 所有的理念都是基于现有应用系统展开的,不管是对服务的梳理还是服务之间的交互,都是以现有应用系统为载体的,中台不同于 SOA 的地方在于:中台是一种平台化思维,它并不是从系统集成的角度去思考问题,而是从架构层面上重构了整个 IT 生态。相比之下,中台无疑是一种更深刻、更底层的变革,因为它完全破除了应用之间的壁垒,把企业的核心业务能力“中心化”,把它们提炼并沉淀到中台的各个业务中心上,而不是面向单一业务方向或渠道的应用系统上。这在 SOA 架构下是很难实现的,因为中台的业务中心与 SOA 的服务载体(即应用系统)之间有着本质区别,它们的定位和服务对象都不同,这些区别决定了 SOA 依然是一种相对松散的分治式的架构,很难与中台这种更加中心化、更为强力的架构体系相抗衡。


烟囱式的生态系统并不是今天才突显出来的,很多企业已经被这个问题困扰多年了,并且尝试过各种措施试图进行改善。回顾企业的 IT 生态变迁史,一段不得不提的历程就是 SOA(面向服务的架构)。本文核心观点援引自作者所著的《大数据平台架构与原型实现:数据中台建设实战》一书,全书对数据中台的理念、架构和具体实现做了详细论述。


大概在 2005 年前后的七八年间,随着 SOA 理念和相关技术(如 ESB)的不断发展和完善,SOA 在当时被认为是改善僵化的 IT 生态、解决烟囱架构等弊病的终极方案而被业界寄予厚望,很多企业在那个时期纷纷上马 SOA 项目,希望凭借 SOA 将企业的 IT 生态拉回到一种理想的状态。十多年后回首当初那场 SOA 热潮,我们发现最终在 SOA 改造上取得成功的企业少之又少,即使曾经取得了一定的成效,伴随后来新业务系统的冲击,当年辛苦建立的 SOA 生态也大都名存实亡,是什么原因导致了这样的结果呢?


人们很早就意识到点对点式的系统间交互是非常糟糕的,在 SOA 起源之前,已经出现了基于消息队列的“消息总线”架构,各个应用系统与消息总线连通,由消息总线负责将消息路由到接收方,从而让应用系统通过中心化的消息总线完成交互,这样就可以消除点对点式的系统交互。但是消息总线用于系统集成时在某些方面依然有所欠缺,例如消息都是静态的、预定义的、无法自描述的,消息接口无法被注册和发现。同时,另外一种以“服务”为视角看待和思考系统间交互的架构思想一直在不断地发展,后来,随着 Web 服务(Web Service)技术的兴起,IT 系统的对外接口逐渐向平台中立的第一代 Web 服务标准(WSDL+SOAP)靠拢,这为实施这一架构打开了大门,这就是 SOA。


从系统集成的角度看,SOA 是一种非常理想的方案,SOA 体系的两大核心如下:


  • 对系统提供的对外交互进行提炼、组织和梳理,通过封装、组合与编排,将接口以“服务”的形式发布出去;

  • 系统间的交互统一通过中心化的企业服务总线(ESB)完成。


典型的 SOA 架构如图 1 所示。



图 1 典型的 SOA 架构


SOA 成功的基础是对“服务”的提炼、组织和梳理,只有服务足够灵活才能支撑各种外部系统的复杂需求,而这一工作需要建立在对业务的深入了解之上,同时要融合良好的设计思想才能达到要求。


SOA 中的“服务”在技术上以 Web Service 为载体,但是在粒度(或者说抽象程度)上会有所不同,主要有如下三种粒度的服务:


  • 基础服务:最细粒度的服务,最基本、最原子的服务都会在这一层,从服务数量上看,这一层也是最多的;

  • 复合服务:是基于多个基础服务组合叠加而成的粗粒度服务,多用于封装并简化由多个基础服务组合实现的共性服务;

  • 业务流程:是通过工作流引擎将多个服务编排起来,形成一个完整的业务流程,这是一种粒度更粗的服务,常用于实现一个标准的、可复用的大尺度业务流程,如审批等。


在应用系统之间,SOA 依靠 ESB 实现系统集成,ESB 是治理点对点式的系统集成的核心手段,它肩负着如下重担:


  • 实现系统间的连通;

  • 数据转换;

  • 智能路由;

  • 安全控制;

  • 可靠性控制;

  • 服务管理;

  • 监控与日志。


以上是对 SOA 的一个基本介绍,SOA 针对烟囱架构的治理主要依赖于两个方面:


  • 一方面立足于每个应用系统,要求系统对提供的“服务”进行提炼和抽象,确保其灵活、可重用,这是让服务满足外部复杂需求的根本保障;

  • 另一方面是通过中心化的交互媒介——ESB 来约束系统间的交互,消除点对点式集成的负面影响。


但令人感慨的是:走到今天,SOA 已经很少被人提及了,回看企业曾经在 SOA 上做出的尝试和努力,最后的效果多数都不够理想。在完成 SOA 改造之后的若干年间,受到后续各种新系统的冲击,很多企业都没能坚守住自己的 SOA 体系,最终又回到了烟囱架构下的野蛮生长状态,这其中的原因主要是:


  • 沟通与协作成本高:新系统迫于业务需求和市场压力,急需上线,对负责的团队而言,与周边系统的对接和调试属于外部不可控因素,团队总是倾向于在内部可控的范围内解决问题,因此会刻意避开对外部服务的依赖,选择自建相关功能,这样一来,系统间的交互会向着衰减的方向发展,重复建设也因此随之蔓延;

  • 组织架构制约:团队往往缺乏为响应其他系统的诉求而改造和升级自身服务的意愿,因为新系统与他们没有直接的利益关系,企业也缺乏适当的奖惩机制促使各团队之间的积极协作,本质上,这是组织架构决定的;

  • 缺乏长效机制:SOA 改造常常是作为一个项目实施的,项目结束之后就不再有专门的组织和团队对 SOA 架构进行持续把控了,后续新的系统在融入 SOA 生态时受到的支持就减弱了,而新系统本身提供的服务也缺乏必要的梳理和管控,有的新系统甚至不对外提供服务。


这些问题并不是 SOA 自身的问题,而是一些普遍的现实问题,也是治理烟囱架构过程中遇到的深层次问题,这些问题阻碍了 SOA 在企业的落地和持续发展。所以说 SOA 是曾经的“救赎”,企业 IT 生态现在面临的问题依然没有得到很好的解决。


作者介绍


耿立超,架构师,14 年 IT 系统开发和架构经验,对大数据、企业级应用架构、SaaS、分布式存储和领域驱动设计有丰富的实践经验,热衷函数式编程。目前负责企业数据中台的架构设计和开发工作,对 Hadoop/Spark 生态系统有深入和广泛的了解,参与过 Hadoop 商业发行版的开发,曾带领团队建设过数个完备的企业数据平台,个人技术博客:https://laurence.blog.csdn.net/ 作者著有《大数据平台架构与原型实现:数据中台建设实战》一书,该书已在京东和当当上线。


建设数据中台系列


企业数据能力测评:认清现状,布局未来丨建设数据中台系列(一)


怎么走着走着就变“烟囱”了呢?丨建设数据中台系列(二)


中台架构详解(上)丨建设数据中台系列(四)


中台架构详解(下)丨建设数据中台系列(五)


“数据中台”有何不同?丨建设数据中台系列(六)


“数据中台”怎么建?丨建设数据中台系列(七)


2020 年 8 月 06 日 10:441267

评论 3 条评论

发布
用户头像
SOA是架构思想,跟ESB、soap webservice这些实现技术手段无关。ESB、soap webservice过时了,SOA没有过时,微服务架构也是SOA的一种。
2020 年 08 月 07 日 11:21
回复
你说的也没错,但是我理解作者说的SOA是指狭义上的概念
2020 年 08 月 12 日 21:07
回复
SOA没有广义狭义之分,只是一直有很多人不理解SOA,把SOA和实现手段混在了一起。
2020 年 09 月 02 日 13:45
回复
没有更多了
  • 多维与视图:系统设计的思考维度与展现视图

    采用框架式的思考维度与多层次的展现视图,得到更成体系的软件系统设计。

    2018 年 8 月 17 日

  • 第 5 讲 | CTO 的三重境界

    CTO 的格局是由组织成长和所处阶段决定的,作为 CTO 的格局可以超前,但不能滞后。

    2018 年 4 月 23 日

  • 白话 SOA

    “如果你不是技术人员,[SOA]无非就是另一个从你头顶飞过的术语。”,Software Advice的CEO Don Fornes解释道;更别提那些像“SOAP、XML、CORBA、DCOM、.NET、J2EE、REST、BPEL和WS-CDL”这样的大量相关缩写所带来的复杂性了。他试图在自己的文章中揭开围绕SOA的这些概念的神秘面纱。

  • 资助 SOA

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

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

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

  • SOA 治理的业务流程

    IBM的高级架构师Prabhakar Mynampati,上周发表了一篇详细说明6个SOA治理业务流程的文章。针对实施更正式的SOA治理措施,这篇文章给出了类BPMN流程定义、根据和收益。

  • 基于经验的 SOA 成功原则

    在SOA领域工作多年之后, Jean-Jacques Dubray写下了他所信奉的四条促进实现成功SOA的原则。

  • IBM 总结出五项 SOA 最佳实践

    尽管现在很多公司都指望用SOA实现对新出现且不断改变的经济方面需求作出更快的响应,但它们不一定都能取得一致的可测量结果。IBM在最近发布的一份白皮书中为取得SOA实施的成功总结出了五项最佳实践。

  • 智能风控 SaaS 服务高可用演进之路

    演讲嘉宾孙奇,同盾科技高级技术专家内容介绍同盾科技智能风控SaaS服务作为ToB的第三方风控系统,具有客户数量多,客户需求多样化,流量与客户流量同步上涨,虚假黑产流量占比高且流量变化大等业务特点。本次议题将讨论智能风控SaaS服务系统,在客户数不断增多,业务流量不断上涨的过程中,为了满足99.99%,200ms以内响应的目标,在架构调整,应用优化,在线计算能力提升,存储升级,多机房建设等方面所做的实践。

    2018 年 12 月 18 日

  • 微服务架构模型:几种常见模型的对比和分析

    这些架构模型在我们的实际应用中都具有很高的借鉴价值。

    2019 年 10 月 30 日

  • 深入理解微服务架构:银弹 or 焦油坑?

    微服务与SOA究竟有什么关系?

    2018 年 7 月 14 日

  • 调查显示,SOA 失败?

    Assaf Arkin对最近一篇指出SOA失败的报道提出了质疑,接着ZDNet的Joe McKendrick写了篇文章来分析SOA失败的含义。

  • 中台架构详解(上)丨建设数据中台系列(四)

    中台打破了应用系统的壁垒,从企业全局梳理和规划业务程,重构了组织架构、业务架构与IT 架构。

  • 技术对于 SOA 治理重要吗?

    Michael Stamback新开了一个关于SOA治理的博客,几周前他提出了这个问题。这些能对你的SOA治理有帮助吗?还是文化和组织性问题就已经压倒一切?

  • 分布式系统架构的冰与火

    为什么需要分布式系统,而不是传统的单体架构。主要有两方面原因:增大系统容量和加强系统可用。

    2017 年 12 月 12 日

  • 使用 ITIL V3 作为 SOA 治理的基石

    那些仅仅熟知ITIL V2的人通常会嘲笑将ITIL用作SOA治理框架的这种思想。从他们这种角度出发,他们可能是对的,因为V2更多的关注在运作流程上而不是服务的生命周期。在ITIL V3中,该框架的重心已经转移,而这种转移只能用面向服务来才能真正地描述。

  • SOA 在新兴的 Hadoop 世界扮演的角色

    Joe McKendrick的新博客中总结了Hadoop能够显著简化企业SOA实施,这是构建在通用企业数据平台上的改进的数据访问服务实现的。

  • SOA 与 API 的分裂和统一

    虽然API和SOA有着相似的商业和技术目标,许多API的支持者却坚持表示API与SOA几乎没什么关联,认为它们属于截然不同的方法。他们经常宣扬务实的REST API和SOA之间有着巨大的差异。本文将阐述它们的异同,以及如果创建一个同时包含SOA和REST的统一架构策略,什么时候适合创建服务,什么时候合适创建API。

  • 服务的技术架构之争

    组织需要精细的成熟的管理,就偏向权力密集的集中架构多一些;组织需要创新和快速迭代多一些,就偏向更自由的去中心架构多一些。

发现更多内容

互联网系统常见问题以及解决方案

而立

极客大学架构师训练营

Prometheus 存储层的演进

伴鱼技术团队

性能优化 系统架构 Prometheus 存储 时序数据库

架构5班3-4组优秀作业

tracy

CECBC带你一图看懂区块链

CECBC区块链专委会

CECBC 区块链技术 去中心化

央行数字货币:第三方支付产业新变量

CECBC区块链专委会

数字货币 DCEP 区块链技术

《架构师训练营》第四周命题作业

围绕 Office 365 的那些 CLI

手艺人杨柳

Office 365

计算机操作系统基础(六)---作业管理之进程调度

书旅

Java php 多线程 操作系统 进程

python中对字典与列表组合进行排序

开心太平洋

Python List 排序

重学 Java 设计模式:实战备忘录模式「模拟互联网系统上线过程中,配置文件回滚场景」

小傅哥

Java 设计模式 小傅哥 重构 备忘录模式

Linux系统查询端口命令

打鱼小王子

架构师训练营作业 -Week4

wyzwlj

极客大学架构师训练营

快来解锁Pepper机器人新技能,够酷Pepper就跟你回家!

阿甜

编程 开发者 App 开发 机器人

万字长文,让 Java 程序员入门小众语言 Ruby

Phoenix

Java ruby 个人成长 编程语言

安畅迁移平台的云原生之路

雪雷

Kubernetes DevOps 云原生 CI/CD 迁移

原来使用Postman如此简单,API测试之Postman使用全指南

软测小生

接口 Postman 接口测试 API API测试

MyBatis标签trim,你不会以为我是去空格的吧?

Java小咖秀

Java mybatis Java 面试

架构师训练营 - 学习笔记 - 第四周

心在飞

极客大学架构师训练营

ARTS-WEEK5

一周思进

ARTS 打卡计划

自由职业的前半年,我是如何度过的?

王磊

Java 程序员 程序员人生 程序员成长

第四周作业

南宫煌

极客大学架构师训练营

消息队列(三)如何保证消息不被重复消费?

奈何花开

Java MQ 消息队列

学习总结 - 第 4 周

饶军

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

CATTY

一个典型的大型互联网应用系统使用了哪些技术方案和手段,主要解决什么问题?

朱月俊

GO语言泛型编程实践

老胡爱分享

go 泛型

架构师训练营 - 第四周命题作业

牛牛

极客大学架构师训练营 作业

拿着锤子的人,哪里都是钉子

Neco.W

思维方式 思考力

系统架构感想

朱月俊

小师妹学JVM之:JIT中的PrintAssembly

程序那些事

JVM 小师妹 性能调优 JIT 汇编

谈反应式编程在服务端中的应用,数据库操作优化,提速 Upsert

newbe36524

C# MySQL 数据库 mongodb Reactive

SOA为什么不“香”了?丨建设数据中台系列(三)-InfoQ