一、网关基础概念

说到网关,我猜很多人第一反应是「路由器」或者「Nginx 反代」。其实没那么简单。

网关,说白了就是系统的「总入口」。所有外部请求先进来,由它判断该去哪、能不能去、去了之后怎么回。我在做微服务改造那几年,见过太多团队把网关当成一个简单的转发工具,结果线上出了事故才回头补课。

嗯,这一节我们先打好基础。把网关是什么、干什么、放在哪,彻底讲清楚。

1.1 什么是网关

网关(Gateway)是位于客户端与后端服务之间的中间层。它屏蔽了后端复杂的服务拓扑,对外暴露一个统一的接入点。

你可以把它想象成公司的前台:

  • 访客(客户端)不需要知道每个部门在哪
  • 前台根据访客需求,引导到对应部门
  • 如果部门搬迁,前台知道新位置,访客不用改

网关也是这个逻辑。客户端只认网关的地址,后端怎么拆分、怎么部署、怎么扩缩容,客户端一概不知。

核心要点:网关是系统对外的唯一入口,也是内部服务的第一道防线。

1.2 网关的核心功能

网关不是花架子,它承担了三个关键职责。我按重要性排序来说。

1.2.1 路由转发

这是网关最基础的能力。请求来了,网关根据路径、域名、Header 等信息,把请求转发到对应的后端服务。

举个例子:

# 请求路径与后端服务的映射关系
/api/user/*    → user-service:8080
/api/order/*   → order-service:8080
/api/pay/*     → pay-service:8080

我曾经遇到过一个坑:某团队把路由规则写成了精确匹配,结果线上有个接口路径多了个斜杠,直接 404。从那以后,我要求所有路由配置必须做路径归一化处理。

避坑指南:路由配置建议使用前缀匹配 + 正则校验,不要用精确匹配。否则客户端稍微改个路径格式,你就得改网关配置。

1.2.2 协议转换

微服务架构里,前端可能用 HTTP/1.1,内部服务之间用 gRPC,老系统可能暴露的是 Dubbo 协议。网关需要把这些协议「翻译」成后端能理解的语言。

常见的协议转换场景:

客户端协议 后端协议 网关处理方式
HTTP/1.1 HTTP/1.1 透传或改写 Header
HTTP/2 gRPC 协议转换 + 序列化适配
WebSocket TCP 长连接代理
MQTT HTTP 协议桥接

我个人习惯在网关层统一做协议转换,而不是让每个业务服务自己处理。原因很简单:改一处比改十处容易得多。

1.2.3 安全防护

网关是系统的第一道门,安全策略必须在这里落地。常见的防护手段包括:

  • 身份认证:校验 Token、API Key、JWT
  • 访问控制:IP 白名单、路径权限、限流
  • 防攻击:SQL 注入过滤、XSS 防护、请求体大小限制
  • 审计日志:记录所有请求的来源、目标、结果

注意:不要把安全策略全部堆在网关层。网关负责「拦截」,业务服务负责「校验」。两层配合,才能做到纵深防御。

1.3 网关在微服务架构中的位置

很多初学者会问:网关到底放在哪?

我画了一张图,帮你直观理解网关在整个架构中的位置。

网关在微服务架构中的位置 网关在微服务架构中的位置 客户端 API 网关 路由转发 · 协议转换 · 安全防护 用户服务 订单服务 支付服务 服务注册中心(Nacos / Consul / Eureka) 说明:网关从注册中心动态获取服务地址,实现请求的智能路由 服务上下线时,网关自动感知,无需手动修改配置

从这张图你能看到:

  • 客户端只跟网关打交道,不直接访问后端服务
  • 网关背后是多个独立的微服务,各自负责不同业务
  • 网关从注册中心获取服务列表,实现动态路由

我记得有一次线上做服务扩容,新节点刚注册到 Nacos,网关自动就把流量分发过去了。整个过程零停机、零配置变更。这就是网关 + 注册中心配合的魅力。

1.4 网关 vs 负载均衡 vs 反向代理

很多人分不清这三者的区别。我直接列个表,一目了然。

组件 核心职责 工作层级 典型产品
负载均衡 流量分发、健康检查 L4 / L7 Nginx、LVS、HAProxy
反向代理 请求转发、缓存、SSL 卸载 L7 Nginx、Apache
API 网关 路由 + 协议转换 + 安全 + 限流 + 监控 L7 Kong、APISIX、Spring Cloud Gateway

简单来说:负载均衡管「流量怎么分」,反向代理管「请求怎么转」,网关管「整个请求生命周期」。网关的功能更全面,但复杂度也更高。

选型建议:如果你的系统只有几个服务,用 Nginx 做反向代理就够了。如果服务超过 10 个,或者需要统一管理认证、限流、日志,那就得上网关。

1.5 本章小结

这一节我们聊了三个核心问题:

  • 网关是什么——系统的统一入口
  • 网关干什么——路由、协议转换、安全防护
  • 网关放哪——客户端与服务之间,连接注册中心