这是“微服务治理与平台化演进”系列的第三篇。
第一篇解决的是“服务怎么跑、服务在哪里被发现”,第二篇解决的是“这些服务运行在什么样的平台上”,这一篇继续回答:外部流量如何从进入系统的第一跳开始,就进入正确的运行时边界。
摘要
这次 APISIX 改造表面上看,是把传统 Nginx upstream 入口模型替换成 APISIX Ingress;但如果只把它理解成一次网关组件替换,意义其实被低估了。真正发生变化的,不是“流量换了一个入口代理”,而是入口层第一次开始以规则化、条件化、平台化的方式参与微服务运行时治理。本文会从运维实践和架构演进两个角度,复盘传统入口模型为什么越来越吃力,APISIX 在这里到底承接了哪些入口治理能力,以及它如何与 ACK、Nacos 共同构成一条连续的微服务边界链路。
系列导航
- 微服务治理:从 Git 托管 YAML 到 Nacos
- 容器平台:ACK 微服务容器平台建设
- 网关与流量治理:APISIX 与蓝绿灰度发布
- 可观测平台:指标、日志、链路三层建设
- 交付平台:从 Jenkins 到 GitOps
- AIOps / AI RCA:从可观测到智能故障分析
0. 导语:网关不是入口代理,而是运行时边界的第一层
在很多系统里,网关最容易被理解成一个很传统的角色:做反向代理、做路由转发、把外部请求送到后端服务。这种理解在单体应用阶段基本够用,因为那时候入口层主要解决的是“请求怎么进系统”,而系统内部的运行边界相对简单,入口代理更多承担的是接入能力,而不是治理能力。
但当系统逐渐进入微服务和容器平台阶段之后,入口层承担的职责就开始发生变化。
这时候,一个请求进入系统,不再只是“转发到某台机器、某个端口”这么简单。它往往还会继续影响:
- 请求先进入哪一组运行面
- 某类来源的流量应该进入哪套环境
- 蓝绿和灰度边界能否从入口层开始成立
- 第三方回调、内部测试、正式用户流量能否被稳定区分
- 入口层边界能否和内部服务发现边界衔接起来
也就是说,网关在这里已经不再只是入口代理,而是运行时边界的第一层。
这也是为什么我们在容器平台建设之后,会继续把入口层从传统的 Nginx upstream 模型推进到 APISIX Ingress 模型。表面上看,这像是一次网关组件替换;但如果回头复盘,它真正解决的,其实不是“换一个更现代的反向代理”,而是让入口流量第一次开始以平台化方式被治理。
如果说前一篇 ACK 解决的是“微服务最终运行在什么样的平台上”,那么这一篇 APISIX 真正要解决的就是:
- 外部流量如何以可治理的方式进入这套平台
- 蓝绿和灰度边界如何从入口层开始成立
- 入口层、运行空间层、内部服务发现层如何形成职责清晰的衔接关系
所以这篇文章想复盘的重点,不是 APISIX 的功能清单,而是微服务进入容器平台之后,为什么入口层不能再停留在“转发请求”这个层面,而必须被升级成“入口治理”。
图 1:变化的不是“有没有网关”,而是入口层第一次开始具备环境边界意识。
1. 改造前:问题不在 Nginx,而在入口治理模型
在改造之前,我们的入口链路大致是这样的:
SLB -> Nginx(upstream) --http-> Tomcat(microsvc consumer) --dubbo-> microsvc provider
这个模型在系统早期并没有什么问题。SLB 承接公网入口,Nginx 负责反向代理和 upstream 转发,后面再进入具体微服务消费方。如果系统规模不大、环境不复杂、服务运行位置也比较固定,那么这种方式完全可以工作。
但问题在于,当微服务逐渐容器化、运行位置开始动态变化、蓝绿和灰度治理开始真正进入发布链路时,这种入口模型就会越来越吃力。
1.1 旧入口模型更适合“固定后端”,不适合“动态运行面”
传统 Nginx upstream 模型最擅长解决的,本质上还是“一个请求应该转发给哪组后端节点”。
在机器部署时代,这种方式非常直接。后端机器相对稳定,节点池变化频率也不高,入口层更多承担的是静态流量接入能力。
但到了微服务和容器平台阶段,后端承载对象已经不再是“几台相对固定的机器”,而开始变成“平台中动态变化的一组工作负载”。这时候,入口层面对的已经不是一个简单的 upstream 配置问题,而是:
- 后端节点如何被平台发现
- 同一个服务在不同运行环境下如何形成不同上游池
- 蓝绿环境如何在入口层被清晰区分
- 流量切换如何和发布动作协同
这类问题如果仍然用传统 upstream 思路去承接,就会越来越别扭。
1.2 路由诉求开始变复杂,入口不再只是“按路径转发”
旧入口模型默认假设大多数请求可以通过相对简单的规则被转发,比如域名、路径、少量基础条件。
但在真实的微服务运行场景里,入口流量的诉求并没有这么单一。我们真正需要区分的,不只是“访问哪个 URI”,还包括:
- 某些内部测试人员的流量应该进入哪套环境
- 某些第三方平台的回调请求应该进入哪套环境
- 某些显式标记过的请求是否应该被定向到蓝或绿运行面
- 某些验证流量是否应该先进入非默认运行空间
这意味着入口治理面对的,其实已经不是简单路径转发,而是“不同来源、不同目的、不同验证场景下的流量分面”。
1.3 入口层与发布治理脱节,蓝绿更多靠流程兜底
当系统还停留在固定部署模式时,蓝绿切换更多依赖的是部署流程、人工操作和环境前后脚切换。入口层虽然也参与切流,但它更多像是最后一步的流量拨杆,而不是整个发布治理里的稳定支点。
这样做的问题在于,入口规则和运行环境之间缺少一种更自然的结构化关系。流量切换虽然可以发生,但它往往不是“平台在接管边界”,而更像是“流程在推动边界成立”。
1.4 入口层缺少明确的环境边界意识
旧入口链路还有一个更深层的问题:它虽然负责把请求引进系统,但它对“这个请求应该进入哪一组运行空间”并没有足够清晰的环境边界表达。
换句话说,入口层虽然是系统第一跳,但它并没有真正被设计成运行时边界的一部分。它更像一个代理器,而不是治理器。
小结
所以回头看,旧入口链路真正的问题,并不是 Nginx 本身不够强,而是它承接的是“反向代理问题”,而我们面对的已经是“微服务入口治理问题”。
2. 为什么选择 APISIX:我们需要的不是转发组件,而是入口治理能力
当入口层的问题开始从“转发请求”升级为“治理流量”时,我们真正需要的,就不再只是一个传统意义上的反向代理,而是一层能够承接规则化、条件化、平台化入口治理的能力。
这也是为什么我们最终选择了 APISIX。
2.1 我们需要的不是简单路径转发,而是规则驱动的流量识别
在真实生产场景里,入口层面对的流量并不是同质的。
不同请求之所以需要被区分,并不总是因为它们访问不同路径,而是因为它们代表不同来源、不同阶段、不同验证目的。比如在我们的场景里,真正需要被入口层识别出来的流量,会来自:
- 内部测试人员
- 第三方平台回调
- 带有显式标记的验证请求
- 正常默认流量
这意味着入口层需要处理的,不只是 URL 匹配,而是条件化流量识别。系统需要的不是“一个能转发请求的组件”,而是“一个能把不同类型流量先识别出来、再送入不同运行面的组件”。
2.2 APISIX 更适合承接蓝绿 / 灰度这种“入口分面”
在我们的实践里,入口层的流量分流主要依赖几类条件:
headerclient ipuri tag
这几类条件之所以重要,不是因为功能多,而是因为它们各自对应了非常真实的场景。
client ip 很适合内部测试人员场景。测试人员会通过 WireGuard VPN 进入内网,而 VPN IP 是相对可控的,这让入口层可以基于来源地址做非常稳定的定向流量路由。
header 更适合显式传递环境意图。对于可控客户端、内部验证链路或者需要明确打标的访问,请求头往往是最自然的承载方式。
uri tag 则很适合第三方平台回调场景。因为很多第三方系统不一定方便配复杂请求头,但通过不同回调 URL 约定不同环境入口,相对更容易落地,也更适合合作方使用。
2.3 APISIX 更适合运行在容器平台里,而不是悬浮在平台之外
APISIX 在我们的体系里不是一个平台之外的外挂网关,而是直接作为 ACK 平台中的入口运行面来承接外部流量。
一旦入口层本身也成为平台工作负载的一部分,它就不再只是一个放在系统边上的代理组件,而开始和业务运行面、运维支撑面一起被纳入平台治理范围。这样一来,入口层的生命周期、扩缩容、资源管理、版本演进和后续观测,才有机会和整个平台的运行方式保持一致。
2.4 APISIX 适合把“规则变更”和“环境切换”拆开治理
这是我们实践里一个非常关键的点。
在入口治理里,真正需要频繁变化的,并不应该是 route 本身,而应该是 route 背后所指向的运行环境。
route 负责表达的是“哪类流量该被识别出来”,比如:
- 哪个
header - 哪段
client ip - 哪个
uri tag
这些规则一旦定义完成,通常不会随着每次蓝绿演进频繁变化。真正会来回变化的,是这些已经被识别出来的流量,当前应该进入蓝环境还是绿环境。
如果让 route 直接关联 upstream,那么每次蓝绿切换都可能变成一轮批量 route 修改。由于一个 upstream 往往会被多个 route 复用,这种方式不仅改动面大,也会让入口规则本身和环境切换动作耦合在一起。
而 APISIX 的 service 概念,恰好给了我们一个更合理的拆分层次:
route负责流量匹配service负责承接一组入口服务语义upstream负责实际指向蓝或绿的上游节点池
这样一来,蓝绿切换时真正需要变化的,就不再是 route 规则本身,而只是 service 与 upstream 的关联关系。
小结
所以回头看,我们选择 APISIX,并不是为了换一个更现代的反向代理,而是为了让入口层第一次具备下面这些能力:
- 规则化识别流量
- 条件化切分流量
- 平台化承接入口层
- 把流量匹配和环境指向拆开治理
我们选择 APISIX,不是为了换一个更现代的代理,而是为了让入口层第一次具备规则化、条件化、平台化的治理能力。
3. 在 ACK 上如何承接入口层:APISIX 的平台位置与职责边界
当入口治理被抬升到平台能力层之后,接下来的问题就不再只是“APISIX 怎么配置”,而是:它在整套 ACK 平台里,到底处于什么位置,又应该承担什么边界。
在我们的实践里,APISIX 并不是作为一个平台之外的外围组件独立存在,而是明确地作为入口运行面部署在 ACK 中。这意味着它和业务运行面、运维支撑面一样,都是平台工作负载的一部分。
3.1 APISIX 作为独立入口运行面存在
在 ACK 平台中,我们将 APISIX 放在独立的 namespace 中:
ingress-apisix
这样的划分并不只是为了资源好看一点,更重要的是让入口层拥有独立治理边界。
因为入口层和业务微服务本身,虽然都运行在同一个容器平台上,但它们承担的职责完全不同:
- 生命周期不同
- 稳定性要求不同
- 扩缩容模式不同
- 发布风险不同
- 面向的流量类型也不同
如果把入口层和业务 workload 混在一起,后续无论是治理、排障还是演进,都会很快变得混乱。
3.2 公网入口如何进入 ACK
在公网接入上,我们的基本链路是:
- APISIX 创建
LoadBalancer类型的 Service - 该 Service 关联阿里云
SLB SLB具备公网 IP,承接外部流量- 流量再进入 ACK 内部的 APISIX Ingress 层
这个结构非常符合平台化思路:
SLB负责公网流量接入- APISIX 负责入口规则治理
- ACK 负责工作负载承载
- 后续服务发现和内部调用再进入微服务体系内部
3.3 APISIX 不是中间件附属物,而是入口层工作负载
如果从传统视角看,网关很容易被当成一种“中间件组件”;但在我们的平台里,APISIX 更准确的身份其实是:入口层工作负载。
这意味着它在平台中的地位,更接近:
- 业务运行面
- 运维支撑面
- 中间件运行面
这些并列的运行空间之一,而不是一个“随便装上去就行”的附属组件。
3.4 入口层必须独立治理,但职责不能无限膨胀
不过,把 APISIX 放进平台里,并不意味着它应该无限承担所有治理能力。
在我们的设计里,APISIX 负责的是:
- 外部请求如何进入系统
- 流量如何在入口层被识别和分流
- 请求如何被送入正确的运行空间
但它并不负责整个微服务体系的全部服务发现逻辑。它不去替代内部的服务注册发现体系,也不试图把所有调用链边界都吞到入口层里。
这也是为什么后面我们会明确把 APISIX 和 Nacos 的职责分开:前者解决入口层服务发现和流量治理,后者解决 Dubbo 体系内部的注册与发现。
图 2:APISIX 不是平台外的一层外挂代理,而是 ACK 中独立的入口运行面。
4. 蓝绿与灰度流量治理:header、client IP、uri tag 为什么都需要
当入口层开始承担治理职责之后,一个最现实的问题很快就会出现:到底应该用什么规则,把不同类型的流量稳定地区分开?
很多时候,大家一提到灰度或蓝绿,第一反应就是“按请求头切流”或者“按用户分组切流”。这些做法当然没问题,但如果回到真实生产场景,就会发现入口层面对的流量来源其实并不单一。不同来源的请求,在可控程度、接入方式和协作对象上都不一样,因此也不可能只靠一种规则完成所有分流诉求。
在我们的实践里,入口层主要会基于三类条件来做流量治理:
headerclient ipuri tag
4.1 client IP:最适合内部测试流量的定向治理
在内部测试和联调场景中,我们的一类重要需求是:让特定测试人员、特定验证人员能够稳定访问到某一组运行环境。
这个时候,client ip 就非常好用。
因为内部测试人员会通过 WireGuard VPN 接入,而 VPN IP 是相对可控的。这样一来,入口层就可以根据来源 IP,把某类请求稳定地导向蓝环境或绿环境,而不需要测试人员在请求中额外携带复杂标记。
4.2 header:最适合显式表达环境意图
如果说 client ip 更适合“入口根据来源替你判断”,那么 header 更适合“调用方显式表达自己的访问意图”。
这种方式很适合下面几类场景:
- 内部可控客户端
- 需要明确指定进入某个运行面的验证请求
- 某些自动化测试链路
- 某些希望通过显式标记完成流量切换的访问
4.3 uri tag:最适合第三方平台回调这类外部协作场景
除了内部测试和显式标记请求,入口层还必须面对一类更现实的问题:第三方平台回调。
这类场景往往并不适合要求对方配复杂 header,也不适合基于来源 IP 做稳定治理。这时,通过 URL 本身做环境区分,往往会更加直接,也更容易落地。
这就是 uri tag 在我们这里的重要性。
4.4 为什么这三类规则不能只保留一种
真实生产场景里的灰度流量,从来都不是单一维度的。不同来源、不同角色、不同访问路径的请求,本来就需要不同的分流手段。
这也是为什么我们并不追求“所有流量都只靠一个条件切分”,而是更倾向于让入口规则和访问源特征保持一致:
- 内部测试流量,适合
client ip - 显式验证流量,适合
header - 第三方回调流量,适合
uri tag
小结
所以回头看,蓝绿和灰度真正难的,从来不是“能不能切流”,而是不同来源、不同路径、不同协作对象的请求,到底应该如何被稳定地区分开。
蓝绿和灰度真正难的,从来不是“能不能切流”,而是不同来源、不同路径、不同协作对象的请求,到底应该如何被稳定地区分开。
5. 为什么蓝绿切换不应该直接改 route
如果说上一节解决的是“不同类型的流量如何被识别出来”,那么这一节真正要回答的问题就是:当蓝绿环境需要交替式切换时,入口层到底应该改什么?
这是我们在实际设计里非常在意的一个点。因为如果这一层处理不好,入口治理很容易从“规则化平台能力”退化成“每次发版都改一轮网关配置”的人工工程。
5.1 蓝绿切换真正变化的,不是规则,而是规则背后的环境指向
在我们的入口治理模型里,route 主要负责表达的是:
- 哪类流量应该被识别出来
- 识别依据是什么
- 这条流量匹配规则适用于什么场景
这些规则一旦定义完成,通常不会随着每次蓝绿发布频繁变化。真正会反复变化的,其实不是“流量如何被识别”,而是“这些已经被识别出来的流量,当前应该进入蓝环境还是绿环境”。
换句话说,蓝绿切换真正变化的,不应该是规则本身,而应该是规则背后所指向的运行环境。
5.2 如果让 route 直接关联 upstream,变更面会迅速失控
按照 APISIX 的基础模型,route 可以直接反向代理到 upstream。单看结构,这当然很直观:
- route 负责匹配请求
- upstream 负责指向上游节点池
但在蓝绿场景下,如果让这两层直接绑定,就会出现一个明显的问题:
- 同一个 upstream 可能被多个 route 复用
- 一次蓝绿切换可能意味着要批量修改很多 route
- route 规则和环境切换动作会被强耦合在一起
这样做的代价非常高。明明只是一次环境切换,最后却变成对多条 route 的批量变更。
5.3 K8s 侧的蓝绿节点池其实并不难表达,真正复杂的是入口切流层
在我们的场景里,APISIX 的上游服务发现并不是走 Nacos,而是基于 Kubernetes Service/Endpoints。
这意味着,对于同一个微服务的蓝绿环境,K8s 侧其实很容易形成两套独立的上游节点池。只要通过不同的 Service labels 去匹配不同环境下的 Pod,就能很自然地形成:
- 蓝环境 Service -> 蓝环境 Endpoints
- 绿环境 Service -> 绿环境 Endpoints
所以从 K8s 视角看,蓝绿环境的节点池表达并不难。真正复杂的,其实不是节点池怎么建出来,而是 APISIX 这一层到底如何以更小的变更面完成交替式切流。
5.4 route、service、upstream 三层拆开之后,切流才真正可治理
也正因为这样,我们最终更倾向于把 APISIX 的治理层次拆成三层来看:
route:负责流量匹配service:负责承接一组入口服务语义upstream:负责实际指向蓝或绿的上游节点池
这样一来,蓝绿切换时真正需要变化的,就不再是 route 规则本身,而只是 service 与 upstream 的关联关系。
5.5 为什么 service 概念在这里特别重要
APISIX 的 service 概念,在很多简单场景里看起来似乎不是必需的;但在我们的蓝绿治理里,它恰恰是最关键的解耦层。
因为它把“规则层”和“环境指向层”隔开了。
这样带来的收益非常直接:
- route 可以稳定复用
- upstream 可以按蓝绿分别建模
- 切换动作可以收敛到 service 指向关系
- 变更面明显缩小
- 自动化触发更容易落地
- 回滚路径也更清晰
5.6 为什么这种方式特别适合和 Jenkins 配合
当蓝绿切换被收敛到“service 当前指向哪个 upstream”之后,它就天然很适合自动化执行。
因为对于 Jenkins 来说,这种变更具备几个很重要的特点:
- 变更点集中
- 调用 APISIX Admin API 即可完成
- 审计路径明确
- 回切动作对称
- 不需要批量修改 route 规则
图 3:真正需要变化的,不是 route 规则本身,而是 route 背后 service 所指向的 upstream。
小结
所以回头看,蓝绿切换真正应该变化的,不是路由规则,而是路由背后所指向的运行环境。
蓝绿切换真正应该变化的,不是路由规则,而是路由背后所指向的运行环境。
6. APISIX 与 Nacos 为什么不直接耦合:入口层和服务发现层的职责分层
讲到这里,一个很自然的问题就会出现:既然 APISIX 也在做上游服务发现,而 Nacos 也在做服务注册与发现,那这两者是不是应该直接打通?
从表面上看,这个问题很合理。
但在我们的实践里,恰恰是“没有直接耦合”这件事,才能说明入口层和内部运行时治理的边界是清晰的。
6.1 APISIX 解决的是入口层服务发现
在我们的体系里,APISIX 侧的上游发现是基于 Kubernetes Service/Endpoints 的。
也就是说,对 APISIX 来说,它最关心的是:
- 请求应该进入哪一个 HTTP 入口服务
- 当前可用的后端实例有哪些
- 某组入口服务的上游节点池是什么
从职责上说,这解决的是入口层服务发现问题。它面向的是:
- 外部请求如何进入系统
- 入口层如何找到正确的后端 HTTP 服务
- 入口规则如何把流量送进正确运行面
6.2 Nacos 解决的是微服务内部服务发现
而在微服务内部,尤其是 Dubbo 调用链路里,真正的服务注册与发现仍然走的是 Nacos。
这一层更关心的是:
- provider 如何注册
- consumer 最终发现哪组 provider
- namespace 和 group 如何定义环境边界
- 蓝绿运行面在服务发现层如何继续保持一致
也就是说,Nacos 在这里承接的是微服务内部运行时治理问题,而不是入口层流量治理问题。
6.3 两层为什么不能混为一谈
从职责上看,这两层解决的问题根本不是同一件事:
- APISIX 解决的是“请求怎么进系统”
- Nacos 解决的是“服务在系统里怎么被发现”
如果让网关直接吞掉内部服务发现职责,入口层职责就会膨胀。它本来应该关注流量接入和流量分流,但如果再强行承接内部注册发现,就会让它同时变成入口、注册中心、运行面协调器,这会让边界迅速模糊。
6.4 APISIX 和 Nacos 不是重复建设,而是前后衔接
所以在我们的体系里,APISIX 和 Nacos 并不是两套重复建设的服务发现能力,而是两层前后衔接的治理结构。
入口层:
- APISIX
- 基于 K8s Service / Endpoints
- 面向 HTTP 接入与流量治理
内部服务层:
- Nacos
- 面向 Dubbo 注册与发现
- 面向微服务运行时边界
这两层叠加起来之后,外部流量和内部服务调用才真正形成了连续边界:
- 请求先被 APISIX 按规则送入正确运行面
- 运行面中的 consumer 再通过 Nacos 发现正确的 provider
- 蓝绿边界从入口层继续延伸到内部服务发现层
图 4:APISIX 解决的是请求如何进入系统,Nacos 解决的是服务在系统内部如何被发现。
小结
所以回头看,APISIX 和 Nacos 没有直接耦合,并不是设计缺口,反而恰恰说明系统边界是清晰的。
APISIX 解决的是“请求怎么进系统”,Nacos 解决的是“服务在系统里怎么被发现”;两者衔接,但不互相替代。
7. 这次入口治理升级到底带来了什么
如果回头看这次从传统 Nginx upstream 模型走向 APISIX Ingress 的过程,最值得复盘的,其实不是“入口层换了一个组件”,而是入口流量终于开始拥有了一套更可治理的组织方式。
7.1 发布收益:蓝绿切流第一次有了真正的平台抓手
最直接的收益,是蓝绿和灰度发布终于不再主要依赖人工流程和临时规则兜底。
旧模式下,入口层虽然也能参与切流,但更多像是发布动作的最后一步配合;而在 APISIX 模型下,入口规则本身开始成为发布治理中的一个稳定抓手。尤其是当 route、service、upstream 三层被明确拆开之后,蓝绿切换就不再是“批量改路由”,而变成了更集中、更可控的环境指向变更。
7.2 协作收益:不同角色终于可以稳定进入不同运行面
真实系统里的流量并不只有“线上用户访问”这一种。还有测试人员、联调人员、第三方平台、验证请求、灰度请求,这些对象都可能需要访问同一个系统,但它们并不一定应该进入同一组运行面。
APISIX 规则化入口治理的价值就在于,它让这些不同角色的请求第一次开始可以被稳定地区分开:
- 内部测试人员通过 WireGuard VPN,可基于
client ip定向进入特定环境 - 显式验证流量,可通过
header明确进入蓝或绿运行面 - 第三方平台回调,可通过
uri tag清晰区分不同环境入口
7.3 架构收益:入口层、运行空间层、内部服务发现层开始形成连续边界
从架构层面看,这次升级最重要的收益,其实是系统边界开始连续起来了。
过去入口层和内部运行时之间的关系,更多是“请求进来之后再说”;而现在,系统第一次开始拥有了三层前后衔接的治理结构:
- 入口层:APISIX 负责识别流量、切分流量、送入正确运行面
- 运行空间层:ACK 中的
green-microsvc / blue-microsvc承接不同蓝绿工作负载 - 内部发现层:Nacos 负责 Dubbo consumer/provider 的注册与发现边界
7.4 平台收益:入口层第一次成为平台治理对象
最后一个更长期的收益,是入口层本身终于进入了平台治理范围。
这意味着它后面不仅可以承接蓝绿与灰度,还可以继续向下演进:
- 更标准化的发布策略
- 更系统化的访问控制
- 更清晰的入口可观测
- 更细粒度的限流、熔断与策略治理
- 和 GitOps、自动化发布链路更自然地集成
小结
所以如果一定要总结这次入口治理升级带来的实际收益,我更愿意这样表述:
APISIX 带来的最大变化,不是“流量可以切了”,而是入口层第一次开始以规则化、可复用、可自动化的方式参与微服务运行时治理。
8. 结语:APISIX 不是终点,而是发布治理与运行时边界的入口起点
回头看这次入口治理升级,我们越来越明确地意识到:真正被替换掉的,并不是某一种反向代理配置方式,而是一种已经不再适合微服务平台阶段的入口模型。
在旧模型里,入口层更多解决的是“请求怎么被转发”;而在 APISIX 模型里,入口层开始解决的是:
- 流量应该如何被识别
- 请求应该进入哪组运行面
- 蓝绿和灰度边界如何在第一跳成立
- 入口层边界如何和后续工作负载与服务发现边界衔接
也正因为这样,APISIX 在这里的意义并不只是“替换 Nginx”,而是让入口层第一次真正成为微服务平台的一部分。
如果说第一篇 Nacos 解决的是:
- 服务怎么跑
- 服务在哪里被发现
第二篇 ACK 解决的是:
- 这些服务运行在一个什么样的平台上
那么这一篇 APISIX 真正解决的就是:
- 外部流量如何从进入系统的第一跳开始,就进入正确的运行时边界
从这个角度看,APISIX 在这里同样不是终点。它更像是后续很多能力得以继续成立的入口起点:
- 蓝绿与灰度发布的标准化切流
- 更细粒度的入口流量治理
- 入口层可观测与策略治理
- 与交付平台和 GitOps 的进一步集成
- 更完整的微服务运行时闭环
所以如果要用一句话来总结这次改造,我更愿意这样说:
真正成熟的微服务入口治理,不是把请求转发出去,而是让请求从进入系统的第一跳开始,就进入正确的运行时边界。
小结
这次 APISIX 改造最值得复盘的,不是“用了一个新的网关”,而是入口层的治理模型发生了变化:
- 入口层从代理器,变成了运行时边界的第一层
- route、service、upstream 三层拆分,让蓝绿切流真正可治理
- 入口流量、运行空间、内部服务发现开始形成连续边界
- APISIX、ACK、Nacos 三者开始构成前后衔接的治理结构
延伸阅读
- 下一篇会继续写指标、日志、链路三层可观测平台建设
- 蓝绿切流为什么必须和内部运行时边界一起成立
- APISIX、ACK、Nacos、可观测为什么其实是一条连续演进路径
评论区