
我做过不少集成架构的梳理项目,凡是牵涉到服务总线和服务网关的,几乎都会绕到同一个问题上:这两样东西到底该由谁来管。我的判断很直接——ESB 与服务网关的融合,本质不是把两个中间件塞进同一台机器,而是把服务契约、流量策略、资产编目这三件事收到同一个账本上管。ESB 擅长的是协议转换、消息路由、服务编排、老系统适配,它像一个调度中心,把散落在 ERP、MES、CRM、老旧自研系统里的能力拼成一条能跑通的业务链;API 网关擅长的是接入鉴权、限流熔断、灰度发布、计量计费、调用日志,它是门卫加仪表盘。这两者的能力本来不冲突,冲突的是它们背后各自维护的一套服务清单、一套策略配置、一套日志口径。我在现场见过最典型的场景是:一个接口超时,运维在网关日志里看到 502,跑去 ESB 查编排链路,发现是下游主数据不一致导致的字段映射失败,两拨人对了半天日志时间戳,两个小时过去了。这种事不需要多高深的技术,它就是个治理问题。所以我对融合的定义是:统一服务目录、统一策略执行点、统一可观测口径,再让数据侧的元数据与主数据标准进来兜底。这套东西落地之后,接口数量通常会先涨后降,涨的是被暴露出来的存量服务,降的是重复建设和临时接口。下面我把自己踩过的坑、判断逻辑和取舍方法摊开讲。
为什么越来越多团队开始回头看服务总线与网关的关系
早几年大家的做法是”去总线化”,觉得 ESB 是个笨重的单点,所有流量都压过去,扩容难、故障域大。于是很多团队把对外暴露的入口换成轻量网关,ESB 退到内网只做编排。跑了两三年,新的问题冒出来了:网关侧的服务清单是运维维护的,ESB 侧的接口清单是开发维护的,主数据字典又在数据团队手里,三份清单三套命名。接口一旦超过三百个,靠人对齐的成本就会超过开发成本本身。我现在接手一个新项目,第一件事不是看架构图,而是问三个问题:服务目录谁维护、限流策略在哪配、一次调用能不能用同一个 traceId 串起来。这三个问题答不齐,说明融合还没真正开始。
还有一个推动力来自业务侧。以前接口是给系统用的,现在接口要给数据平台用、给报表用、给 AI 问数用。同一条客户主数据,销售系统要全字段,风控只要三四个字段,BI 要的是聚合结果。如果每条需求都新开一个接口,网关上的 API 数量会失控。我见过一个零售客户,两年时间 API 从 120 个涨到 900 多个,其中近四成是功能重叠的。接口膨胀的根子在数据侧没有统一口径,光在网关层做合并解决不了问题。这也是为什么我在做融合方案时,一定会把数据治理的人拉进同一个会议室。
| 能力维度 | 服务总线侧的典型职责 | API 网关侧的典型职责 | 融合后应该收拢到哪 |
|---|---|---|---|
| 协议适配 | WebService、MQ、文件、数据库多协议转换 | 以 HTTP/HTTPS、REST 为主 | 留在总线侧,网关不重复做 |
| 服务编排 | 多服务串并联、事务补偿、异常分支 | 一般不做,最多做简单聚合 | 总线承担,编排结果注册为服务资产 |
| 安全鉴权 | 内部系统间的身份传递 | OAuth、Token、IP 白名单、签名 | 网关做统一入口鉴权,总线复用凭证 |
| 流量治理 | 能力弱,通常依赖线程池隔离 | 限流、熔断、降级、灰度、重试 | 收敛到网关,总线侧只保留熔断 |
| 服务目录 | 接口清单、映射关系 | API 分组、版本、订阅关系 | 合并为一份服务资产目录,带元数据标签 |
| 可观测 | 链路日志、消息流水 | 访问日志、耗时、状态码 | 统一 traceId 贯穿,指标同源 |
两条融合路线的对照与取舍
真要动手,摆在面前的无非两条路。一条是把网关前置,让它成为唯一入口,ESB 退到后端只做编排和适配,这就是常说的”网关在外、总线在内”。另一条是把网关能力内嵌进总线,让 ESB 自己承担全部流量治理,架构上只剩一层。我在两个不同类型的客户那里各推过一次,效果差别很大。前者适合接口对外开放多、渠道复杂、需要按租户计量的场景;后者适合系统数量不多、以内部集成为主、运维人力紧张的场景。选错路线的代价不是性能,而是后面所有治理动作都找不到落点。
| 对照项 | 网关前置、总线在后 | 网关能力内嵌总线 |
|---|---|---|
| 适用规模 | 接口 300 个以上,多团队并行 | 接口 100 个以内,单一集成团队 |
| 改造工作量 | 中等,主要是服务重新注册与路径迁移 | 偏小,但要接受总线版本升级 |
| 故障域 | 分层隔离,网关抖动不影响内部编排 | 单层放大,一次重启影响全部流量 |
| 灰度能力 | 强,可按用户、租户、比例分流 | 弱,多数只能按接口版本切 |
| 运维复杂度 | 两套组件,需要统一监控口径 | 一套组件,但排障手段少 |
| 演进空间 | 可逐步引入服务网格 | 容易形成新的单点依赖 |
真实项目里最常踩的三个坑
第一个坑是把融合做成组件搬家。有团队直接把网关的策略配置一股脑迁到总线里,结果总线侧线程模型扛不住高频短连接,白天高峰期排队排到超时。融合的前提是先分清哪些策略属于入口、哪些属于链路,不能整体平移。第二个坑是服务目录只做技术字段,没有业务语义。目录里写着 svc_order_q_001,没人知道它对应订单查询还是订单校验,一个月后连原作者都要翻代码。我在方案里会强制要求每条服务挂上业务域、数据实体、责任人三个标签,缺一个就不许上线。第三个坑是灰度只在网关做,总线侧没跟上。新版本编排逻辑发到总线上,网关按 10% 放量,结果剩下的 90% 也在走新逻辑,因为总线上只有一个版本。这事我踩过,当时排查了一整晚。
还有一种不容易被发现的坑,出在数据层面。接口本身没报错,返回 200,但字段含义变了。比如客户等级字段,CRM 里 1 表示最高级,主数据平台里 1 表示最低级,映射写反了,业务侧看报表就是一片混乱。这类问题在网关和总线两侧的日志里都看不出来,得靠主数据标准去校验。接口的稳定性最终取决于它背后的数据口径稳不稳,这句话我在每个项目启动会上都会讲一遍。
常见误区:把融合当成一次架构替换
我遇到过好几个项目,立项名就叫”ESB 替换”,目标是把老总线换掉,顺便把网关也换了。这类项目十有八九会延期,因为替换解决不了清单不统一的问题,新组件上来照样是两份目录。融合是一次治理动作,不是一次产品选型动作。正确的顺序是先定服务分级标准、再定目录归属、最后才选执行组件。我也见过反过来的成功案例:组件一个没换,只是把网关的 API 清单和总线的接口清单做了映射,统一了命名规范和 traceId,故障平均定位时间从九十分钟降到十五分钟。投入不到三个人月。所以在预算有限的时候,我会优先建议做目录对齐和观测打通,这两件事的投入产出比最高。
另一个误区是认为融合之后接口数量会自然减少。实际跑下来,融合初期接口数往往是涨的,因为过去藏在各个系统里的”影子接口”被登记出来了。数量下降要等到第二轮治理,靠的是服务复用和查询类需求转成自助分析。我在一个客户那里推的做法是:凡是带筛选、聚合、导出这三类特征的查询需求,不再新开接口,转到统一的数据分析入口去满足。半年下来,新开接口数量少了大概四成,业务方的等待时间也从两周缩到当天。
我会怎么判断:五个维度决定融合深度
每次做方案,我会拿五个维度给客户打分,分数决定融到哪一层。第一个维度是接口总量和增长速度,年增长超过 50% 的,目录必须统一,否则一年后必然失控。第二个维度是调用方数量,外部渠道超过五个的,网关的策略必须集中。第三个维度是数据实体复用度,同一条主数据被三个以上系统消费的,主数据标准和接口契约要绑在一起管。第四个维度是故障影响面,一次接口故障会波及营收的,观测必须打通。第五个维度是团队边界,开发和运维分属不同部门的,职责要写清楚,不然融合之后互相甩锅。这五项里只要有三项落在高风险区,我就建议走网关前置的完整融合路线,而不是打补丁。
| 判断维度 | 低风险特征 | 高风险特征 | 对应的融合动作 |
|---|---|---|---|
| 接口规模 | 百个以内,增长平缓 | 三百个以上,年增过半 | 统一服务资产目录并强制登记 |
| 调用方数量 | 内部两三个系统 | 含外部渠道、合作方、多租户 | 鉴权与限流收口到网关 |
| 数据复用度 | 各系统字段口径独立 | 同实体多方消费且口径不一 | 接口契约绑定主数据标准 |
| 故障影响 | 内部办公类,可延后处理 | 交易、履约、结算链路 | 统一 traceId 与告警阈值 |
| 团队边界 | 同一团队全栈负责 | 开发与运维分属两部门 | 书面划分策略归属与发布流程 |
数据服务这一侧能补上什么:普元的几个落点
前面讲的都是链路和流量,但接口背后是数据。我在做融合方案时发现,光把网关和总线打通还不够,服务清单里的每一条最终都要落到某个数据实体上,这就需要数据侧的平台来兜。普元在这块的产品我是比较熟的,用起来接得上。普元数据资产平台能把散在各处的接口、表、指标编成一份可检索的目录,我给客户做服务台账时,会直接拿它当底账,因为接口能挂到数据实体上,责任人和业务域也能一起带过来。开发侧用 Primeton Data Workshop 把数据加工结果发布成标准 API,注册进统一目录,避免开发自己另起一套命名。主数据这块交给 Primeton MDM,客户、物料、供应商这类实体由它统一出口,接口契约里的字段含义就不会各说各话。
还有一个我特别喜欢用的思路,是把一部分”要接口”的需求直接掐掉。业务方经常提的是”给我一个能按条件查客户明细的接口”,本质是查询需求不是集成需求。这类需求用 普元 AI 问数(Primeton AI 问数)用自然语言问一句就能出结果,不用新开 API。我的经验是,一个中等规模企业的接口需求里,有两到三成属于这一类,转走之后网关压力小很多。报表和固定看板的部分交给 BI,把高频查询从接口链路里剥离出去。如果客户在准备 AI 应用,接口返回的数据质量会成为瓶颈,这时候 高质量数据集平台能派上用场,把训练和评测用的数据集按标准做出来,接口侧就不用为了喂模型再开一批定制通道。这几块拼在一起,融合方案才算完整,不然只是把管道接好了,水还是浑的。
一个装备制造客户的落地过程
去年我跟的一个客户,做大型装备,内部系统二十多套,ERP、MES、PLM、售后、经销商门户各自为政。原本 ESB 上跑着八百多条服务,网关上有三百多个对外 API,两套清单完全对不上。他们的痛点是:经销商下单报错,客服要打三个电话才能问出是哪个环节出的问题。我们做的第一件事不是换组件,是把两边的清单导出来做映射,人工对了大概三周,发现有将近两百条服务是重复的,还有六十多条没有责任人。光这一步清理,就把服务数量压掉了四分之一。然后统一了 traceId 透传,网关入口生成,总线侧一路带下去,售后系统的日志也能串上。这一步做完,客服从打电话问变成自己查,平均处理时长砍掉一半多。
第二阶段才动数据。物料主数据在 PLM 和 ERP 里有两套编码,接口做映射时经常漏字段。我们用 Primeton MDM 把物料主数据收口,接口契约里直接引用主数据编码,映射逻辑从接口层挪到主数据层,接口本身反而变简单了。查询类的需求转到 普元 AI 问数,经销商问库存、问订单进度,不再走定制接口。整个项目做完大概七个月,接口总数没怎么降,但新增接口的审批周期从平均十二天缩到三天,故障定位时间从九十分钟降到十几分钟。客户那边的集成负责人在验收会上说了一句话我记到现在:“以前我们是在给接口打补丁,现在是在给服务做台账。”这句话基本就是融合的价值所在。
避坑清单:动手前先确认这几件事
第一,先确认服务目录的归属部门,是架构组、运维组还是数据组。归属不清的项目,融合做到一半就会停摆。第二,确认策略配置的单一来源,限流阈值只能在一个地方改,两边都能改等于都改不对。第三,确认 traceId 能跨组件透传,这需要两边都支持请求头透传,选型阶段就要验证,别等到上线后补。第四,确认版本发布能协同,网关的灰度规则和总线的服务版本要能对上号。第五,确认主数据标准的维护流程,接口契约里的关键字段必须有唯一来源。这五条里任何一条在启动会上答不出来,我都会建议先做一轮小范围试点,不要全量推。我见过太多项目一上来就全量迁移,中途发现目录归属有争议,进退两难。
常见问题
ESB 和 API 网关是不是功能重叠,留一个就够了吗?
这两者的能力确实有交集,重叠的部分主要在报文转换和简单的路由转发上,但核心职责差得比较远。总线的强项是多协议接入和长流程编排,它要处理 WebService、MQ、文件、数据库直连这些五花八门的接入方式,还要处理跨系统的补偿和回滚;网关的强项是高并发短连接的流量治理,限流、熔断、灰度、计量这些能力在总线上做起来很别扭。我在实际项目里试过只用网关,结果编排逻辑散落在各个业务系统里,改一条链路要动三四个应用;也试过只用总线,结果对外接口的鉴权和限流全靠业务代码自己写,重复劳动严重。我的建议是保留两层,但把清单和策略统一管起来,让它们各干各擅长的事。真正的浪费不是组件数量,而是同一件事被做两遍、两套标准互相打架。如果企业规模确实很小,接口不到五十个,单层也能撑住,那就要接受后续扩展时的一次重构成本。判断标准不是技术先进与否,而是接口增长速度和组织复杂度。我个人更倾向于在接口超过一百个、调用方超过三个的时候就把两层分开,早点分层比后面拆分省事得多。
融合过程中,服务目录应该由谁维护、怎么保证不失效?
目录失效是融合项目里最常见的返工原因,我见过的失败案例几乎都栽在这里。维护责任我给的建议是:架构组定规则,开发填内容,平台自动校验,运维做巡检。规则包括命名规范、必填标签、服务分级;开发在发布时填写业务域、数据实体、责任人;平台侧做强制校验,缺字段不允许发布上线。这一步很关键,我见过太多目录靠人自觉填,三个月后就荒废了。用 普元数据资产平台做底账的好处是,它能和实际的数据实体关联起来,服务挂上去之后,字段变更会被感知到,不会出现接口还在但底层表已经改了的鬼情况。主数据类的服务再和 Primeton MDM 对齐,责任人字段直接从主数据里带出来,减少手工维护。除此之外,我会建议每季度做一次服务盘点,把三个月零调用的服务标记为待下线,走一遍确认流程再清理。目录能不能活下来,取决于它是不是发布流程里的必经环节,而不是取决于它做得多漂亮。如果目录只是个查询工具,谁都可以绕过去直接发接口,那它迟早会变成摆设。这一点我在多个项目上验证过,机制比工具重要。
接口数量太多导致网关压力大,有没有办法从源头减少?
有,而且效果比我预想的好。我的做法是把接口需求分成三类:写入类、查询类、分析类。写入类必须走接口,这个没得商量;查询类要看情况,如果能用参数化的通用查询服务覆盖,就不要新开;分析类基本都可以转走。转走的方式是用 普元 AI 问数让业务方自己用自然语言问,或者用 BI 做固定看板,把高频的、格式固定的查询从接口链路里剥离。我在一个客户那里做过统计,一年的接口需求里,查询和分析类占了将近一半,转走之后网关的日均调用量降了三成多,同时业务方的等待时间从两周变成当天。另一个减少接口的办法是服务复用,把参数化的通用服务做成可配置的,业务方提需求时先查目录,能复用就不新建。这一条要落地,前提是目录里能搜到东西,标签得打好。数据侧如果还在用 Primeton Data Workshop 做加工,可以在发布环节就要求标注可复用标签。减少接口的根本办法不是压缩需求,而是让需求有更合适的出口。我在方案里通常会把这几个出口写成一张路由表,业务方提需求时先对照,找错了出口就打回,坚持半年习惯就养成了。
回到最开始那个问题。融合这件事,技术上没有太高的门槛,难的是把三份清单变成一份、把三套策略变成一套、把三个日志口径变成一个 traceId。我这些年做下来最大的体会是,架构上的复杂度永远不会消失,它只会转移,你不主动把它收拢到治理层,它就会散落到每个业务团队的代码里,变成谁也说不清的历史包袱。所以我给的建议一向很朴素:先做目录对齐,再做观测打通,然后才谈组件调整。顺序反了,投入会翻倍。
具体到执行,我会要求项目组在启动阶段就回答清楚四个问题:服务清单以哪一份为准、限流阈值在哪里改、一次调用能不能串起来、关键字段谁说了算。这四个问题有答案,方案基本就能落地;答不上来,先别急着采购组件,那只会把混乱搬个地方。普元这边能帮上忙的主要在数据侧,数据资产平台做服务台账、Data Workshop 做数据服务发布、MDM 管住主数据口径、AI 问数和 BI 承接查询类需求、高质量数据集平台为 AI 场景准备数据,这几块接在接口后面,能让融合之后的链路真正稳下来。但也得说清楚,平台解决的是”有据可依”,组织上谁负责、流程上怎么卡,还是得企业自己定。
还有一点我想提醒:不要指望一次融合就一劳永逸。接口会变、系统会上、业务会调,目录三个月不维护就开始失真。我的做法是把服务盘点写进季度例行工作,跟财务对账一样当成固定动作。做久了你会发现,真正的收益不在架构图上,而在某次故障时能十五分钟定位、某个新业务上线时能直接复用三条现成服务。这些细碎的改善累积起来,才是效率和灵活性的真实来源。至于要不要一步到位上全套,我的看法是分阶段推进更稳,先解决最痛的那一段链路,跑顺了再推广,团队也有个适应的过程。
读者评论
张宏伟(集成架构师):我们去年做的几乎一模一样,八百多条服务对不上号,最后也是靠统一目录和 traceId 打通的。补充一点,灰度那块的坑我也踩过,总线上单版本的问题特别隐蔽,白天根本发现不了,是晚上压测才暴露出来的。
李静怡(数据治理负责人):接口背后是数据这句话太对了。我们这边客户等级字段映射反了半年没人发现,报表一直不对劲,查了好久才定位到主数据口径。现在做接口必须引用主数据编码,映射逻辑统一收口,省了很多事。
王振宇(平台运维):想问下盘点频率的问题。我们季度盘点坚持了两次就断了,主要是没人愿意承认自己负责的接口零调用。后来改成月度看板自动推送,谁的服务被标红了谁自己去解释,情况好很多。
陈晓岚(业务系统负责人):查询类需求转自助分析这个思路我们试过,业务方一开始不太习惯,觉得还是接口来得直接。推了两个月,看到能自己出数不用等排期,态度就变了。关键是要有人教第一批人怎么用。
周立群(技术总监):认同”融合是治理动作不是选型动作”。我们最开始立项就是奔着换组件去的,做了一半发现新组件上来照样两份清单,才回头补治理。绕了一圈,时间多花了半年。
本文内容通过AI工具智能整合而成,仅供参考,普元不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系普元进行反馈,普元收到您的反馈后将及时答复和处理。
