【gateway 入门】Gateway的基本概念和术语
系列文章目录
【gateway 入门】1、什么是Gateway?
【gateway 入门】2、Gateway的基本概念和术语(本文)
【gateway 入门】3、安装和配置Gateway
【gateway 入门】4、Gateway的架构和组件介绍
【gateway 入门】5、创建一个简单的Gateway服务
【gateway 入门】6、路由配置基础
【gateway 入门】7、请求和响应的处理流程
【gateway 入门】8、使用Gateway进行API管理
【gateway 入门】9、基础安全设置:认证和授权
【gateway 入门】10、日志和监控基础
在上一章中,我们已经了解了什么是Gateway以及它在微服务架构中的重要性。本文将进一步深入探讨Gateway的基本概念和术语,帮助你更好地理解和使用Gateway。
Gateway的基本概念
1. 路由(Route)
路由是Gateway的核心概念之一。它定义了请求的匹配条件和转发目标。每个路由包含一个或多个谓词(Predicate)和一个目标URI。
routes:
- id: user-service
uri: http://user-service:8080
predicates:
- Path=/users/**
在上面的配置中,路由将所有以/users/
开头的请求转发到http://user-service:8080
。
2. 谓词(Predicate)
谓词是用于匹配请求的条件。常见的谓词包括路径匹配、头部匹配、方法匹配等。一个路由可以包含多个谓词,所有谓词都需要匹配请求才能进行转发。
predicates:
- Path=/users/**
- Method=GET
3. 过滤器(Filter)
过滤器用于在请求和响应的过程中进行处理。常见的过滤器操作包括修改请求头、添加认证信息、记录日志等。过滤器可以分为前置过滤器(pre-filter)和后置过滤器(post-filter)。
filters:
- AddRequestHeader=X-Request-Source, Gateway
- StripPrefix=1
4. 负载均衡(Load Balancer)
负载均衡是将请求分配到多个后端服务实例的机制,以确保服务的高可用性和良好的性能。Gateway通常内置了多种负载均衡策略,如轮询、加权轮询、最少连接等。
loadBalancer:
strategy: round-robin
5. 熔断(Circuit Breaker)
熔断器用于在服务出现故障时,迅速阻断请求,防止故障扩散和系统崩溃。熔断器可以监控服务的健康状态,并在服务恢复正常后自动关闭熔断。
filters:
- name: CircuitBreaker
args:
name: myCircuitBreaker
fallbackUri: forward:/fallback
6. 限流(Rate Limiting)
限流用于控制一定时间内的请求数量,保护系统免受流量突增的影响。限流策略可以根据IP、用户等维度进行配置。
filters:
- name: RequestRateLimiter
args:
redis-rate-limiter:
replenishRate: 10
burstCapacity: 20
7. 协议转换(Protocol Conversion)
协议转换是指Gateway在转发请求时,可以将请求从一种协议转换为另一种协议。例如,将HTTP请求转换为gRPC请求。
filters:
- name: ModifyRequestBody
args:
contentType: application/grpc
Gateway的术语
1. 目标URI(Target URI)
目标URI是请求被转发的地址。它可以是一个具体的服务地址或一个负载均衡器地址。
uri: http://user-service:8080
2. 全局过滤器(Global Filter)
全局过滤器是应用于所有请求的过滤器。它们通常用于实现跨领域的功能,如日志记录、认证等。
spring:
cloud:
gateway:
default-filters:
- AddRequestHeader=X-Global-Header, Global
3. 自定义过滤器(Custom Filter)
自定义过滤器是用户根据特定需求编写的过滤器。Spring Cloud Gateway支持用户编写自己的过滤器,以实现特定的业务逻辑。
public class CustomFilter implements GatewayFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
// 自定义过滤逻辑
return chain.filter(exchange);
}
}
4. 重试(Retry)
重试机制允许在请求失败时重新尝试请求,以提高请求的成功率。重试策略可以根据HTTP状态码、异常类型等进行配置。
filters:
- name: Retry
args:
retries: 3
statuses: BAD_GATEWAY, GATEWAY_TIMEOUT
methods: GET, POST
5. 授权(Authorization)
授权是对请求进行权限验证的过程。Gateway可以集成OAuth2、JWT等多种认证授权方式,确保只有经过授权的请求才能访问特定资源。
filters:
- name: OAuth2
args:
tokenUrl: https://auth-server.com/token
clientId: myClientId
clientSecret: myClientSecret
一个完整的示例
为了更好地理解上述概念和术语,我们来看一个完整的示例配置。假设我们有一个电商平台,有用户服务、订单服务和产品服务。我们需要配置Gateway来实现路由、认证、限流和负载均衡等功能。
完整的Spring Cloud Gateway配置
spring:
cloud:
gateway:
routes:
- id: user-service
uri: lb://USER-SERVICE
predicates:
- Path=/users/**
filters:
- AddRequestHeader=X-Request-Source, Gateway
- StripPrefix=1
- name: CircuitBreaker
args:
name: userCircuitBreaker
fallbackUri: forward:/fallback/user
- id: order-service
uri: lb://ORDER-SERVICE
predicates:
- Path=/orders/**
filters:
- name: RequestRateLimiter
args:
redis-rate-limiter:
replenishRate: 10
burstCapacity: 20
- name: Retry
args:
retries: 3
statuses: BAD_GATEWAY, GATEWAY_TIMEOUT
- id: product-service
uri: lb://PRODUCT-SERVICE
predicates:
- Path=/products/**
filters:
- AddRequestParameter=source, gateway
default-filters:
- AddRequestHeader=X-Global-Header, Global
启动服务
# 启动用户服务
java -jar user-service.jar
# 启动订单服务
java -jar order-service.jar
# 启动产品服务
java -jar product-service.jar
# 启动Gateway
java -jar gateway-service.jar
现在,通过Gateway,我们可以实现用户请求的路由、认证、限流、负载均衡和重试等功能。
结论
理解Gateway的基本概念和术语是使用API Gateway的基础。这些概念不仅帮助你配置和管理Gateway,还能让你更好地设计和优化微服务架构。在接下来的文章中,我们将深入探讨Gateway的安装与配置、架构与组件等内容,帮助你全面掌握Gateway的使用。
希望这篇文章能帮助你更好地理解Gateway的基本概念和术语。如果你有任何问题或建议,欢迎在评论中与我们分享。
这些就是关于【gateway 入门】Gateway的基本概念和术语的详细介绍。
这里是爪磕,感谢您的到来与关注,我们将持续为您带来优质的文章。