角色边界:本文把API网关和服务网格放在企业微服务与应用交付场景下讨论,重点解释边界,不评价某个具体产品或开源项目优劣。
API网关和服务网格区别,经常被简化成“一个管入口,一个管内部调用”。这个说法方向没错,但不够指导架构决策。企业真正需要判断的是:哪些流量需要统一入口策略,哪些服务调用需要细粒度治理,哪些能力由平台团队提供,哪些责任应保留在应用团队。
如果边界没有先划清,API网关和服务网格会出现重复治理。比如入口限流和服务间限流同时生效,重试策略叠加导致请求放大,灰度规则在网关和网格里各写一遍,故障时也无法判断到底是哪一层改变了请求行为。
先看流量方向:南北向与东西向
API网关主要处理南北向流量,也就是外部用户、移动端、合作伙伴、开放平台或其他系统如何访问内部服务。它更接近应用入口治理,关注统一域名、路径路由、认证鉴权、API策略、配额、入口灰度和调用审计。
服务网格主要处理东西向流量,也就是服务与服务之间的调用关系。它更接近服务间治理,关注服务发现、负载均衡、熔断、重试、超时、mTLS、流量镜像、细粒度路由和链路观测。
这一区分很重要。外部请求进入系统时,需要先解决“谁能进来、以什么身份进来、访问哪个API、是否超过配额、是否命中入口策略”。请求进入内部后,问题变成“服务A调用服务B是否稳定、失败是否重试、延迟在哪里、版本之间如何分流、调用关系是否可见”。
再看治理对象:API还是服务调用
API网关的治理对象通常是API、调用方、租户、应用、入口路由和开放接口生命周期。它适合统一管理对外暴露能力,包括开发者接入、接口文档、鉴权策略、配额限制、黑白名单、访问日志和审计记录。
服务网格的治理对象通常是服务实例、服务版本、调用链路和服务间策略。它适合处理内部微服务数量增加后的复杂调用问题,尤其是多语言、多团队、多版本共存时的流量治理和观测。
| 判断维度 | API网关更关注 | 服务网格更关注 |
| 流量方向 | 外部到内部的入口流量 | 服务到服务的内部流量 |
| 身份对象 | 用户、应用、租户、合作方 | 服务身份、工作负载身份 |
| 治理能力 | 认证、配额、API审计、入口灰度 | 重试、熔断、mTLS、服务间路由 |
| 使用团队 | 入口平台、开放平台、安全团队 | 平台团队、应用团队、SRE团队 |
| 观测重点 | 调用方、接口、策略命中 | 调用拓扑、延迟、错误传播 |
判断边界的关键,不是组件名称,而是请求在哪一段链路上需要被治理。如果问题发生在入口访问、开放API和调用方管理,优先看API网关;如果问题发生在内部服务依赖、版本分流和服务间故障传播,优先看服务网格或服务治理能力。
认证鉴权:入口身份与服务身份不同
API网关通常承接外部身份。它需要对接企业身份系统、应用凭证、租户体系、Token、签名、OAuth或其他认证机制,判断调用方是否允许访问某个API。
服务网格更关注服务身份。它需要确认服务A是否可以调用服务B,工作负载证书是否有效,服务之间是否启用加密通信,访问策略是否符合最小权限原则。两者都涉及安全,但身份对象不同。
如果把外部用户鉴权放到服务网格里处理,入口管理会变复杂;如果只靠API网关控制内部服务间权限,内部调用链路又可能缺少细粒度约束。比较稳妥的方式是入口身份由API网关统一处理,服务间身份和通信安全由服务治理层处理。
灰度发布:入口灰度与服务间灰度要分层
API网关可以做入口灰度,例如按用户、租户、请求头、路径或比例把外部流量导向新版本。服务网格可以做服务间灰度,例如服务A的一部分调用进入服务B的新版本,或者只对某条内部链路启用新策略。
这两类灰度不是谁替代谁,而是处在不同层级。入口灰度适合控制用户访问影响面,服务间灰度适合控制内部依赖变化。复杂系统中,两者可能同时存在,但必须明确优先级和配置来源。
如果灰度规则在多个系统中重复配置,发布失败时很难定位。建议把灰度策略和发布记录关联起来,明确这次变更修改了入口规则、服务间规则还是两者都有。需要进一步设计灰度与回滚时,可参考 灰度发布策略怎么设计?流量、观测与回滚4类控制点 的控制点思路。
可观测:入口日志和链路追踪要能贯通
API网关能提供入口请求日志、状态码、延迟、调用方、接口、策略命中和审计记录。服务网格能提供服务间拓扑、调用延迟、错误传播、版本分布和链路指标。两者的数据如果割裂,排障会出现断点。
一次请求从外部进入系统后,最好能从网关日志关联到内部链路追踪,再关联到服务日志和指标。这样才能回答:调用方是谁,命中了哪个入口策略,进入了哪个服务版本,在哪个内部调用变慢,错误从哪里开始传播。
对于已经建设微服务平台的团队,可以结合 微服务平台怎么选?链路追踪、Istio与发布治理4类能力 ,把网关、服务网格、链路追踪和发布治理放在同一张能力图上评估。
团队边界:避免平台能力变成配置孤岛
API网关通常由平台、入口、安全或开放平台团队管理,但API定义、接口兼容和业务访问策略需要应用团队参与。服务网格通常由平台或SRE团队提供基础能力,但服务调用关系、超时、重试和版本策略也不能完全脱离应用团队。
常见问题是平台团队提供了能力,应用团队不知道如何使用;或者应用团队自行配置策略,平台团队无法统一审计。更好的方式是建立模板和责任边界:平台提供标准策略、可视化和审计,应用团队声明服务需求和风险,发布流程记录变更和验证结果。
下一步建议
建议先画出当前系统的流量路径:外部入口、API网关、服务集群、服务间调用、观测系统和发布系统分别在哪。然后标注每一段需要的治理能力,判断它更适合放在API网关、服务网格、应用代码还是发布平台中。
如果团队还处在应用交付能力规划阶段,可以从 应用交付分类 继续梳理API网关、服务治理、CI/CD、灰度发布和可观测的组合关系,避免单点选型代替整体架构设计。
常见问题
API网关和服务网格可以同时使用吗?
可以,而且在复杂微服务场景中很常见。关键是明确API网关负责入口治理,服务网格负责服务间治理,并避免相同策略在两层重复配置。
只有API网关能不能做微服务治理?
可以覆盖一部分入口和简单服务路由问题,但当内部服务调用复杂、版本并存、熔断重试和链路观测要求提高时,仅靠API网关通常不够。
服务网格是不是一定很重?
服务网格会带来学习、运维和性能成本,是否采用要看服务规模、治理复杂度和团队能力。不是所有团队都需要一开始就上完整服务网格。
灰度规则应该放在哪一层?
入口用户流量通常放在API网关或入口层,服务间版本分流更适合服务治理层。高风险发布应把两层规则纳入同一发布记录和观测视图。
原创声明:本文为 Alauda 原创技术内容,非商业转载须注明出处:https://www.alauda.cn/blog/239/。
文中图示和文章内容未经许可不得用于商业转载、培训课件、营销材料或二次分发。