【gateway 入门】2、Gateway的基本概念和术语

【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的基本概念和术语的详细介绍。
这里是爪磕,感谢您的到来与关注,我们将持续为您带来优质的文章。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值