LIANERShenYu 网关解耦与迁移方案PDF
LIANER FITMOMENTS · ENGINEERING REVIEW
方案评审

网关迁移

11-02 线上故障后的方案:网关这一层要不要,怎么不停服地拿掉 ShenYu。

适用William · 后端研发 · 运维值班
来源2026-11-02 生产网关故障复盘
版本v1.0 · 2026-11-02
练二一下,好状态。
练二健身 · 研发中心 hellolianer.com
01
Scope

结论

练二这个规模不需要再买专门的网关,改成服务自己接 HTTP,按服务逐个切走。

更正 11-02 上午的两处说法

一、服务用的是老版本 Dubbo 2.6.5,不支持「Triple 协议直接对外」,改用服务里已有的 Spring Web 接 HTTP。

二、生产 ZooKeeper 不只是给网关用的,它也是服务之间互相调用的注册中心,下线 ShenYu 时必须保留,高可用单独立项。

02
Current

现在的链路

所有前端请求都先经过 ShenYu,由它翻译成服务能听懂的 Dubbo 调用。

01前端小程序 · 后台 · H5地址都是 /prod-api/…02入口nginx和网关、后台、ZooKeeper 在同一台机03网关ShenYu 把 HTTP 翻译成 Dubbo今天丢了路由,又被重复启动04配置网关后台 + ZooKeeper 推路由约 930 条,新接口要手工补05服务user · coach · ground · payment两台机,彼此用 Dubbo 调用四个环节挤在一台机上任何一个出问题,全线停摆
今天的故障:网关丢了路由,后台同步成功却没送到;重启时又起了两个进程

1网关实际在干的事

按路径分发把 /user、/coach、/payment、/ground 送到对应服务。nginx 本身就能做
HTTP 转 Dubbo每个接口一条手工配置,生产不会自动注册,漏配就报 -107 / -102
登录与身份解析登录 token,把会员、管理员、教练的身份写进请求,服务据此判断是谁
签名、加密插件开着,但前端代码里没看到签名或加密调用,需在后台只读确认是否在用
好消息

服务已经能直接对外提供 HTTP:支付和用户的回调地址本来就绕过 ShenYu、由 nginx 直连服务。后台接口的登录校验服务端也已经自己做了一遍。

03
Gateway

托管网关管什么

托管网关卖的是「入口不用自己运维」和「统一治理」,下面逐项看我们需不需要。

多机热备需要。不买网关的办法:负载均衡 + 两台 nginx
路由需要但简单。nginx 4 条转发规则就够
统一登录校验需要。服务里本来就要校验一遍,入口再做是锦上添花
限流防刷大促有用。nginx 能做简单限流;业务防刷本来就要写在服务里
防攻击 WAF有用。WAF 是单独的产品,可直接挂在负载均衡或域名上,不依赖网关
HTTP 转 Dubbo不推荐。还是每个接口手工配一遍,等于把今天的痛点搬上云
灰度切流迁移期有用。nginx 按比例分流就能做
开放平台给第三方发密钥、按量收费。我们现在没有这种需求
日志监控有用。nginx 日志接入阿里云日志服务即可

费用参考:MSE 云原生网关每个节点(2 核 4G)约 422 元/月,至少 2 个节点;云原生 API 网关以购买页为准。钱不是主要成本,主要成本是多一个要学、要配、出事要查的产品。

04
Options

要不要专门网关

坦白说:现在不需要。4 个服务、一个团队、没有开放平台,nginx 加统一鉴权库就够了。

四种做法A 继续用 ShenYu,只加固改动最小,手工配路由的痛点还在只做止血B 不要专门网关nginx + 服务自己接 HTTP + 统一鉴权推荐C 托管网关 + 服务 HTTP免运维、功能全,多一个产品和月费以后再说D 托管网关做 HTTP 转 Dubbo930 个接口要在云上再手工配一遍不推荐练二现在的规模,B 就够用
B 方案以后随时能在 nginx 前加托管网关,不用推倒重来

1什么时候才值得上托管网关

05
Review

astra 的意见

11-02 17:10 把现场情况和代码事实交给 astra,以下是它的原话要点,未改动。

astra
同意去 ShenYu,不赞成把采购网关作为前置条件。这次暴露的是单机故障域、配置同步不可观测和手工运维失控。换产品不能自动解决这些问题。
astra
这个规模可以不设专门网关。建议 SLB→双实例 nginx→服务 HTTP 适配层,共享鉴权库,内部暂留 Dubbo。出现多团队、多消费者配额、频繁灰度或明显入口运维负担,再买托管网关。
astra
最大风险是 REST 绕过服务端鉴权。HTTP 入口必须验签、校验有效期和角色,覆盖外传的身份字段,并执行门店、资源权限检查。不能只平移 JWT 解析。
astra
本周先止血:单实例启停、健康检查和回滚;备份配置与规则,核查签名和加密插件;增加真实业务探针与同步异常告警。下线 ShenYu 绝不能顺手停 ZooKeeper。
要不要网关一致:先不采购
ZooKeeper一致:保留,高可用单独做;据此更正了上午的说法
鉴权一致;补充:入口一律先去掉客户端自带的身份字段,再按登录 token 写回
工期一致:4~6 周只算试点;按双11 冻结排成约 10 周日历时间
网关选型补充更正:astra 区分了传统 API 网关和 MSE 网关,这两款都已停止新购
HTTP 入口做法补充:自动扫描现有接口注解生成同名 HTTP 入口,不用逐个手写
06
Target

目标架构

前端不改,入口变成负载均衡加两台 nginx,服务自己接 HTTP。

统一鉴权库规则照搬现在网关的做法;更严:先清掉客户端自带的身份字段,后台接口没有有效登录一律拒绝,返回码和现在一样
HTTP 入口启动时自动扫描现有接口,生成路径一模一样的 HTTP 入口。新接口发布即生效,告别 -107 / -102
nginx按路径分发;迁移期按比例分流;配置放 Git、走 Jenkins 发布
01前端不改地址仍是 /prod-api/…02入口阿里云负载均衡可以顺带挂防攻击03转发nginx × 2 台按路径分到 4 个服务;配置进 Git04服务服务自己接 HTTP + 统一鉴权新接口发布即生效,不用手工配05内部服务之间照旧用 DubboZooKeeper 保留,另做高可用少一个会挂的环节以后需要再在 nginx 前面加托管网关
迁移完成后的链路:红框是这次要新写的统一鉴权和 HTTP 入口
07
Plan

迁移步骤

五个阶段,双11 冻结期不动;负责人按角色写,具体人选待定。

0111-03阶段 0:止血只能起一个进程 · 告警 · 备份 · 手册0211-12阶段 1:鉴权库 + HTTP 入口先在测试2 全量回归,不碰生产0311-23阶段 2:试点 ground10% → 50% → 100%0412-07阶段 3:coach → user → paymentpayment 最后切,避开月初关账0501-11阶段 4:下线 ShenYu网关 2 周零流量后再停11-09 ~ 11-12 双11 冻结只修故障,不动网关
日期为建议开始日;payment 预计切到 01-08

1阶段 0 止血(运维值班 + 后端负责人)

2阶段 1 鉴权库 + HTTP 入口(后端负责人 + 测试)

先只发到测试2。每个服务挑 20~30 个高频接口,经旧网关和新入口各请求一遍,返回必须一致;覆盖「未登录」「登录过期」「正常」三种情况。前端各端在测试2 跑一遍主流程。

3阶段 2~3 逐个服务切流(后端负责人 + 运维值班)

10%观察 2 天50%观察 2 天100%观察 1 周停用旧路由任何一档出错:nginx 改回旧路由,1 分钟内恢复
每个服务都走这四档;旧路由在 100% 后保留 1 周才停用
1 ground68 条路由,前端调用最少,用户主要是店长和总部
2 coach66 条,重点测教练登录和教练身份
3 user207 条,重点测小程序登录、开门、人脸
4 payment587 条,最后切;测下单、退款、回调不重复;不做写请求双跑;财务确认对账

4阶段 4 下线(运维值班,William 确认)

旧网关连续 2 周零请求后停网关和网关后台,程序和配置备份保留 3 个月;补上第二台 nginx 和负载均衡。ZooKeeper 保留,2027 年一季度单独做高可用。

08
Risks

回滚与风险

每一步都能退回;最怕的是身份校验出漏洞和支付重复。

1怎么回滚

阶段 0新的启停方式不好用,就照手册手工启停,分钟级
阶段 1只在测试2,生产不受影响
阶段 2~3nginx 对应服务改回旧网关并重载,1 分钟内
阶段 4用保留的程序和配置重新启动旧网关并同步,约 30 分钟

2主要风险

01

新入口的身份校验不能有一点出入

身份算错就可能越权看到或改到别人的数据。统一库一处实现,对照测试覆盖未登录、过期、冒用三种情况。

02

payment 最后切,避开月初关账

下单、退款、回调出错会直接影响钱。只按比例分流,不做写请求双跑,回调地址不变。

03

下线时 ZooKeeper 必须保留

它停了,服务之间的调用会全部中断,影响比今天更大。

其他风险:返回格式或错误码不一致导致前端不跳登录页(靠对照测试 + 小比例切流发现);个别接口参数转换不同(按现有路由配置逐条核对);签名、加密插件实际在用(阶段 0 先确认)。

09
Decisions

验收与待决策

截至 2026-11-02 均未开始;下面是验收标准和需要 William 拍板的事。

1验收标准

2需要 William 拍板

方向同意 B 方案:不买专门网关,本周止血、双11 后切流
人选后端负责人(约 5 人周)和有生产机权限的运维值班
费用是否加一台 nginx 和阿里云负载均衡(少量费用)
插队身份安全审计如发现问题,是否立即插队修复
↑