想象你管理着一座不断扩张的“微服务小区”。起初小区只有三栋楼——用户楼、订单楼、支付楼,住户(客户端)直接敲门办事。可楼越盖越多,几十栋楼分散各处,住户记不住地址,每栋楼还得各自查身份证、控人流,高峰期乱成一锅粥。这时,小区门口多了一处“大门+物业前台”,也就是微服务里的网关:所有住户只认大门,物业负责带路(路由)、验明正身(鉴权)、控制人流(限流)、登记访客(日志)。 今天摆在你面前的是三家来竞聘的物业团队:Kong 像老牌物业公司,制度成熟但改规则要走繁琐流程;APISIX 像新锐数字化团队,手脚麻利、随时热更新门禁规则;Envoy 则像外包来的特种兵,个人作战能力极强,却不带后勤,要你自己搭指挥系统。选物业不能光听口号,要从速度、工具、流程、维护、应急五个维度实地考察,最后按小区现状加权打分,才能选到那个“最合拍”的团队。
理解三家网关的核心差异,能帮你在真实微服务架构中做出既不过度设计、也不埋下性能隐患的选型决策,这是云原生与分布式系统工程师的基本功之一。
目录
可视化演示
动态展示网关请求处理链路、Kong/APISIX/Envoy三方案对比、电商多协议路由场景与性能基准指标。
本节配有交互动效(进入视口后自动加载,约 3KB)。
网关全景:小区为什么需要物业
假设你带着家人搬进一座新建的“微服务小区”。刚开始只有两三名住户,大家抄着楼号直接敲门就行。可当服务从个位数膨胀到几十个——用户服务、订单服务、支付服务各占一栋楼,住户们开始叫苦连天:记不住地址、排错队、被各楼保安反复查证件。物业公司应运而生:所有住户只从大门进出,物业替你带路、查证、限流、登记。这套“大门+前台”的制度,在微服务世界里就叫网关(API Gateway)。
网关是微服务架构的“统一交通入口”。所有客户端请求先到这个入口,再由网关做路由转发(把请求带给正确服务)、认证鉴权(确认你是不是小区住户)、限流熔断(防止人群把楼挤垮)、日志审计(登记访客)。网关通常分为控制面与数据面两种角色:数据面是一线保安,真正处理每个请求;控制面是物业总台,制定规则并推送给保安。
本期考察的三位候选人各有出身。Kong 是最早把开源 API 管理做成产品化的老牌项目,基于 Nginx/OpenResty 构建,插件体系以 Lua 编写;APISIX 同样基于 Nginx/OpenResty,但出场更晚、理念更云原生,配置存储在 etcd,支持插件热更新;Envoy 则是 C++ 编写的高性能七层代理,本尊并不是“完整网关”,而是数据面特种兵,通常需要搭配 Istio 等服务网格控制面使用。
一个网关入口让住户无需再记几十个地址,相当于把请求集中收口再统一分派:
三家物业的做事风格差异很大:Kong 像正规物业公司,制度完整;APISIX 像新锐团队,工具常换常新;Envoy 像外包特种兵,能力顶尖却不带后勤。究竟哪家适合你的小区,我们分维度逐一考察。
- 汇总请求量 N_total小区大门一天接待的访客总人次,是所有楼接待量之和。
- 求和符号 Σ把后面每一项挨个加起来,比如 N₁+N₂+…+Nₖ。
- 第 i 个服务请求 N_i下标 i 表示第几栋楼(第几个服务),N_i 表示它的请求量。
- 累加范围 i=1 到 k从第一栋楼加到第 k 栋楼,k 是服务总数。
性能基准:谁在洪峰期放行最快
小区早晨八点是高峰,住户刷脸进门的速度决定整体体验。有的物业门禁机安装的是顶级硬件(Envoy 的 C++ 引擎),再多的人涌入也从容不乱;有的门禁机用着经典感应系统(Kong/APISIX 背后的 Nginx),日常够用,但极端洪峰下会先到瓶颈。性能基准,就是在同一杆秤上称量三家的“单位时间放行能力”。
网关性能通常用两个指标衡量:吞吐量(QPS) 是每秒处理的请求数;延迟(Latency) 是单请求从进入到返回的耗时。业界常用 p99 延迟 代表极端体验——把所有请求耗时排序,第 99% 位置的耗时就是 p99。
在标准压测中,Envoy 凭借 C++ 事件驱动模型常能跑出最高的吞吐上限;Kong 与 APISIX 同源于 OpenResty,性能同源,但 APISIX 在配置读取、热加载上做了不少优化,小包请求下往往略优于 Kong。不过性能不只是峰值数字,还要看资源占用:Envoy 单实例内存占用通常略低;Kong 与 APISIX 在启用丰富插件后都需为插件进程预留额外内存。
p99 的数学表达式,是排序后取位置:
性能维度上,Envoy 像洪峰里也面不改色的特种兵,Kong 与 APISIX 类似普通门禁机但日常完全够用。值得注意的是,性能差距在绝大多数业务规模下不构成瓶颈,选型更要看后面几个维度。
- 延迟序列 R把 n 个请求的耗时收集起来,从小到大排成一队,R 表示这个有序序列。
- 百分比位置 0.99×n99% 分位对应的位置,比如 1000 个请求就找第 990 个。
- 向上取整 ⌈⌉如果位置不是整数就向上取一个,确保至少覆盖 99% 的数据。
- 下标取值 Rₖ从序列里取出第 k 个位置的耗时,k 就是上面算出的位置值。
插件生态:谁的工具箱最齐全
物业团队的工具箱决定它能承接多少服务。有的物业配备齐全的储物柜——门禁卡、快递架、宠物寄存箱一应俱全(Kong);有的物业工具箱更科学,新增储物柜时不用关大门、即装即用(APISIX);有的特种兵团队只发一把多功能军刀,想装宠物寄存柜得自己找供应商(Envoy Filter 链)。
网关插件(Plugin) 是扩展网关能力的“积木”,常见的有:密钥认证、IP 白名单、限流、熔断、CORS 跨域、日志采集、灰度分流等。插件生态越丰富,你需要自研的代码就越少。
Kong 是最早建立插件市场的项目,官方与社区插件数量庞大,企业版还有额外增强,但配置变更往往需要 reload 才生效;APISIX 同样基于 OpenResty,但推出了“插件热加载”——增删改插件无需重启网关,对流量零中断;Envoy 则采用 C++ 过滤器链(Filter Chain) 机制,功能上可以无限自定义,但每个过滤器都要编写并编译进二进制,开发门槛高出一个量级。
用“需求覆盖率”量化计算:
插件生态这一项,Kong 和 APISIX 明显甩开 Envoy 一截。如果你需要“买回来就能用”的工具箱,Kong 和 APISIX 更顺手;如果你的团队 C++ 能力强、愿意为极致灵活性投入,Envoy 的过滤器链也可以定制一切。
- 需求插件数 P_needed你的业务场景需要哪些功能点,先列一份清单,数量记作 P_needed。
- 可用插件数 P_available该网关开箱即用、社区成熟的插件覆盖了清单中的多少项。
- 覆盖率 C两者相除得到一个 0~1 的小数,越接近 1 意味着“拿来即用”程度越高。
配置模式:如何下达新规矩
物业改管理制度的方式,决定了业主体验。老牌物业公司改一条规则要写申请单、局长签字、发公文、贴公告栏,第二天才生效(Kong 改配置要 reload);新锐物业用数字化系统,管理员在后台点个按钮,门禁立刻按新规则执行(APISIX 热更新+etcd 下发);特种兵团队则不发公告,只给保安下无线电指令,指令格式还得你自己定(Envoy 通过 xDS 协议从控制面拉取)。
网关配置模式即“管理员如何把规则下发给数据面”。常见模式有:管理 REST API(调接口改配置)、声明式配置(YAML 描述期望状态,控制面监听并执行)、DB-less 模式(配置文件加载,无数据库依赖)。配置生效方式分为需 reload(重启 worker 进程)与热加载(新 worker 增量生效)。
Kong 传统上依赖 PostgreSQL 保存配置,管理 API 修改后需发送 reload 信号让 Nginx worker 重载;DB-less 模式下则要重新生成配置文件部署。APISIX 采用 etcd 存储+配置监听机制,变更实时推送到各节点,无需 reload。Envoy 定义了 xDS 接口(CDS/EDS/RDS 等),由控制面(如 Istio)通过 gRPC 流推送配置,数据面增量更新。Kong 也有声明式配置和 decK 工具,但历史包袱相对更重。
一次配置发布的总耗时可拆成三段:
配置模式这一项,APISIX 最贴近“点一下立即生效”的理想物业体验,Kong 是传统但成熟的流程,Envoy 则把话语权交给你、一切自定义。若业务要求频繁调整网关规则,热更新能力需要重点考察。
- 下发时间 T_push配置从控制面传送到数据面的耗时,网络带宽与消息队列都会影响它。
- 重载时间 T_reload数据面需要重启 worker 加载配置的耗时;支持热加载则该项接近 0。
- 生效时间 T_effect新规则从加载完成到完全接管流量的时间。
- 总变更时间 T_total三段相加,决定一次配置发布的“停机窗口”有多久。
运维复杂度:日常照料谁最省心
物业好招,难养。选物业除了看门禁质量,还要看日常开销:物业费多少(资源占用)、是否需要专门配一个“物业管理员”盯着(控制面组件)、换新制度时业主是否要停工一上午(升级与灰度)。
运维复杂度包含部署拓扑、组件依赖、升级策略、监控可观测性。网关部署简单可以省出大量人工;升级能否灰度、回滚是否容易,直接影响稳定性。
Kong 部署最“重”:传统模式要同时运维 PostgreSQL,Kong 节点本身无状态,加上控制面组件,零件较多但文档成熟。APISIX 依赖 etcd 作为配置中心,节点同样无状态,容器化部署非常顺滑,APISIX Ingress Controller 可直接对接 Kubernetes。Envoy 本身只是进程,要构成生产级网关方案必须自己维护或引入控制面(如 Istio、Gloo),学习曲线陡峭。
用可用性指标衡量“省心程度”:
运维复杂度上,Kong 是“配置齐全但零件多”,APISIX 是“轻装上阵、云原生友好”,Envoy 是“能打但后勤自理”。团队越小,越倾向选择 APISIX;团队有专职基础架构专家且追求极致可定制时,Envoy 才划算。
- 平均无故障时间 MTBF两次故障之间的平均正常运行时长,比如运行 720 小时才坏一次。
- 平均修复时间 MTTR故障发生后平均恢复时长,比如半小时搞定一次宕机。
- 可用性 A正常时间占总时间比例,99.99% 的可用性意味着年停机不到 1 小时。
容错恢复:突发状况谁靠得住
真正的物业好不好,要看断电、暴雨、电梯故障时怎么应对。有的物业有备用发电机(内置熔断器),有的靠临时工搬沙袋(外部插件),有的保安本身就是急救专家(原生机制),反应速度和恢复质量差别很大。
网关的容错能力指面对下游服务故障、突发流量、网络抖动时,能否保护整个系统。关键能力包括:熔断(Circuit Breaking)——下游快挂了就自动开门分流或拒绝;限流(Rate Limiting)——控制单位时间进场人数;重试(Retry)、超时控制、健康检查。
Envoy 在容错上是“科班出身”,内置非常精细的熔断器、重试预算、异常点检测(Outlier Detection),不依赖插件就具备很强的自愈能力;Kong 和 APISIX 通过插件实现限流和熔断——Kong 有 rate-limiting、proxy-cache 等插件,APISIX 提供 limit-count、limit-req,并依托 etcd 的分布式一致性降低配置丢失概率。Kong 依赖的 PostgreSQL 则需要额外做高可用。
故障总时间可分解为:
容错维度上,Envoy 是原始天赋最强的特种兵,Kong/APISIX 则像靠纪律与流程取胜的物业队。如果你下游系统本身比较脆弱,网关的容错能力必须放在选型优先级的前列。
- 故障发现时间 T_detect健康检查发现下游不可用的耗时,被动等待超时会让它变长。
- 切换时间 T_failover流量从故障节点切换到健康节点的耗时,取决于负载均衡策略。
- 恢复时间 T_recover故障节点恢复后重新纳入流量池的耗时。
- 总宕机时间 T_down三段相加,就是业务真实感受到的停机时长,越小越好。
选型实践:不同小区该怎么挑
没有最好的物业,只有最适合小区现状的物业。老小区求稳,新小区求方便,科技园区追求定制化。选型本质是权衡:把性能、生态、配置、运维、容错五个维度按你的业务权重加权,算出一个综合分。
选型建议一般按业务规模与技术栈划分:中小团队/创业期优先考虑上手速度与运维成本;中大型企业看重治理能力与插件生态;云原生重度用户关注 Kubernetes 集成度;已有服务网格的团队则应避免重复建设网关。
不同场景的侧重点也一目了然:
- 中小团队、Kubernetes 原生:优先 APISIX,热更新+etcd+Ingress Controller 一套带走,运维成本最低。
- 大型企业已有统一 API 治理体系:Kong 更稳妥,插件市场和成熟文档让团队容易上手。
- 已深度使用 Istio/服务网格:Envoy 已经是数据面,直接在其上扩展即可,不必再引入独立网关。
- 超高并发、极低延迟业务(如金融高频):Envoy 性能优势明显,但需配专业控制面。
把多维评分用加权求和统一:
把加权公式套进你家小区的需求,答案自然浮现。选型不是选“最强”,而是选“最合拍”——这也是本篇文章最想传递的一句话。
- 维度得分 s_i性能、生态、配置、运维、容错五个维度分别打 0~1 之间的分。
- 权重 w_i每维度的相对重要程度,由团队当前最痛的痛点决定。
- 加权求和 S逐项相乘再相加,得到综合分,排名最高的就是当前场景的最优解。
- 权重归一化约束所有 w_i 相加等于 1,保证 S 落在合理区间、不同权重方案可对比。
AI 应用场景
电商大促流量限流与熔断
阶段:模型服务部署后的流量治理与在线推理保护
解决的问题:大促流量峰值是平时的几十倍,硬编码限流无法动态调整,人工扩容存在分钟级滞后,容易将下游 AI 推荐/风控服务打垮。
具体案例:某电商平台使用 APISIX 的 limit-req 与 limit-count 插件,按用户维度限流,促销开始前在控制台一键下发新阈值、无需重启网关;峰值时配合限流插件保护下游排序模型服务,p99 延迟从 800ms 降到 200ms。
银行开放 API 平台治理
阶段:API 资产管理、密钥治理与调用审计
解决的问题:银行开放平台需要为几十家生态伙伴提供密钥、配额、审计能力,传统 ESB 改造周期长,难以支撑快速接入。
具体案例:某城商行以 Kong 作为开放平台网关,用 key-auth 插件管理合作伙伴密钥,用 ACL 插件控制不同 tier 的访问权限,配合企业版监控面板统一审计每一次调用,合规检查从两周缩短到一天。
低延迟智能风控服务网格
阶段:AI 模型推理服务的数据面通信与故障隔离
解决的问题:风控推理链路要求 p99 低于 30ms,传统代理在超时控制、熔断降级上不够精细,单点故障容易拖垮整条链路。
具体案例:某金融科技公司在 Istio 中部署 Envoy 作为数据面,为 AI 特征服务配置细粒度超时与熔断,利用异常点检测自动摘除异常推理节点,发生单机故障时近乎无感知完成切换。
Python 演示
# -*- coding: utf-8 -*-"""网关选型评分器:从五个维度为候选网关加权打分""" GATEWAYS = { 'Kong': {'perf': 0.78, 'eco': 0.92, 'cfg': 0.72, 'ops': 0.82, 'ft': 0.75}, 'APISIX': {'perf': 0.88, 'eco': 0.90, 'cfg': 0.85, 'ops': 0.74, 'ft': 0.84}, 'Envoy': {'perf': 0.95, 'eco': 0.62, 'cfg': 0.58, 'ops': 0.55, 'ft': 0.92},} WEIGHTS = {'perf': 0.30, 'eco': 0.20, 'cfg': 0.20, 'ops': 0.15, 'ft': 0.15} DIM_NAME = {'perf': '性能', 'eco': '生态', 'cfg': '配置', 'ops': '运维', 'ft': '容错'} def total_score(name, weights=None): w = weights or WEIGHTS d = GATEWAYS[name] return sum(w[k] * d[k] for k in w) def recommend(weights=None): results = [(name, total_score(name, weights)) for name in GATEWAYS] results.sort(key=lambda x: x[1], reverse=True) return results def show_detail(name): d = GATEWAYS[name] return {DIM_NAME[k]: v for k, v in d.items()} def main(): print('默认权重:', {DIM_NAME[k]: v for k, v in WEIGHTS.items()}) for name, s in recommend(): print('{}: {:.2f}'.format(name, s)) print('评分详情 - APISIX:', show_detail('APISIX')) if __name__ == '__main__': main()
GATEWAYS = {...}用字典保存三种网关在五个维度上的经验分数,分数范围 0~1。def total_score(name, weights=None)接收网关名与权重表,返回该网关的综合分。return sum(w[k] * d[k] for k in w)生成器对每个维度做“权重×得分”再求和,即公式 S 的实现。w = weights or WEIGHTS如果没有传入定制权重,则使用默认权重表。results.sort(key=lambda x: x[1], reverse=True)按综合分从高到低排序,输出选型排名。def main():程序入口,打印默认权重、各网关排名与 APISIX 的评分明细。
常见误区
误区很多文档把 Envoy 称为“网关”,于是初学者以为它和 Kong/APISIX 一样,装好就有管理后台、插件商店、开箱即用的 API 管理能力。
正解Envoy 本质是高性能 L4/L7 数据面代理。控制面(配置下发)、管理界面、API 产品化能力都需要自建或引入 Istio 等系统支撑。它更像“特种兵”,而不是“物业公司全套服务”。若团队无人维护控制面,生产落地会非常吃力。
为何常见:Envoy 在服务网格中出镜率极高,且官方文档强调“cloud-native proxy”,容易被误解为完整网关产品。
误区压测报告里 Envoy 吞吐最高、延迟最低,那所有高并发场景都该选 Envoy?很多人在选型 PPT 里只放一张 benchmark 图就拍板。
正解真实瓶颈通常在业务逻辑、下游数据库与网络,网关很少是第一个垮掉的那层。若团队无人熟悉 Envoy 控制面,性能优势会被运维成本大幅抵消。正确做法是用加权评分模型,把生态、运维、容错也放进决策。
为何常见:性能数据最容易量化、最有视觉冲击力,而生态与运维成本难以量化,容易被忽略。
误区Kong、APISIX、Envoy 都是开源软件,不看商业版也能跑,所以选型零成本、随便试错。
正解开源意味着“免费获取源码”,不意味着“免费维护”。Kong 企业版、APISIX 商业支持、Envoy 控制面组件都有隐性成本;即使纯开源,也需要投入人力维护 etcd、PostgreSQL 等高可用基础设施,这部分隐性支出往往超过软件许可费。
为何常见:“开源”的营销光环容易让人忽略部署运营资源,尤其在预算有限的小团队里。
误区APISIX 支持插件热加载,Kong 要 reload,于是“热更新”被奉为绝对优势,认为 Kong 的配置模式过时了。
正解OpenResty 体系的 reload 属于优雅重载,通常能保持连接不中断且耗时极短;热更新确实减少了 reload 窗口,但真正要评估的是“业务中断时间”。两者在大多数场景都够用,热更新是加分项,不是决策的一票定音。
为何常见:人们容易把“新技术优于旧技术”简化为“新特性全面胜利”,忽略了大多数业务根本没有高到需要区分这一点。
面试题
Q1. Kong 与 APISIX 共同依赖的底层基础是什么?
- A.Caddy 代理
- B.Nginx 内核← 正确答案
- C.Netty 服务
- D.HAProxy 集群
答案:B。Kong 和 APISIX 都构建在 Nginx/OpenResty 之上,通过 Lua 扩展能力。Caddy 用 Go 编写、Netty 是 Java 网络库、HAProxy 是独立代理,都不是它们的底座。记住“同源 Nginx、各走各路”就能答对。
Q2. Envoy 在微服务体系中最核心的角色定位是?
- A.配置中心
- B.数据面代理← 正确答案
- C.注册中心
- D.调度平台
答案:B。Envoy 是一个高性能 L4/L7 数据面代理,负责实际转发流量;控制面(如 Istio)负责下发配置。它不像 Nacos/Eureka 那样做服务注册,也不像 Kubernetes 那样做调度,因此选“数据面代理”。
Q3. 以下哪项是 APISIX 插件相对 Kong 的突出优势?
- A.编写语言
- B.热加载机制← 正确答案
- C.插件数量
- D.界面美观程度
答案:B。两者插件都用 Lua 编写,数量都很庞大。APISIX 的核心差异化是插件热加载——增删改插件无需 reload,对流量零中断。管理界面都不是开箱即用的核心卖点,因此选 B。
Q4. APISIX 的配置中心依赖以下哪个组件?
- A.MySQL
- B.Redis
- C.etcd← 正确答案
- D.Kafka
答案:C。APISIX 使用 etcd 保存配置,利用其分布式一致性实现配置实时推送与高可用。Kong 传统模式依赖 PostgreSQL,Redis 一般用于缓存或限流计数,Kafka 用于消息队列,均非配置中心。
Q5. p99 延迟的正确含义是?
- A.1% 的请求耗时不大于该值
- B.99% 的请求耗时大于该值
- C.99% 的请求耗时不超过该值← 正确答案
- D.所有请求的平均耗时
答案:C。p99 是把所有请求耗时升序排列后第 99% 位置的耗时,表示 99% 的请求都比它快(不超过它)。A 描述的是 p1,B 方向反了,D 是平均延迟,都不对。
Q6. 下列属于网关熔断容错能力的技术有哪些?
- A.请求重试补偿
- B.异常点检测← 正确答案
- C.配置热加载
- D.主动健康检查← 正确答案
答案:BD。熔断容错关注“快速失败”与“故障隔离”,异常点检测(Outlier Detection)和主动健康检查是 Envoy 等实现熔断的重要手段。请求重试是补偿机制而非熔断本身,配置热加载属于配置模式范畴,与容错无关。
Q7. 哪些场景更适配 Envoy 而不是 Kong/APISIX?
- A.已有 Istio 服务网格← 正确答案
- B.纯 Nginx 运维团队
- C.极致低延迟要求← 正确答案
- D.快速上线 API 市场
答案:AC。Envoy 天然适合已有服务网格的基础设施,且 C++ 引擎在极限性能下更有优势。纯 Nginx 团队上手 Lua 系网关更快;快速上线 API 市场需要丰富插件生态,Kong/APISIX 更合适。
Q8. Kong 传统模式的状态存储主要依赖以下哪个数据库?
- A.MongoDB
- B.PostgreSQL← 正确答案
- C.LevelDB
- D.SQLite
答案:B。Kong 传统部署用 PostgreSQL(早期也支持 Cassandra)保存路由、服务、消费者等元数据;DB-less 模式则改用声明式配置文件。MongoDB、LevelDB、SQLite 都不是 Kong 官方主推的存储。
Q9. 关于网关选型加权模型 S = Σwᵢsᵢ,正确的描述有哪些?
- A.所有权重 wᵢ 之和为 1← 正确答案
- B.sᵢ 表示第 i 个维度的权重
- C.sᵢ 是第 i 个维度的得分← 正确答案
- D.所有维度权重必须相等
答案:AC。公式中 wᵢ 是权重、sᵢ 是各维度得分,权重归一化要求 Σwᵢ=1。权重由业务痛点决定、不要求相等。B 和 D 都歪曲了符号含义,属于常见概念混淆。
Q10. 生产环境网关部署中,最应优先保障的能力是?
- A.管理界面美观易用
- B.故障快速恢复← 正确答案
- C.插件数量最多
- D.单机性能极限
答案:B。生产环境的第一优先级是稳定与可恢复——故障发现、切换、恢复时间直接决定可用性 A = MTBF/(MTBF+MTTR)。界面美观、插件数量、极致性能都是加分项,但无法弥补长时间宕机带来的损失。