一、网关基础概念:从“门卫”到“交通枢纽”

说实话,我第一次接触网关这个概念,是在十多年前做一个企业级项目的时候。那时候微服务还没火,我们用的是传统的单体架构。但系统要跟外部第三方对接,就遇到了一个很现实的问题——怎么让外部系统安全地访问我们内部的接口?

当时我的老领导跟我说了一句话,我到现在还记得:“网关就是系统的门卫,所有进出的请求都得经过它点头。”

嗯,这个比喻很形象。但今天我们再来看网关,它已经远不止是“门卫”这么简单了。在微服务架构里,网关更像是一个智能交通枢纽——它不仅要检查通行证,还要做路线规划、流量调度、甚至协议翻译。

1.1 什么是网关?

从技术上讲,网关(Gateway)是一个位于客户端与后端服务之间的中间层。它负责接收客户端的请求,然后根据规则转发给后端的某个或多个服务,最后把结果返回给客户端。

你想想看,如果没有网关,客户端要直接面对几十个甚至上百个微服务。每个服务的地址、端口、协议可能都不一样。客户端得维护一份长长的服务列表,还得自己处理负载均衡、认证鉴权、限流熔断……这画面太美我不敢看。

核心定义:网关是系统对外的唯一入口,所有外部请求都通过它进入内部网络。它屏蔽了后端服务的复杂性,为客户端提供统一的访问接口。

1.2 网关的核心功能

网关到底能干什么?我把它拆成三个核心功能来讲。这三个功能,基本上覆盖了网关90%以上的职责。

1.2.1 协议转换

我在项目中遇到过这样一个场景:前端用的是HTTP/1.1,但后端某个服务只支持gRPC。如果没有网关,前端就得自己实现gRPC客户端,或者后端专门为前端开一个HTTP接口——这两种方案都不优雅。

网关可以帮我们做协议转换。它接收HTTP请求,解析参数,然后转换成gRPC调用,拿到结果后再转回HTTP响应返回给前端。整个过程对客户端完全透明。

协议类型 常见场景 网关处理方式
HTTP → HTTP 前端请求后端REST API 直接转发,可做请求/响应改写
HTTP → gRPC 前端调用后端微服务 HTTP请求转gRPC调用,响应转JSON
HTTP → Dubbo 前端调用Java Dubbo服务 HTTP请求转Dubbo RPC调用
MQTT → HTTP 物联网设备上报数据 MQTT消息转HTTP回调

避坑指南:我曾经在一个项目中,网关层做了大量的协议转换,结果性能成了瓶颈。后来我们做了两件事:一是把协议转换逻辑下沉到专门的适配层,二是对高频转换路径做了缓存。网关只做轻量级的协议适配,重活交给下游。

1.2.2 路由转发

路由转发是网关最基础的功能。说白了就是:请求来了,网关根据规则决定把它发给谁。

路由规则可以基于很多维度:

  • 路径匹配:/api/user/** 转发到用户服务,/api/order/** 转发到订单服务
  • 域名匹配:user.example.com 转发到用户服务集群
  • Header匹配:根据请求头中的版本号路由到不同版本的服务
  • 权重路由:灰度发布时,10%的流量路由到新版本

这里有个细节要注意——网关的路由表通常是动态加载的。我习惯把路由配置放在配置中心(比如Nacos、Consul),网关启动时拉取一次,后续通过监听机制实时更新。这样改路由规则不用重启网关,线上操作非常方便。

// 一个典型的路由配置示例(YAML格式)
routes:
  - id: user-service
    uri: lb://user-service  # 负载均衡方式
    predicates:
      - Path=/api/user/**
    filters:
      - StripPrefix=1        # 去掉/api前缀

  - id: order-service
    uri: http://192.168.1.100:8080  # 直连方式
    predicates:
      - Path=/api/order/**
    filters:
      - AddRequestHeader=X-Source, gateway

1.2.3 安全隔离

安全隔离这块,我吃过不少亏。早期有个项目,网关层只做了简单的IP白名单,结果被爬虫扫到了内部接口,数据泄露了。从那以后,我对网关的安全能力格外重视。

网关在安全方面能做的事情很多:

  • 认证鉴权:统一校验JWT Token、OAuth2令牌,拒绝未授权请求
  • 流量清洗:识别并拦截SQL注入、XSS攻击等恶意请求
  • 限流熔断:防止突发流量冲垮后端服务
  • IP黑白名单:封禁恶意来源IP
  • 参数校验:在网关层做基础的参数合法性检查

重要提醒:网关的安全策略应该是“默认拒绝,按需放行”。不要想着在网关层把所有安全问题都解决掉——网关只是第一道防线,后端服务自身的安全防护同样不能少。我曾经见过一个团队把所有安全逻辑都堆在网关层,结果网关挂了,整个系统裸奔……

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

搞清楚了网关是什么、能干什么,我们来看看它在微服务架构里到底站在哪。

下面这张图是我自己画的,展示了网关在典型微服务架构中的位置:

网关在微服务架构中的位置 客户端层(Web / App / IoT / 第三方) API 网关层 协议转换 · 路由转发 · 安全隔离 · 限流熔断 用户服务 user-service 订单服务 order-service 支付服务 payment-service 基础设施(注册中心 · 配置中心 · 数据库 · 消息队列) 网关是客户端与微服务之间的桥梁,所有请求统一经过网关,再由网关分发到后端服务

从这张图可以看得很清楚:网关处在客户端和后端微服务之间。客户端只跟网关打交道,不直接访问任何后端服务。后端服务的地址、端口、协议变化,对客户端完全不可见。

这样做的好处是什么?

  • 客户端变轻了:不用维护复杂的服务发现逻辑,只需要知道网关地址就行
  • 后端变安全了:内部服务不暴露在公网,攻击面大幅缩小
  • 运维变灵活了:后端服务扩缩容、版本升级,客户端无感知
  • 治理变集中了:限流、熔断、降级、监控,都在网关层统一做

我的建议:在微服务架构中,网关不是可选项,而是必选项。哪怕你的系统只有两三个服务,我也建议你上一个轻量级的网关。别等到服务多了、问题暴露了再回头加网关——那时候改造成本会高很多。我见过太多团队一开始图省事,后面被坑得欲哭无泪。

1.4 网关的分类

聊到这儿,你可能想问:网关是不是只有一种?其实不是。根据使用场景,网关大致可以分为三类:

类型 典型代表 适用场景 特点
流量网关 Nginx、Kong、HAProxy 全局流量调度、DDoS防护、SSL卸载 高性能、专注流量层面
业务网关 Spring Cloud Gateway、Zuul 微服务路由、认证鉴权、协议转换 与业务紧密相关、灵活可编程
安全网关 WAF、API Gateway(安全版) Web攻击防护、Bot管理、API安全 深度安全检测、规则引擎

在实际项目中,这三类网关往往是分层部署的。我习惯的做法是:最外层放Nginx做流量网关,处理SSL和基础限流;中间层放Spring Cloud Gateway做业务网关,处理路由和鉴权;最内层如果有特殊安全需求,再叠加WAF。这样各层职责清晰,出了问题也好排查。

一个小经验:不要试图用一个网关解决所有问题。流量网关和业务网关分开,性能更好,维护也更方便。我曾经在一个项目里把所有逻辑都塞进Zuul,结果网关变得又重又慢,后来拆成Nginx+Gateway两层,问题迎刃而解。

1.5 本章小结

好了,这一章的内容就这些。我们聊了网关是什么、它的三个核心功能(协议转换、路由转发、安全隔离),以及它在微服务架构中的位置。最后还简单介绍了网关的分类。

网关这个东西,说简单也简单,说复杂也复杂。简单是因为它的核心逻辑就是“收请求、做处理、发出去”;复杂是因为在真实的生产环境中,你要考虑的东西太多了——性能、高可用、安全性、可扩展性……

不过别担心,后面的章节我会一个一个拆开来讲。你先把今天的基础概念消化掉,后面学起来会轻松很多。