SOA 没死,只是改了名

简介: 闺蜜小美发来她公司的架构图,问我这算什么架构。我说 SOA,她愣了:这词不是十年前的吗?这篇讲清单体、SOA、微服务的分界,以及为什么一半以上的企业现在跑的就是 SOA——只是没人这么叫它了。

上周闺蜜小美给我发来一张她公司的架构图,问了个特别朴素的问题:你帮我看看,我们这套算什么架构?

我看了十秒,回她两个字:SOA。

她愣住了。这个词她听过,但印象里它和 ESB、SOAP 埋在同一层土里,属于十年前的技术杂志。一套 2026 年还在生产上跑的系统,怎么会是一个「过时」的架构?

这个问题值得单独写一篇。因为按我这二十年看过的企业系统,答案适用于其中一大半:你们公司现在跑的,很可能也是 SOA,只是没人这么叫它了。

先看图

细节我重新画过,业务也换掉了,你可以把它想象成一家连锁餐饮品牌的数字化体系:

【此处插入配图:连锁餐饮四层架构示意图】

从上往下四层:

最上面是终端,四个入口对着四类人。顾客用的点餐小程序、门店用的收银出餐端、骑手用的配送 App、加盟商用的管理端。

第二层管进门,小程序开放网关、第三方服务配置(支付、地图这些)、统一认证(就是图里的 SSO:登录一次,四个端都认你)。

第三层是正事所在,三个大家伙并排站着。门店运营中台(里面装着营销活动、菜单商品、规则引擎、会员数据),旁边是供应链系统,再旁边是财务系统。

最底下是数据平台和基础设施:数据库 MySQL、缓存 Redis、消息队列 MQ、搜索引擎 ES,这些老朋友。

如果你只能带走这张图的一个细节,带走第三层角落里那行小字:对等系统 · 集成协同(非上下级)

就这一行字,暴露了整套系统的血统。

为什么这是 SOA

SOA,Service-Oriented Architecture,面向服务的架构。教科书定义拗口,人话版本就三句:

把公司按业务能力切成几个大系统。每个系统管自己的事、守自己的数据。系统之间靠接口和消息说话,谁也不是谁的爹。

拿这三句对一遍上面的图。

按业务能力切分:中台管门店运营和营销,供应链管食材从采购到配送,财务管钱。切分依据是业务的天然边界,跟用什么技术栈没关系。

各守各的数据:供应链的库存数据、财务的对账数据、中台的会员数据,各在各的库里。中台想知道今天鸡腿还剩多少,不能伸手进人家数据库查,得调接口。接口的学名叫 API,说白了就是每个系统对外开的服务窗口:你在窗口排队问,我在窗口答,后厨不许进。

对等协作:那行小字写得明明白白,「非上下级」。财务不是中台的子模块,中台也不归供应链管,三个系统平起平坐,用 API 和 MQ 互通有无。

三条全中。这就是 SOA,而且是教科书都未必讲得这么典型的活样本。

那为什么大家觉得 SOA 死了

因为死掉的是它的装备,不是它的思想。

十几年前企业上 SOA,标配是一根 ESB(企业服务总线):全公司系统之间说的每一句话,都必须经过这根总管道,由它转发、翻译、排队。系统间对话用的协议叫 SOAP,一种把每句话都裹上三层信封的老式文体;信封材料是 XML,就是用尖括号标签把数据一层层包起来的那种文档;接口长什么样,还得用 WSDL 再写一份同样是 XML 的说明书。于是一个字段改动,三份文件跟着改。再配上某大厂的 SOA 全家桶,一年授权费按百万计。

这套装备笨重、昂贵、供应商绑定,后来确实死了。死得不冤。

但你看上面这张图,没有 ESB。系统之间就是点对点的 API 直连,加上 MQ 帮忙传话。MQ 是消息队列,你就当它是各系统共用的传达室:发消息的把信放下就走,收消息的有空过来取,谁也不用干等谁。为什么不上总线?系统一共三四个,拉根总线纯属给自己修高架桥,过的车还没桥墩多。

我把这种形态叫「民间 SOA」:思想是 SOA 的思想,装备是够用就好的装备。它没死,它遍地都是,只是不再自称 SOA。

单体、SOA、微服务,三个词各管一段

真正有意思的地方在这里。我问小美,你们那个中台内部是什么形态?

她说,单体,集群部署,代码做了分层和模块化。

所以你看,这家公司同时活在三个词里:

中台内部,是模块化单体。一个应用复制多份一起跑,前面站个 Nginx 当迎宾,把涌进来的请求往各份实例上摊匀,这个动作叫负载均衡。

公司层面,是 SOA。几个大系统按业务能力划分,对等集成。

微服务?一个都没有。

这三个词经常被当成进化链,好像单体是原始人,SOA 是古代人,微服务才是现代人。实际上它们管的是不同粒度的问题。单体和微服务说的是「一个系统内部怎么组织」,SOA 说的是「多个系统之间怎么协作」。微服务的本质,是把 SOA 的思想从公司级下沉到了系统内部,切得更细、部署更独立、数据库也一拆到底。

所以「你们公司是不是微服务架构」这个问题,经常问错了层。正确的问法是两个:你们公司层面几个系统、怎么协作?你负责的系统内部,拆没拆、拆到多细?

什么时候该待在哪个位置

小美的团队不到十个人。我给她的判断是:中台内部不拆微服务,是对的,不是落后。

拆微服务的代价是实打实的:分布式事务、链路追踪、独立部署的运维成本,每一样都要人力去喂。不到十个人的团队拆出二十个服务,等于每人背两三个服务的运维,业务还写不写了?

什么时候拆?判据一句话:哪个模块的变更频率或者资源需求,明显偏离了其他模块,就先把哪个独立出去。比如饭点的秒杀发券,流量是别的模块的几十倍,它就该第一个搬出去单过。图里那个虚线框的「发券服务」,就是已经单过的样子。

架构没有先进和落后,只有匹配和不匹配。这句话谁都会说,但落到具体判断上,就是上面这种一句话判据。

所以,SOA 过时了吗

词过时了,思想一直在续命,而且每隔几年换一个马甲。

微服务,是 SOA 在单个系统内部的续集。中台,是 SOA 思想的中国变体,把「按业务能力沉淀服务」推到了组织层面。这两年流行的 API-first(先把接口契约定好,再动手写实现)、平台工程(把公司的基础能力做成内部产品,各团队自助取用),骨子里还是那句话:把能力包成服务,给需要的人调用。

最新的一轮马甲你可能也见过了。给大模型接工具的 MCP 协议,干的事情是把企业能力包成标准接口,开放给一个新的调用方。这个调用方不是浏览器,不是小程序,是 AI。你可以把 MCP 理解成 AI 界的 USB 接口:工具做成标准插头,哪个模型来了都能插上就用。历史不重复,但是押韵。

回到开头。小美后来把这套讲法用在了一次述职里:公司层面 SOA,几个系统对等集成,没上 ESB 是因为系统少;我的中台是模块化单体加集群;微服务没拆,团队规模摆着,但什么时候该拆、先拆哪个,判据我有。

能把自己系统在谱系上的位置讲清楚的人,不管在会议室还是面试桌上,都比满嘴新名词的人稀缺得多。过时的词有个隐藏用途:它专门用来鉴别不过时的人。

附:本文黑话小抄(收藏用)

黑话 全称 人话
SOA Service-Oriented Architecture 公司按业务能力切成几个大系统,对等协作
ESB Enterprise Service Bus 所有系统间消息必经的总管道,SOA 老装备
SOAP Simple Object Access Protocol 系统对话的老式文体,每句裹三层信封
WSDL Web Services Description Language 接口的 XML 说明书
XML eXtensible Markup Language 用尖括号标签层层包数据的文档格式
API Application Programming Interface 系统对外开的服务窗口
MQ Message Queue 系统共用的传达室,放下就走、有空来取
SSO Single Sign-On 登录一次,处处通行
MCP Model Context Protocol AI 界的 USB 接口,工具插上就能被模型用
相关文章
人工智能 缓存 前端开发
12596 74
人工智能 自然语言处理 安全
1459 0
Web App开发 人工智能 API
1574 2
人工智能 JavaScript 开发工具
4930 0
人工智能 Java BI
1681 1
人工智能 JavaScript 测试技术
2619 2
开发工具 Swift git
2008 6
人工智能 JavaScript 测试技术
1260 4