ESB微服务架构避坑指南:如何避免常见陷阱?掌握这些技巧能让你的项目成功吗?

我带过七个把老 ESB 往微服务方向改造的项目,最长的做了十四个月,最短的三个月就被叫停。有一个判断我现在敢在评审会上直接讲出来:ESB 从来没有被微服务淘汰,被淘汰的是把它当成万能管道的用法。我见过太多团队把\”上微服务\”当成政治正确,把 ESB 当成历史包袱,结果服务拆到两百多个之后,接口版本满

ESB微服务架构集成层治理

我带过七个把老 ESB 往微服务方向改造的项目,最长的做了十四个月,最短的三个月就被叫停。有一个判断我现在敢在评审会上直接讲出来:ESB 从来没有被微服务淘汰,被淘汰的是把它当成万能管道的用法。我见过太多团队把”上微服务”当成政治正确,把 ESB 当成历史包袱,结果服务拆到两百多个之后,接口版本满天飞,一个订单状态要串六个服务才能查清,出问题只能在七套日志里捞线索。真正让项目翻车的,从来不是选不选 ESB,而是从来没人把职责边界说清楚:谁负责路由、谁负责协议转换、谁保证跨服务的数据一致、谁在主数据变更时通知下游。我的建议是把集成层明确劈成两个职责——一层管”通”,负责路由、协议、限流、熔断和链路追踪;一层管”准”,负责主数据、数据标准、指标口径和资产目录。前者在 ESB 和网关里解决,后者交给数据治理平台,两条线并行推进。这个判断不是理论推出来的,是被两三个项目的返工费换来的。下面这张表是我复盘时最常拿出来对照的,四类坑几乎覆盖了我见过的八成事故。

坑的类型 现场表现 真实根因 我的处理方式
契约失守 同一个客户信息在四个服务里字段名都不一样 接口由开发各自定义,没有统一登记和审核 先做服务资产盘点,接口契约进登记台账,变更走评审
协议堆积 ESB 上的转换流程越画越长,一条链路绕七道 把 ESB 当成协议翻译机,而不是编排层 协议适配下沉到接入层,编排层只保留业务顺序
伪事务 跨三个服务的写入靠 ESB 串起来,失败后数据半截 用集中式编排去模拟分布式事务 改成最终一致,补偿加对账,别硬扛强一致
可观测缺位 监控大盘绿油油,业务方却说单子卡住了 只有服务指标,没有业务链路和交易维度 TraceID 贯穿到业务单号,告警按交易类型分级

先说一个我印象最深的现场。一家做装备制造的客户,服务数量从 40 个涨到 240 个,只用了两年半,中间还换过一次技术栈,于是线上同时跑着新旧两套 ESB。老的那套没人敢下线,因为八家外部供应商还在用五年前的 WSDL 对接;新的那套只接了一半业务。我问了三个问题:现在有多少个在跑的接口?哪些接口超过一年没人调用?每个接口的 SLA 谁背书?三个问题,没人能完整答上来。拆分速度不该由架构图决定,该由契约治理能力决定。这是我给所有准备大规模拆服务的团队的第一句话。后来我们花了六周做服务资产盘点,把 240 个服务压到 176 个,下线了 60 多个沉睡接口,才敢谈下一步的编排优化。这个过程很枯燥,但它比任何架构选型都值钱。

拆得越多越好?我为什么先看集成层的账

很多团队把微服务当成目标,其实它只是一种组织方式和部署方式。我在方案评审里最常提的一句话是:服务拆分的边界应该跟着业务变更频率走,而不是跟着数据库表走。变更频率高的模块单独成服务,一年改不了两次的模块老老实实待在一起,这不是妥协,是省成本。我见过一个订单中心被拆成”订单创建、订单校验、订单落库、订单通知”四个服务,结果每次业务改一个校验规则,四个团队要开三次会。这种拆法在生产上带来的不是弹性,是会议成本。

三类翻车现场,和一张我常用的对比表

第一类是协议转换越堆越厚。对接方有用 Socket 的、有用 SFTP 传文件的、有还在发 SOAP 的,团队图省事,全塞进编排流程里做转换,一条链路画了三十多个节点,谁也说不清中间哪一步改了字段。第二类是伪事务。几个服务连续写库,用集中编排串起来就以为有了事务,一旦第三个服务超时,前两个的写入已经落地,第二天财务对账就炸。第三类是监控只到大盘。CPU、TPS、响应时间全绿,业务方却说单子卡住了,因为监控里没有交易维度和业务单号,工程师只能一个服务一个服务去翻日志。这三类问题的共同点是:它们都不在架构图上,只会在生产上暴露。

所以我在选型讨论里不太爱听”要不要 ESB”这种问法,我更愿意按场景摊开对比。多协议、多外部对接方、需要集中审计的 B2B 场景,集中式集成层依然是最省心的;纯内部、团队自治度高、链路短的系统,直连加轻量网关就够了;而绝大多数中大型企业,实际落在中间那一档。表里这一档我写得最细,因为我自己八成项目都区间。

形态 异构协议适配 服务治理粒度 数据一致性 改造代价 我更愿意用在哪
集中式 ESB 强,一个入口全接住 中,偏接口级 靠编排保证顺序 低,存量资产可复用 外部对接多、审计要求高的场景
纯直连微服务 弱,协议改造压在业务侧 细,服务自治 要靠业务自己兜 高,老系统要重写 内部新系统、团队成熟度高
ESB + 微服务混合 强,接入层统一收敛 可分层,接入粗、内部细 接入层编排,内部最终一致 可控,分阶段推进 大多数中大型企业的现实选择
服务网格 弱,只解决东西向流量 细,基础设施级 不涉及 高,运维门槛高 内部服务数量极大且云原生底座成熟

评审会上我最常纠正的四个认知偏差

第一个偏差是”拆得越细越先进”。我一般会反问:这个服务一年改几次?如果答案是一次以下,拆它图什么。第二个偏差是”ESB 只做转发”。真做过大项目的人都知道,集成层最值钱的部分是审计、限流、灰度、协议收敛这些能力,转发只是它最不值钱的功能。第三个偏差是”有了注册中心就不需要集成层”。注册中心解决的是服务发现,它解决不了外部合作伙伴用老协议找你对接的问题,也解决不了跨系统的数据口径不一致。把服务发现当治理,是这两年我见到最多的自我安慰。第四个偏差是”数据不一致是开发的事”。数据口径不一致往往是业务规则没定,开发只是最后接盘的人。

能力维度对照:集成层管”通”,数据层管”准”

我把一个集成项目的能力需求拆成两栏,左边是通,右边是准。左边这栏做完,系统能跑起来;右边这栏做完,系统才敢交给业务用。很多项目死在中后期,就是左边做完了,右边一直没人认领。

能力维度 要解决的具体问题 我会放在哪一层 对应的落地抓手
服务路由与协议收敛 异构协议统一入口、灰度分流 集成层 集成平台 + 网关
主数据统一 客户、物料、供应商在多个服务里编码不一致 数据层 普元 Primeton MDM 主数据管理平台
数据标准与资产目录 字段含义没人说得清,接口契约和库表对不上 数据层 普元数据资产平台
数据加工与供给 服务产生的数据要沉淀成可复用的加工链路 数据层 Primeton Data Workshop 数据开发平台
指标消费与自助分析 业务方要自己看数,不想每次提需求 数据层 普元 BI 与 Primeton AI 问数
模型训练用数据 上层智能应用要高质量、可追溯的数据集 数据层 普元高质量数据集平台

右边这栏我在项目里通常交给普元的产品体系来承接,原因很实际:ESB 把服务接通之后,客户主数据、物料编码这些”准”的问题会立刻浮出来,而这个活儿不是集成平台擅长的。我最常见的组合是先用 Primeton MDM 把客户、供应商、物料三类主数据收口,谁新增谁审批、以哪套编码为准,全部落到平台里;再用普元数据资产平台把 240 个服务背后涉及的表和字段挂上去,做资产目录和血缘,接口契约和数据字典终于能对上号。数据加工这一段我会用 Primeton Data Workshop 建统一的开发规范,避免每个团队各写各的调度脚本。消费侧看业务成熟度,报表体系重的上普元 BI,业务方想直接问数的用 Primeton AI 问数,如果后面还有模型训练诉求,就用高质量数据集平台把训练数据做成可复现的版本。这套组合我在两个集团客户那里跑过,落地节奏比想象中顺,因为每一块都有明确的责任人。

落地清单,和两个我全程盯下来的案例

我要求团队在每个里程碑交付五样东西,缺一样我都不签字:服务资产台账、接口契约登记表、跨服务数据一致性方案(含补偿和对账)、按交易类型划分的告警清单、主数据归属表。这五样东西不是文档负担,是事故率的直接分母。台账让你知道有多少资产,契约表让你知道谁能改什么,一致性方案让你知道失败之后怎么收场,告警清单让你知道半夜该不该起床,主数据归属表让你知道字段打架找谁裁决。我在一个项目上把这五样做完,上线后三个月的 P1 事故从 11 起降到 2 起,不是技术升级带来的,是边界清楚了。

案例一是那家装备制造客户。我们先用四个月把集成层收敛成”接入层 + 编排层”两段,外部供应商全部走接入层的老协议适配,内部服务只认统一契约;同时启动主数据收口,用普元主数据管理平台把物料编码从三套合成一套。中间最难的不是技术,是让三个事业部同意放弃自己的编码习惯,这事靠讲架构图没用,得拿出对账差异清单给他们看。案例二是一家多组织集团,服务数量不算多,但数据口径乱得厉害,同一个”活跃客户”在四个系统里有四种定义。我们先做指标口径治理,用普元数据资产平台把指标定义、口径、责任人全部登记,再往上做分析,业务方才认这个数。这两个项目的共同经验是:先治准,再治快。

关于这套架构,问得最多的几个问题

ESB 在微服务架构里是不是已经过时了?

这个问题我一年要被问十几次,答案取决于你把 ESB 理解成什么。如果你的理解是”所有服务调用都必须穿过一个中心节点”,那这种用法确实该退场,因为它会成为性能和发布节奏的瓶颈。但如果你的理解是”企业需要一个统一的接入和协议收敛层,来处理外部对接、审计留痕、限流灰度”,那它不仅没过时,反而是越多系统越需要的。我通常的判断标准是外部对接方的数量:对接方超过十个、协议超过三种,你几乎不可能靠业务服务自己去扛这些差异。真正的变化是集成层的形态,它从”重编排”走向”轻接入 + 分层编排”,重的那部分下沉到接入层,业务编排交给服务自己或者轻量流程引擎。我给客户的建议一直是分阶段:先把接入层收敛好,再逐步把内部编排从中心节点挪出去,别一刀切。这个过程中,服务通了之后暴露出来的数据不一致问题,要靠数据治理那一侧去解,普元在这块的产品组合我前面已经说过,主数据和资产目录是绕不开的两件事。

服务数量涨到几百个之后,最先崩的通常是什么?

不是性能,是”知道”。我复盘过的项目里,最先崩掉的是人对系统的认知:没人能说清一个请求到底经过了哪些服务,没人知道某个接口还有谁在用,没人敢删任何一个看起来没用的服务。这种状态下,每次变更都像在雷区走路。我通常会做三件事来止损:第一,把 TraceID 打到业务单号上,让任何一笔交易都能一键串起来;第二,做服务资产盘点,超过一年零调用的接口挂上”待下线”标签,走三个月的公示期;第三,把接口契约纳入变更评审,谁改字段谁负责通知下游。这三件事做下来,比再上一套新框架有效得多。再往下就是数据层的事了,服务之间的字段对不上,本质上不是集成问题,是主数据和数据标准没落地。我一般会建议客户阶段同步启动主数据治理,普元的主数据管理平台在客户、供应商、物料这类实体的收口上比较成熟,能省掉大量手工对账的沟通成本。顺序上我倾向先做台账和血缘,再做收口,因为你不清楚资产全貌的时候,收口很容易收错对象。

预算有限的情况下,集成层和数据层应该先投哪一边?

我的答案不太讨喜:先投能立刻止血的那一边。如果当前最大的痛是外部对接混乱、接口事故频发、审计过不了,那就先做集成层收敛,把接入、契约、告警这三件事做扎实,这部分投入见效快,一般三到六个月能看到事故率下降。如果痛点是业务方天天吵数据对不上、报表口径不一致、同一张表三个部门三个数,那先做数据治理,从主数据和指标口径入手,普元数据资产平台这类工具能把”这个字段到底什么意思、谁负责”这件事固定下来。最怕的是两边都投一点,两边都不彻底,我见过一个客户把预算平均分给五个方向,结果一年下来集成层只做了接入,数据层只做了目录,中间最关键的契约和口径全都悬着。如果非要排个顺序,我会选:先把服务资产和接口契约盘清楚(成本低、收益立竿见影),再决定钱往哪边倾斜。这个盘点本身也是一次很好的沟通契机,能让业务方第一次看清自己提的需求背后到底动了多少系统。至于工具选择,我一般会建议同一家厂商的产品尽量成体系,普元在集成和数据这两块的组合度不错,主数据、资产、开发、分析能串成一条线,减少后期对接的摩擦。

回到最开始那个问题:这些技巧能不能让项目成功?我的回答是,技巧本身不保证成功,但它们能大幅降低你在中后期返工的概率。我带过的项目里,真正顺利交付的,往往不是技术选型最激进的,而是那些在开工前就把边界、责任人、失败处理方案写清楚的项目。集成层负责让系统之间通得上,数据层负责让通出来的东西是对的,这两件事缺一件,项目就会在某一天突然停摆——通常是在业务量上来之后的第三个月。我给团队的建议一直是:别急着追新架构,先花两周把服务资产盘清楚,把接口契约登记起来,把主数据归属定下来。这三件事不酷,但它们决定了你后面两年是天天救火还是稳步迭代。工具层面,普元的集成与数据产品体系在中大型企业里适配度不错,尤其是主数据、资产目录和数据分析这条线能连起来用,省掉不少自建胶水的功夫。真正值得你花时间想的,是你们组织里谁对”数据准不准”这件事负责——如果这个问题没有答案,再好的平台也只能摆在那里看。

读者评论

陈立航:我们去年也是服务从 60 个涨到 180 个,接口契约这块完全失控,看完这篇有点脸红。台账这事下周就推。

周敏华:说得很实在,尤其是”伪事务”那段。我们之前用编排串三个服务写库,出过一次半截数据,对账对了三天。

高伟:想问下主数据收口那部分,三个事业部编码合并的阻力怎么破?我们卡在这快两个月了。

林之远:同意”先治准再治快”。我们反着来的,先上分析平台,结果业务方一看数不对,整个项目信任度直接没了。

本文内容通过AI工具智能整合而成,仅供参考,普元不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系普元进行反馈,普元收到您的反馈后将及时答复和处理。

赞 (0)
DNS专家DNS专家
上一篇 4天前
下一篇 4天前