网关(Gateway)是计算机网络中的一个重要概念,通常用于连接不同的网络或协议,并在它们之间进行数据转发、协议转换和安全控制。在微服务架构中,网关的作用尤为重要,它充当了客户端和后端服务之间的中间层,负责路由、负载均衡、安全认证、限流等功能。
1. 网关的基本概念
网关是一个网络节点,它充当不同网络或协议之间的桥梁。它的主要功能包括:
- 协议转换:在不同协议之间进行转换(如 HTTP 到 gRPC)。
- 路由转发:将客户端请求转发到正确的后端服务。
- 安全控制:提供身份验证、授权、加密等安全功能。
- 负载均衡:将请求分发到多个后端实例,以提高系统的可用性和性能。
- 限流和熔断:防止系统过载,保护后端服务。
2. 网关的类型
根据使用场景的不同,网关可以分为以下几种类型:
(1)网络网关
- 用于连接不同的网络(如局域网和广域网)。
- 主要功能是协议转换和路由转发。
- 例如:家庭路由器、企业防火墙。
(2)API 网关
- 用于微服务架构中,作为客户端和后端服务之间的中间层。
- 主要功能包括路由、负载均衡、安全认证、限流等。
- 例如:Spring Cloud Gateway、Kong、Nginx。
(3)消息网关
- 用于在不同消息系统之间进行协议转换和数据转发。
- 例如:Kafka Connect、RabbitMQ。
3. API 网关的作用
在微服务架构中,API 网关是客户端和后端服务之间的唯一入口。它的主要作用包括:
(1)路由转发
- 根据请求的路径、方法或其他条件,将请求转发到相应的后端服务。
- 例如:将
/user/**的请求转发到用户服务,将/order/**的请求转发到订单服务。
(2)负载均衡
- 将请求分发到多个后端实例,以提高系统的可用性和性能。
- 例如:使用轮询、随机或加权算法进行负载均衡。
(3)安全控制
- 提供身份验证(如 JWT、OAuth2)和授权功能。
- 防止未经授权的访问。
- 例如:验证请求中的 Token,检查用户权限。
(4)限流和熔断
- 限制每个客户端或服务的请求速率,防止系统过载。
- 在服务不可用时,提供熔断机制,避免雪崩效应。
- 例如:使用令牌桶算法进行限流。
(5)日志和监控
- 记录请求和响应的日志,便于排查问题。
- 提供实时监控和报警功能。
- 例如:记录每个请求的响应时间、状态码。
(6)协议转换
- 在不同协议之间进行转换(如 HTTP 到 gRPC)。
- 例如:将 HTTP 请求转换为 gRPC 请求,调用后端服务。
4. 常见的 API 网关
以下是一些常见的 API 网关工具和框架:
(1)Spring Cloud Gateway
- 基于 Spring 生态的 API 网关。
- 支持路由、限流、熔断、安全认证等功能。
- 适合 Spring Boot 和 Spring Cloud 项目。
(2)Kong
- 基于 Nginx 的高性能 API 网关。
- 支持插件扩展,功能丰富。
- 适合大规模分布式系统。
(3)Nginx
- 高性能的 Web 服务器和反向代理。
- 可以通过配置实现简单的 API 网关功能。
- 适合中小型项目。
(4)Envoy
- 由 Lyft 开发的高性能代理。
- 支持动态服务发现、负载均衡、限流等功能。
- 适合云原生环境。
(5)Traefik
- 基于 Go 语言的动态 API 网关。
- 支持自动服务发现和配置更新。
- 适合容器化环境(如 Kubernetes)。
5. API 网关的架构
在微服务架构中,API 网关通常位于客户端和后端服务之间,架构如下:
复制
客户端 -> API 网关 -> 后端服务
- 客户端:发送 HTTP 请求。
- API 网关:处理请求的路由、安全、限流等功能。
- 后端服务:实际的业务逻辑处理。
6. API 网关的优缺点
优点:
- 简化客户端:客户端只需要与网关交互,无需了解后端服务的细节。
- 集中管理:可以在网关中统一实现安全、限流、日志等功能。
- 提高性能:通过负载均衡和缓存提高系统的性能和可用性。
缺点:
- 单点故障:如果网关出现故障,整个系统可能无法访问。
- 性能瓶颈:网关可能成为系统的性能瓶颈,需要优化和扩展。
- 复杂性:网关的配置和维护可能比较复杂。
7. 总结
- 网关是连接不同网络或协议的桥梁,负责数据转发、协议转换和安全控制。
- 在微服务架构中,API 网关是客户端和后端服务之间的中间层,提供路由、负载均衡、安全认证、限流等功能。
- 常见的 API 网关工具包括 Spring Cloud Gateway、Kong、Nginx 等。
黑马商城中用到的网关的实现:
Spring提供的SpringCloud Gateway
网关组成:路由转发+过滤器(编写额外功能)
路由转发:接受外界请求,通过网关的路由转发,转发到后端服务上
一个路由包括id,uri,predicate集合,Filter集合
在route中id是自定的,uri就是一个地址,剩下的predicate和Filter学明白了,route也就学明白了
predicate
中文:谓词
谓词学习gateway比较重要一点的理解就是一些附加条件和内容
Filter
所有生效的Filter都是GatewayFilter的实例,在Gateway运行过程中Filter负责在dialing服务之前或者之后去做一些事情
网关的概念:所谓的API网关,就是指系统的统一入口,提供内部服务的路由中转,为客户端提供统一服务,一些与业务本身功能无关的公共逻辑可以在这里实现,诸如认证、鉴权、监控、路由转发等。
执行流程:

