ESB和网关怎么融合?揭秘架构整合的四大关键要素与挑战有哪些?

ESB 和 API 网关能不能合成一个东西?我的判断是:能合,但绝不能合并成一个组件。这几年被问得最多的一个问题就是,“我们已经有 ESB 了,还要不要再建一套网关”,或者反过来,“网关建了一半,那堆老接口怎么办”。我通常会先反问一句:这两套东西现在分别由谁在管、变更走谁的流程。答案往往很清楚——E

ESB与API网关融合架构

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

赞 (0)
APIAnAPIAn
上一篇 4天前
下一篇 4天前