曼联指定线路

Spring Cloud Gateway 最佳实践

上面介绍了 Spring Cloud Gateway 的定义和实现原理,下面根据几个常用的场景介绍一下 Spring Cloud Gateway 如何实现网关功能的。

我们会根据基本路由、权重路由、限流、动态路由几个方面给大家展开介绍。

基本路由

基本路由,主要功能就是在客户端请求的时候,根据定义好的路径指向到对应的 URI。这个过程中需要用到 Predicates(断言)中的 Path 路由断言处理器。

首先在 POM 文件中加入对应的依赖,如下:


    org.springframework.cloud
    spring-cloud-starter-gateway

加入如下代码,其中定义的 Path 的路径“/baidu”就是请求时的路径地址。对应的 URI,就是要跳转到的目标地址。

@Bean
public RouteLocator routeLocator(RouteLocatorBuilder builder) {
   return builder.routes()
         .route(r ->r.path("/baidu")
               .uri("http://www.baidu.com/").id("baidu_route")
         ).build();
}

同样上面的功能也可以在 yml 文件中实现。配置文件如下,说白了就是对 Path 和 URI 参数的设置,实现的功能和上面代码保持一致。

spring:
  cloud:
    gateway:
      routes:
      - id: baidu_route
        uri: http://baidu.com:80/
        predicates:
        - Path=/baidu

此时启动 API 网关,假设网关的访问地址是“localhost:8080/baidu”,当用户请求这个地址的时候就会自动请求“www.baidu.com”这个网站。这个配置起来很简单,有 Nginx 基础的朋友应该很快就能上手。

权重路由

这个使用场景相对于上面的简单路由要多一些。由于每个微服务发布新版本的时候,通常会保持老版本与新版版同时存在。

然后通过网关将流量逐步从老版本的服务切换到新版本的服务。这个逐步切换的过程就是常说的灰度发布。

此时,API 网关就起到了流量分发的作用,通常来说最开始的老版本会承载多一些的流量,例如 90% 的请求会被路由到老版本的服务上,只有 10% 的请求会路由到新服务上去。

从而观察新服务的稳定性,或者得到用户的反馈。当新服务稳定以后,再将剩下的流量一起导入过去。
曼联指定线路_第1张图片
图 6:灰度发布,路由到新/老服务

如下代码所示,假设 API 网关还是采用 8080 端口,需要针对两个不同的服务配置路由权重。因此在 routes 下面分别配置 service_old 和 service_new。

server.port: 8080
spring:
  application:
    name: gateway-test
  cloud:
    gateway:
      routes:
      - id: service_old
        uri: http://localhost:8888/v1
        predicates:
        - Path=/gatewaytest
        - Weight=service, 90
      - id: service_new
        uri: http://localhost:8888/v2
        predicates:
        - Path=/gatewaytest
        - Weight=service, 10

在两个配置中对应的 URI 分别是新老两个服务的访问地址,。

在 Predicates(断言)中定义了的 Path 是想通的都是“/gatewaytest”,也就是说对于客户端来说访问的路径都是一样的,从路径上客户不会感知他们访问的是新服务或者是老服务。

主要参数是在 Weight,针对老/新服务分别配置的是 90 和 10。也就是有 90% 的流量会请求老服务,有 10% 的流量会请求新服务。

简单点说,如果有 100 次请求,其中 90 次会请求 v1(老服务),另外的 10 次会请求 v2(新服务)。

你可能感兴趣的:(曼联指定线路)