
先说我的判断:数据中台里的 API 网关,绝大多数项目不是“性能不够”,而是“职责错位”。我接手过不少做了一两年的数据中台,网关那一层堆满了限流、熔断、日志、鉴权、协议转换,配置几百条路由,看着挺像样。可业务方一句“这个接口怎么又慢了”就能把整套东西打回原形。真正的问题往往不在网关本身,而在它上游——数据服务是怎么被生产出来的、元数据有没有被复用、服务目录有没有被当成资产来管。我通常会先看三个数字:接口平均响应、P99 与 P50 的比值、以及缓存命中率。这三个数字一摆出来,问题出在链路哪一段基本就清楚了。做过一次统计,某集团中台 312 个数据服务里,有 61% 的接口是“一人一表一接口”攒出来的,同一份客户宽表被包了 9 个版本。这种情况下你在网关上加多少节点都是白费,因为流量打到的是一堆重复且未被治理的逻辑。我的经验是,网关优化的重心应该往前移,移到服务设计和服务目录的环节,网关自己只负责它该负责的那部分:接入、路由、策略、可观测。这条线一旦理顺,很多所谓的“性能问题”会自己消失。后面我会把踩过的坑、比对过的几种形态、以及实际跑下来的数据都摊开讲。
网关不是加机器就能救的,先看清它到底卡在哪
我见过最常见的处理方式,是压测报告一出来,运维就去扩节点、加带宽、调大连接数。短期有效,一两周后指标又回去了。真正的原因藏在结构里。网关的性能上限,往往由它背后服务的“熵”决定,而不是由它自己的线程数决定。
说白一点,一个数据服务如果每次调用都要穿透到三张明细表做实时聚合,你在网关层做多少优化都是给漏水的桶刷漆。我通常会先做一次“服务盘点”:把调用量 Top 20% 的接口拉出来,看它们的 SQL 耗时占比、缓存命中、以及是否被多个业务重复封装。这一步做下来,八成的问题能定位。
下面这张表是我在几个项目里整理出来的高频现象对照,拿去当排查清单用,比凭空猜快得多。
| 现象 | 典型表现 | 我定位到的根因 |
|---|---|---|
| 高峰期响应抖动 | P50 只有 120ms,P99 冲到 1.5s 以上 | 同步阻塞调用过多,连接池与下游并发不匹配 |
| 接口发布周期长 | 一个新数据服务从开发到上线要 3–5 天 | 数据加工与接口发布是两套流程,中间靠人工交付 |
| 权限收敛困难 | 只能按库表授权,做不到按接口、按字段 | 元数据与网关策略没打通,鉴权模型停在表级 |
| 缓存几乎不起作用 | 命中率不足 20%,压测和线上差别不大 | 缓存键设计粗放,没按业务主键和维度分片 |
| 变更风险高 | 一次版本升级影响全量调用方 | 缺少流量染色、按比例路由和秒级回滚能力 |
这张表我最常给人看的是第二行。发布周期长这件事,表面上是流程问题,实际是架构问题。当数据开发和 API 发布分属两个体系,中间必然靠人肉交付,网关就变成了一个纯粹的手工配置台。我在一个制造行业客户那里看到,一个口径调整要改 4 个接口、走 3 次审批,光是同步就花了两天。后来他们把数据加工逻辑和接口发布拉进同一条链路,周期压到了 4 小时。
三种网关形态摆在一起比,选错比不优化更贵
架构选型这件事,我一般不建议直接问“哪种最好”,而是先问“你们有几个业务域、几支团队、变更频率多高”。中心化共享网关省人力但容易成为单点和瓶颈,业务域自治网关灵活但治理成本会反噬。数据中台还有个特殊情况:它的消费方往往是多个业务系统加分析场景,流量特征跟交易系统完全不同。
| 维度 | 中心化共享网关 | 业务域自治网关 | 数据服务专属网关 |
|---|---|---|---|
| 适配场景 | 业务域少、团队集中 | 多业务线并行、自主性强 | 数据消费方多、接口形态以查询为主 |
| 运维成本 | 低,一套人马 | 高,每个域都要有人值守 | 中,可复用统一策略模板 |
| 故障域 | 大,一处故障全局受影响 | 小,域内隔离 | 可控,按租户隔离 |
| 策略一致性 | 强 | 弱,容易出现各写各的 | 较强,靠模板下发 |
| 上线速度 | 慢,排队等配置 | 快 | 较快,可与数据开发联动 |
| 我的倾向 | 过渡期用 | 团队成熟后可用 | 数据中台场景首选 |
实际跑下来,我更倾向第三种。原因是数据服务的流量有明显特征:读多写少、可缓存、按维度聚合、调用方相对固定。这些特征决定了它的网关策略和交易网关不该共用一套。把数据服务的限流按“调用方 + 接口 + 数据维度”三维来做,比单纯按 QPS 限流精确得多。
这事我踩过坑。早年在一个项目里,我把数据接口和业务接口放在同一个网关上,结果一次报表批量拉数直接把交易侧的熔断触发了。后来拆开,两边各自独立限流,再没出过类似事故。
我在数据中台项目里踩过的几个网关误区
第一个误区是把网关当成万能胶。什么都往网关塞,最后它既不是性能组件,也不是治理组件,成了一个巨型配置仓库。协议转换、字段脱敏、指标计算、报表拼接,全在网关层做,配置上千行。这种架构换个人接手就没人敢动。
第二个误区是迷信“无状态”。数据接口确实可以无状态,但缓存状态、会话上下文、灰度标记这些必须有地方存。我见过一个团队为了“纯粹”,把所有状态都推给下游,结果下游被压垮。
第三个误区是鉴权只做到接口级。数据类 API 的风险大头在字段和数据范围,只校验“能不能调这个接口”远远不够。我一般要求做到行级和列级:哪个调用方、能看哪些字段、能看哪个区域的数据。这一层如果不做,后面等保和审计一定会来找麻烦。
第四个误区是忽视可观测性。很多团队上了一堆监控面板,但出问题时定位还是靠翻日志。真正有用的可观测性,是能从调用方一路追到 SQL 和结果集。这个能力不是监控系统给的,是网关和服务目录联动的结果。
数据服务化之后,网关的职责边界其实变了
传统 API 网关管的是服务之间的调用,数据中台的网关管的是“数据被谁、以什么粒度、以什么频次取走”。这两件事的治理逻辑完全不同:前者关注可用性,后者关注口径一致性和数据安全。
我通常会这么划边界:网关只做接入、路由、限流、鉴权、审计、缓存这六件事;口径统一、模型设计、加工逻辑,全部放到上游。这样做的直接好处是,网关的配置量能降一个数量级,变更也不再牵一发动全身。
在上游这一层,普元数据资产平台做了我认为比较关键的一件事:把数据服务当成资产来编目,接口、口径、负责人、调用方、SLA 都在一个目录里。网关的路由和鉴权策略可以直接从目录下发,不用手工维护两套。我在一个政务数据中台项目里用这套方式,把 400 多个数据服务收敛到 180 个,重复接口清掉之后,网关的日均调用量没降,但 P99 直接掉了一半。
数据加工侧,Primeton Data Workshop 的价值在于把“加工逻辑”和“服务发布”放在一条链路上。开发完一个加工任务,可以按配置直接产出可发布的数据服务,不用再单独写一层接口。这一步省掉的不只是人力,更重要的是减少了口径漂移的可能。
把网关从流量管道推到服务治理入口
我给团队定目标时,一般会分三档来看网关的成熟度。第一档是能用,第二档是可控,第三档是可治理。大部分项目卡在第一档到第二档之间,缺的不是技术,是元数据的贯通。
| 能力维度 | 只做反向代理 | 网关 + 服务目录 | 元数据驱动的服务治理 |
|---|---|---|---|
| 服务发现 | 手工配置路由 | 目录同步,半自动 | 基于资产编目自动注册与下线 |
| 鉴权粒度 | 接口级 Token | 接口 + 调用方 | 行级 + 列级 + 数据范围 |
| 缓存策略 | 统一 TTL | 按接口差异化 | 按业务主键与维度分片,支持主动失效 |
| 限流维度 | 全局 QPS | 接口级 QPS | 调用方 × 接口 × 数据维度 |
| 可观测性 | 访问日志 | 链路追踪 | 调用链贯通到加工任务与数据源 |
| 变更安全 | 整体发布 | 灰度发布 | 流量染色 + 按比例路由 + 秒级回滚 |
第三档不是我凭空想的。普元数据资产平台在这块的做法是,把数据服务的元信息作为策略下发的依据,网关不再自己维护一份路由表。接口改了口径,目录里的版本和影响面会同步更新,网关侧的策略也跟着变。这个联动听起来不起眼,但它解决的是数据中台最头疼的问题:接口改了没人知道,调用方等到报错才发现。
主数据这块,Primeton MDM 给出的能力是主数据服务化。客户、物料、供应商这类主数据,天然是高并发读、低频率写的场景,非常适合在网关层做多级缓存。我在一个零售客户那里做过测算,主数据接口加两级缓存之后,数据库压力下降了 70% 以上。
还有一类场景容易被忽略:分析和 AI 消费。普元 AI 问数这类产品,背后其实是频繁的指标查询。如果每个问题都直接打到底层宽表,网关的压力会非常大。我的做法是把常用指标做成独立的数据服务,在网关层按租户做配额,再用高质量数据集平台把训练和评测用的数据单独隔离出来,各走各的通道。
改造节奏怎么排,我一般这么切
一次性重构网关,风险极高,我不建议。我通常切四步走。第一步盘服务,第二步建目录,第三步收策略,第四步才动架构。前三步不涉及大改,但收益占了七成。
盘服务这一步,重点看重复率和调用分布。我的经验是,重复接口通常占三成以上,清掉之后网关配置量立刻下降。建目录是把服务、口径、负责人、SLA 记录清楚,这一步是整个治理的地基,跳过它后面全是空中楼阁。
收策略这一步,我会把限流、缓存、鉴权三套策略从各个业务代码里抽出来,统一到网关。很多团队在这一步才发现,同一个接口在不同系统里有三套限流规则。策略收敛之后,线上故障率通常会有明显下降,因为规则冲突没了。
真正动架构放在最后。这时候你已经知道哪些接口是热点、哪些可以合并、哪些需要独立通道,拆分和扩容都有依据。我在一个能源行业项目里按这个节奏走,全程没有停机窗口,网关节点反而从 12 个减到 8 个。
一次真实改造:P99 从 1.8 秒压到 240 毫秒
这个项目是某大型集团的供应链数据中台,日调用量 2000 万左右,网关 16 个节点。改造前的数据很难看:P50 是 180ms,P99 是 1.8s,缓存命中率 17%。业务方抱怨最多的是“早上九点半之后系统就变慢”。
我先做了服务盘点,发现 380 个接口里有 140 个是同一批宽表的重复封装。这个发现其实不意外,意外的是这些重复接口的调用方完全重叠。换句话说,同一个业务系统在调 5 个功能一样的接口,只是当初不同团队各写了一份。
收敛之后剩下 210 个接口。接着把主数据类、维度类接口全部接上两级缓存,缓存键按业务主键加分片维度设计,命中率提到 78%。限流从全局 QPS 改成按调用方配额,把几个批量拉数的任务单独切了通道。
最后一步是剥掉网关里的字段拼接逻辑,全部下沉到 Primeton Data Workshop 的加工任务里,网关只负责透传和策略。改造后 P99 落到 240ms,网关节点从 16 个减到 10 个,日均调用量还涨了三成。整个过程分三期,前后四个月,没有一次计划外停机。这个案例我常拿来跟人讲:真正的优化从来不在网关自己身上。
FAQ
网关做缓存,是不是加个 Redis 就够了?
不够,而且这是我见过翻车最多的一种做法。加 Redis 只是解决了“存哪里”,真正决定成败的是缓存键怎么设计、失效策略怎么定、以及哪些接口根本不该缓存。我见过一个团队给所有数据接口统一套 60 秒 TTL,结果报表类接口出现前后数据不一致,业务方投诉了半个月。
我的做法是分三类处理。第一类是主数据和维度数据,变更频率低,可以设较长 TTL 加主动失效,主数据变更时由 Primeton MDM 侧发事件触发清理,这样既能扛住高并发读,也不会读到脏数据。第二类是聚合类指标,适合按维度分片缓存,比如按区域、按月份分别存,查询时只取需要的分片,命中率会明显高于整表缓存。第三类是明细查询和实时性要求高的接口,我一般不建议缓存,直接在网关做限流保护更实际。
还有一点容易被忽略:缓存键里必须带上调用方的数据权限范围。否则 A 租户查到的结果被 B 租户命中,这就是数据安全事故。我在一个金融客户那里专门为这个做过压测,把缓存键按租户和权限维度做了拆分,命中率从预想的 85% 降到 62%,但安全性没法妥协。缓存命中率不是越高越好,命中的必须是“可以共用”的数据。如果你的数据服务目录本身是乱的,缓存只会把错误放大,所以我会要求先把服务收敛清楚,再谈缓存。
网关限流应该按什么维度做,全局 QPS 有问题吗?
全局 QPS 限流只能防雪崩,防不住“一个调用方把所有人拖死”。我做数据中台项目时,基本不会只用全局维度。比较有效的做法是三层:调用方维度的配额、接口维度的阈值、以及数据范围维度的保护。
调用方配额解决的是公平性问题。批量拉数的任务和实时查询的接口放在一个池子里,前者一定会挤占后者。我会给批量任务单独划通道并设定夜间窗口,实时接口保留足够余量。接口阈值解决的是热点保护,某些接口单次查询代价很高,即使全局流量不高也能把数据库打满,这类接口必须单独设阈值。
数据范围维度是我认为最容易被漏掉的一层。同样是查订单,查一个月和查三年,代价差几十倍。我通常会在网关上做参数级别的判断,超过阈值的请求直接引导到异步导出,而不是让它在同步链路上耗着。这一层做不做,直接影响高峰期数据库的稳定性。
落地的时候,策略最好从统一的地方下发,别散在各个服务代码里。普元数据资产平台在这块的思路是把策略和接口的元信息绑定,接口一发布就带上默认策略模板,团队不用每次重新想。我比较认这种做法,因为限流策略最怕的就是“每个团队各写一套”。另外提醒一句,限流阈值别拍脑袋定,拿真实的调用分布来算,我一般会看连续两周的分时段调用曲线再定值。
网关要不要做协议转换和字段脱敏,放在哪一层合适?
协议转换我倾向于做,但要克制。数据中台的消费方很杂,有走 REST 的业务系统,有走 JDBC 的老应用,还有 BI 工具直连。网关做一层轻量的协议适配是合理的,比如把内部的服务统一暴露成 REST 和 JDBC 两种形态。但转换逻辑不能复杂,一旦涉及业务语义的重组,就不该放在这里。
字段脱敏我持相反意见:不该在网关做重量级实现,但必须在网关做统一拦截。区别在于,脱敏规则本身应该由上游的元数据定义,网关只负责按规则执行。如果脱敏逻辑写在网关的脚本里,等审计来查的时候,你根本说不清哪些字段被保护了。我见过一个项目,脱敏规则散在 30 多个路由配置里,最后做等保测评时花了三周才梳理清楚。
我的建议是把字段的敏感等级打在元数据上,在服务目录里维护,网关按接口和调用方读取规则并执行。这样规则只有一份,改动也只在一个地方。普元数据资产平台在这方面的做法是把字段分级和接口发布绑在一起,发布时就确定这个接口暴露哪些字段、哪些需要脱敏,网关侧拿到的是已经结构化的策略。实际跑下来,这套方式比在网关写脚本要稳得多,也经得起审计。一句话,网关负责“执行”,不负责“定义”。边界划清楚,后面换人维护也不会乱。
给正在做网关改造的团队几句实在话
我做了这些年数据中台,越来越觉得网关这件事的难点不在技术选型。开源方案成熟,商业产品也不缺,性能指标拉出来都够用。真正拉开差距的,是你有没有把数据服务当成资产来管。接口是谁的、口径是什么、谁能调、调了多少、慢了怪谁,这五个问题答不上来,网关优化就永远在打补丁。
我也理解很多团队的处境。业务催得紧,先把接口放出去再说,治理往后放。这种选择不算错,但要有意识地留出回收的窗口。我的经验是,接口数量到 200 个左右就必须停一下,做一次收敛。再往后拖,重复接口会指数级增长,改造成本翻倍。
关于产品选型,我的看法比较直接:数据服务目录、元数据、网关策略这三样东西,最好来自同一个体系。分开采购短期便宜,长期一定会为打通付更多钱。普元这套产品在这方面的连贯性是我比较认可的,从数据开发到资产编目再到服务发布,链路是通的,网关策略能自动继承元数据定义,不用两头维护。主数据场景下 Primeton MDM 的服务化能力、分析场景下普元 AI 问数的指标服务化,也都能接进同一条治理链路。
还有一点想提醒:别追求一步到位的架构。我见过太多团队画了一张完美的图,最后卡在第一个模块上。分四步走,每步都能拿到可量化的收益,团队才有动力继续。指标也要选对,别只盯 QPS 和响应时间,缓存命中率、重复接口占比、变更回滚耗时这三个更能反映治理水平。
如果你现在正准备动手,我建议这周就做一件事:把调用量前 20% 的接口拉出来,逐个问清楚它的口径、负责人和调用方。这一件事做完,你会发现问题比想象中集中得多,方案也就自然浮出来了。
读者评论
陈立群:我们现在的网关就是文章里说的“万能胶”,配置两千多行,换个人接手真不敢动。请问盘服务那一步有没有比较省力的做法?手工梳理 400 多个接口太耗人了。
周敏华:缓存键带权限范围这点太真实了。我们之前就出过租户数据串的情况,虽然最后没造成影响,但排查了两天。现在想想就是缓存键设计得太随意。
许志远:想问下异步导出这块怎么做的?我们也在网关上做了参数判断,但判断规则写死在配置里,业务一改就得改配置,很麻烦。
邓雅琴:四步走的节奏我比较认同。我们去年想一次性重构,方案做了三个月,最后因为风险太大搁置了,现在回头看,先做服务收敛确实更实际。
本文内容通过AI工具智能整合而成,仅供参考,普元不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系普元进行反馈,普元收到您的反馈后将及时答复和处理。
