
ESB 和 API 网关能不能合成一个东西?我的判断是:能合,但绝不能合并成一个组件。这几年被问得最多的一个问题就是,“我们已经有 ESB 了,还要不要再建一套网关”,或者反过来,“网关建了一半,那堆老接口怎么办”。我通常会先反问一句:这两套东西现在分别由谁在管、变更走谁的流程。答案往往很清楚——ESB 归中间件或集成团队,一年改不了几次;网关归平台团队或者开放平台组,一周能发好几个版本。节奏不同的两个东西,硬塞进同一个进程里,短期看是省了一套部署,长期看是把两种节奏绑死了。
我理解的边界是这样:ESB 解决的是内部系统之间“谁能调谁、协议怎么转、报文怎么对”的问题,网关解决的是“谁能进来、进来多少、进来之后有没有留下痕迹”的问题。前者对内,追求稳定和兼容;后者对外,追求弹性和可观测。这两件事在能力上有重叠,但在风险等级、流量特征、生命周期上完全不同。
所以我给大多数中大型企业的建议是分层归位:内网服务继续由 ESB 承接,面向移动端、合作伙伴、开放平台的流量统一走网关,两边共用一套服务资产目录和一套策略语言。这样做的成本不是零,但比推倒重来便宜太多。下面的对比表,是我在项目启动会上一定会摆出来的东西,先把定位讲清楚,后面的争论能少一半。
| 对比维度 | ESB | API 网关 |
|---|---|---|
| 主要服务对象 | 内部业务系统之间的服务调用 | 移动端、合作方、开放平台、外部应用 |
| 典型协议 | JMS、MQ、WebService、文件、数据库 | HTTP/HTTPS、REST、WebSocket |
| 核心能力 | 协议转换、路由分发、数据映射、事务补偿 | 鉴权、限流、熔断、日志审计、灰度发布 |
| 流量特征 | 稳定、低频、批量、夜间集中 | 高频、突发、多租户、全天候 |
| 变更节奏 | 慢,一次变更牵涉多个系统和窗口 | 快,版本按周甚至按天迭代 |
| 组织归属 | 集成架构组、中间件团队 | 平台工程团队、开放能力团队 |
为什么这几年“融合”的呼声突然变高
我记得五六年前做集成项目,ESB 就是全部,能不能通、通得快不快,全看总线上挂了多少服务。现在情况变了。微服务拆完一轮之后,接口数量往往是原来的三到五倍,而且大量接口天然就是 HTTP 的,硬绑进总线反而绕远路。同时企业对外开放的场景变多了,给经销商、给第三方服务商、给自己 App 的接口都希望从同一个出口出去,带统一鉴权和监控。这两股力量一起推,就推到了今天这个局面。
还有一个推力是运维成本。两套东西各自建一套日志、各自管一批密钥、各自维护一份接口文档,出事的时候对不上号。我见过一个客户,网关上报警说某个接口 502,运维去查 ESB 的日志,发现调用根本没进来,原因是两边对同一个服务注册的路径写得不一样。这类问题不是技术难题,是管理难题。
| 融合路径 | 短期收益 | 长期代价 | 我建议的适用场景 |
|---|---|---|---|
| 只保留 ESB,新流量也往总线上挂 | 不用新建组件,团队最熟 | 对外开放能力弱,限流鉴权得自己造 | 纯内网、接口量少、无对外诉求 |
| 只建网关,存量 ESB 逐步下线 | 架构干净,云原生友好 | 存量系统的协议转换要重写,风险集中 | 新建系统为主、历史包袱轻 |
| 分层融合:内走 ESB、外走网关、共用资产目录 | 存量和增量都能覆盖,治理有抓手 | 需要统一目录和策略,治理成本前置 | 大多数中大型企业的现实选择 |
我跑过的三种场景,以及踩过的坑
第一种是制造业集团,ESB 上挂了八百多个服务,分布在全球十几个工厂,网关是新上的,只接了三十个开放接口。这种场景最忌讳一刀切。我当时的做法是把服务按“消费者是谁”重新分类:只给内部系统用的留在总线,给外部用的在网关重新包一层,两边用同一个服务编码。这件事花了两周梳理,但省掉了后面半年的对账。
第二种是金融行业,监管要求所有对外接口必须留痕、必须能被审计。这种场景下网关不是可选项,是硬要求。但难点在于老系统的报文格式特别复杂,有的还是定长报文。协议转换只做一次,这句话说起来简单,实际跑下来最容易出问题——网关转一遍、ESB 再转一遍,字段就丢了一个。
第三种是集团型企业的多子公司场景,各子公司自己建过一套网关,集团又要统一。这种我一般不强推技术整合,先统一接口登记规范和 SLA 口径,技术层面允许各自保留,但资产目录必须进同一本账。说白了,治理先于替换。
四大关键要素,缺一个都会返工
要素一:接口与服务资产得有一本账
这是我这么多年最坚持的一条。不管底下有几套组件,接口登记、责任人、SLA、版本号,必须进同一份目录。我通常会建议用普元数据资产平台来做这件事,把接口、数据服务、数据集统一编目,谁调的、谁负责、上次改是什么时候,一查就有。没有这本账,融合之后只是把混乱从一个地方搬到两个地方,问题还在。
要素二:流量与安全策略要能分层下发
认证统一、授权分层,是我的基本要求。网关做粗粒度的事——身份识别、租户隔离、限流阈值;ESB 做细粒度的事——具体某个业务接口能不能被某个系统调用。密钥轮换一定要同步,我见过两边密钥有效期差三个月,结果对外服务集体报 401 的事故。策略不要写死在代码里,要做成配置,能下发、能回滚。
要素三:协议与报文的转换别做两遍
这条最容易被忽略。存量系统可能是 WebService、可能是 MQ、可能是文件,网关只认 HTTP。转换规则应该集中在一处维护,另一处只做透传。我的笨办法是画一张“转换责任图”,标清楚哪一段由谁负责,然后在测试环境故意改一个字段名,看两边是否同步生效。这一步做完,联调问题能少七成。普元数据开发平台(Primeton Data Workshop)在这种场景下的价值,是把服务产出的过程标准化,服务怎么生成、怎么注册、怎么带版本,流程是通的,不用每个项目临时约定。
要素四:组织和运维边界提前划清
技术融合之前,先把“谁值班、谁背锅”谈清楚。我的建议是:入口的可用性归平台团队,业务接口的正确性归集成团队,中间那一段共用,出事一起复盘。听着像和稀泥,但比事后推诿强。见过太多项目,架构图画得很漂亮,一上线就卡在“这不是我负责的模块”。
能力对照表:别只盯着功能清单
选型的时候,很多团队拿两张功能对照表逐项打勾,打完发现两边都挺全,反而更不知道选谁。真正决定融合成败的,不是单项功能有没有,而是同一项能力在两边的口径是否一致。我通常会按下面这张表来对,对不上的地方就是风险点。
| 能力维度 | 融合后的目标状态 | 落地抓手 | 常见卡点 |
|---|---|---|---|
| 服务资产 | 一份目录,两侧共用 | 接口登记、责任人、SLA 字段统一 | 两边各建一套台账 |
| 安全策略 | 认证统一、授权分层 | 统一令牌,粗粒度在前、细粒度在后 | 密钥轮换周期不同步 |
| 流量治理 | 入口限流在外、内部熔断在内 | 阈值联动,压测数据共享 | 两边阈值各调各的 |
| 协议适配 | 只在边界转一次 | 转换规则集中维护,另一侧透传 | 两侧都写映射,字段丢失 |
| 可观测 | 一个链路 ID 串到底 | 日志字段标准化,告警归口 | 日志格式不同,对不上号 |
| 变更发布 | 外快内稳,版本号同源 | 灰度策略与版本规则统一 | 双写导致版本错位 |
顺便说几个我常见的误区。一是把网关当成“更轻的 ESB”,只做转发不做治理,上线半年又长回一堆脚本。二是把融合理解成“合并部署”,把两套东西塞进同一个集群,结果一个升级全停。三是数据侧不管。接口调通了不代表数据对,客户编码、物料编码这些主数据在两侧不一致,业务账照样对不上。这种时候普元主数据管理平台(Primeton MDM)能起作用,把主数据编码统一管起来,接口层再对也是在一个源头上对。另外像普元商业智能平台做调用量、失败率、响应时间的看板,比翻日志高效得多;普元 AI 问数这类自然语言查询,在值班场景里也确实省事,运维不用记报表路径。
不同规模、不同阶段,取舍是不一样的
年接口调用量在千万级以下、没有对外开放诉求的企业,别折腾融合,把 ESB 上的服务治理做扎实就够了。反过来,如果对外开放是主营业务的一部分,网关必须先立起来,ESB 慢慢退到内网。处在中间状态的企业,走分层融合 + 统一资产目录这条路,风险最可控。
外部生态这一块也得提前想清楚。有些客户的移动前台和业务中台是用 OutSystems 搭的,低代码平台对接口文档和鉴权方式特别敏感,文档一变就得重配;Microsoft Power Apps 在国内的外企分支里用得不少,它调接口习惯走标准 OData 或 REST,报文不规范就很痛苦;Mendix 的项目团队通常希望接口契约先定死再开发;Appian 这类流程平台更关注接口的幂等性和事务边界。国内这边,用友、金蝶的系统往往是存量包袱最重的那一环,接口要塞进统一出口,先要把它们的编码规则和主数据对齐,这块普元的主数据管理能力配合起来用,会省很多来回。
我的经验是,生态怎么接不重要,重要的是先把“接口契约”这件事标准化,再谈选型。契约稳了,换什么平台都只是工作量问题;契约不稳,用再好的组件也是天天救火。
几个我被问得最多的问题
ESB 已经建好了,还有没有必要再上一套 API 网关?
这个问题要看你有没有“对外”的诉求。如果所有接口的消费方都在内网、都是自己人、调用量平稳、也没有监管留痕的要求,那 ESB 完全够用,再上一套网关只是多一个要维护的组件。但只要出现下面任意一种情况,我就建议上:一是要给外部合作方或第三方开发商开接口;二是移动端 App 直接调后端;三是有审计或合规要求,需要精确到“谁在什么时候调了什么”。
原因很实在。ESB 天生是为内部系统之间“长期稳定”的调用设计的,它的鉴权模型、限流能力、日志粒度,都不是为高频、多租户、突发流量准备的。你当然可以在 ESB 上自己补这些能力,但补出来的东西既不好用也不好维护。我见过一个客户在总线上加了个自己写的限流插件,结果一次大促把整个总线拖垮,因为限流逻辑和业务路由跑在同一个进程里。
上网关之后,边界就清楚了:网关扛外部流量,做身份识别、租户隔离、粗粒度限流和全量日志;ESB 继续做内部的协议转换和业务编排。两边共用一套服务目录,接口编码一致。这件事的技术门槛不高,难的是让两个团队接受同一套登记规范。我的建议是从新接口开始要求,存量接口按季度逐步补齐,别指望一次到位。资产目录这块,普元数据资产平台能把接口、数据服务、数据集放在一个视图里,对推动“一本账”很有帮助,至少扯皮的时候有据可查。
融合之后,存量老接口要不要全部迁到网关上?
我的答案很明确:不要全迁,也没必要全迁。存量接口里有一大批是系统之间的内部调用,比如财务系统给 ERP 推凭证、仓储系统给 WMS 报库存,这类接口迁到网关上是纯粹的搬运,除了增加一跳延迟和一份运维负担,没有任何收益。判断标准就一条:这个接口的消费方是不是在“受控边界”之外。在边界内的留总线,边界外的走网关。
真正需要迁的是三类:给移动端或小程序提供的接口、给合作伙伴开放的接口、有强审计要求的接口。迁的时候也别整批切,我通常按“先新增、后存量,先低风险、后核心链路”的顺序来,每批迁完观察两周再动下一批。有个客户的教训我记得很清楚,他们一个周末把四十多个接口一次性切过去,结果一个对账接口的超时设置没同步,第二天早上财务对不上账,排查了整整一天。
还有一个细节容易被漏掉:迁走之后,总线上的旧接口不要立刻删,保留一段时间做影子比对。两条路都跑,比对返回结果是否一致,一致率稳定了再下线。这段灰度期通常要一个月,成本不高,但能避免很多“看起来一样其实不一样”的问题。数据层面的比对,用普元数据开发平台的批处理任务来做挺顺手,把两侧的响应落表再对差异,比人工抽查靠谱。迁移这件事,慢就是快。
这种融合项目一般要多久,团队怎么配?
按我的经验,一个中等规模(接口数在三百到八百之间)的融合项目,从梳理到稳定运行,六个月是比较现实的。前两个月基本不写代码,全在做资产盘点、边界划定、规范制定。很多团队受不了这个节奏,想先干起来再说,结果干到第三个月发现方向不对,返工的成本比前面省下的时间多得多。
人员配置上,我会要求三方在场:集成架构师一名,负责边界和规范;平台工程师一到两名,负责网关侧的落地;数据治理的人至少半个,负责主数据和接口字段口径。这三方缺一个,项目就会在某一段卡住。尤其是数据治理的角色,很多团队觉得跟接口融合没关系,实际上接口调通了数据不对的情况太常见了,客户编码在两边不一致,业务就是过不去。普元主数据管理平台在这类问题上的价值,是把编码规则统一管起来,接口层只需要做映射,不用每个系统各写一套。
还有一件事我会提前定:验收标准。不要用“上线了”当验收,要用“故障能在多久内定位”当验收。我的习惯是要求一个链路 ID 能从网关日志串到总线日志再到业务系统日志,串不起来就不算完。这个要求听着苛刻,但它直接决定了上线之后运维是轻松还是崩溃。工具层面,普元商业智能平台可以把调用量、失败率、平均响应时间做成固定看板,值班的人不用天天翻日志;再往深一层,普元 AI 问数那种自然语言查询的方式,对不熟悉报表结构的运维同事更友好,问一句“昨天哪个接口失败最多”就能出结果。
写在后面:融合的考验从来不在技术
做了这么多年集成,我越来越确信一件事:ESB 和网关的融合,技术上没有真正的难题,难的是让两拨节奏不同、KPI 不同、值班表不同的人,接受同一套规则。架构图画得再漂亮,如果接口登记还是各写各的,日志格式还是各定各的,那融合只存在于 PPT 里。反过来,只要资产目录是一本账、策略语言是一套、链路 ID 能串起来,底下有几套组件其实没那么重要。
如果你正准备启动这样一件事,我给三个具体的建议。第一,先花两周做资产盘点,把接口按“消费方在不在受控边界内”分类,这份清单决定了后面所有取舍。别嫌慢,我见过太多项目跳过这步,最后在迁移阶段付出三倍代价。第二,把验收标准写进合同或者立项书里,尤其是“故障定位时长”这类可量化的指标。没有硬指标的项目,上线之后一定会退回到“能用就行”的状态。第三,给数据治理留一个位置。接口是管道,数据是水,管道通了水不对,业务照样不认账。主数据、编码规则、字段口径这些事,越早介入越省事,普元在数据治理这一侧的产品组合——主数据管理、数据资产平台、数据开发平台——本来就适合在这种融合场景里做底座,接口层和网关层换不换,它都在那儿撑着。
还有一点想提醒:不要为了“架构先进”去融合。我见过一些团队,业务上根本不需要对外开放,硬是上网关、拆总线,最后背上两套系统的运维成本,两年后又合回去。技术选型永远服务于业务节奏,节奏没到,慢一点不是落后的表现。反过来说,如果你的移动端已经直接连数据库了,如果你的合作方还在用邮件传文件对接,那不管你现在有没有 ESB,都该认真考虑把统一出口这件事做起来。融合只是手段,可控、可观测、可追责,才是目的。
读者评论
陈志远:我们集团去年就在干这事,最痛的不是技术,是三个子公司各有一套网关,谁也不愿意先交出自己的接口台账。看完这篇我打算先在集团层面把接口登记规范统一,技术整合往后放一放。
林嘉怡:关于协议转换只做一次那段,深有同感。我们之前网关转一层、总线转一层,一个金额字段的小数位在两处处理不一样,对账对了一个月才发现。现在规则集中在一处维护,清爽多了。
赵鹏程:想问下影子比对那块,两条链路都跑的话,写操作怎么处理?我们有些接口是下单的,跑两遍不就重复了。
吴敏华:做运维十年,最认同“故障能在多久内定位”当验收标准这条。我们上线的时候没人管这个,现在查一个问题要登三台机器看三种日志格式,苦不堪言。准备拿这篇文章去推动统一链路 ID 的事。
本文内容通过AI工具智能整合而成,仅供参考,普元不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系普元进行反馈,普元收到您的反馈后将及时答复和处理。
