11 微服务架构学习与思考:开源 API 网关02-以 Java 为基础的 API 网关详细介绍( 二 )

  • Origin Concurrency Protection
  • HTTP/2
  • Mutual TLS
  • Proxy Protocol
  • GZip
  • Push Messaging
  • 二、SpringCloud Gateway2.1 介绍Spring Cloud Gateway3.1.x 旨在提供一种简单而有效的方式路由到 API,并为它们它们提供横切关注,比如:安全、监控和弹性 。
    它是构建在 Spring 生态之上,包括 Spring5、Spring2 和 Project Reactor(Spring WebFlux) 。
    Spring WebFlux 框架底层使用了 Reactor 模式高性能通信框架 Netty 。
    官网:官网地址
    github: github 地址
    Spring Cloud Gateway 是用来替代 zuul 网关,因为 zuul2 开发进度落后 。
    2.2 Spring Cloud Gateway 特性Features:
    1. 基于 Spring Framework 5、Project Reactor 和 Spring 2.0 构建
    2. 能够在任何请求属性上匹配路由
    3. Predicates 和 Filters 作用于特定路由,易于编写的 Predicates 和 Filters
    4. 集成了断路器
    5. 集成了 Spring Cloud DiscoveryClient
    6. 很容易编写 Predicates 和 Filters
    7. 具备网关一些高级功能:动态路由、限流、路由重写
    Spring Cloud Gateway 与 Eureka、Ribbon、Hystrix 等组件配合使用,实现路由转发、负载均衡、鉴权、熔断、路由重写、日志监控等功能 。
    Spring Cloud Gateway 中的重要概念:
    (1) Filter(过滤器)
    可以使用它来拦截和修改请求,并且对它的上文的响应进行处理 。
    (2) Route(路由)
    网关配置的基本组成模块 。一个 Route 模块由一个 ID,一个目标 URI,一组断言(Predicate)和一组过滤器(Filter)组成 。如果断言为真,则路由匹配,目标 URI 会被访问 。
    (3)Predicate(断言):
    路由转发的判断条件,可以使用它来匹配来自 HTTP 请求的任何内容,例如修改请求方式、请求头内容、请求路径、请求参数等 。如果匹配成功,则转发到相应的服务里 。
    Predicate 是路由的匹配条件,匹配之后,Filter 就对请求和响应进行精细化处理 。有了这两个工具,再加上目标 URI 可以实现一个具体的路由,就可以对具体的路由进行处理操作 。
    2.3 Gateway 处理流程流程图:
    11 微服务架构学习与思考:开源 API 网关02-以 Java 为基础的 API 网关详细介绍

    文章插图
    1. 客户端向 Spring Cloud Gateway 发出请求
    2. Spring Cloud Gateway 通过 Gateway Handler Mapping 找到与请求相匹配的路由,将其发送到 Gateway Web Handler 。
    3. Gateway Web Handler 通过指定的过滤器链(Filter Chain)来处理请求,然后发送到实际的执行业务服务中,业务逻辑执行完后返回 。
    4. 业务逻辑执行完成后,又经过了过滤器链(Filter Chain),这里又可以对执行完后的业务逻辑进行加工处理 。
    说明:过滤器链中的虚线分开过过滤器,是表示过滤器会在业务逻辑处理之前进行 Filter 或处理完之后在进行 Filter 。
    在请求转发到服务端前(Proied Service 前),可以进行 Filter 处理(上图中虚线左边部分),例如权限检查、参数效验、流量监控、协议转换等处理 。
    在服务端处理完业务逻辑后,也可以进行 Filter 处理(上图中虚线右边部分),例如修改响应头、日志输出、流量监控等处理 。
    三、Apache ShenYu(神禹)3.1 介绍Apache ShenYu 是使用 Java reactor 编程方式开发的,是一个可扩展、高性能、响应式的 API 网关 。
    官网:ShenYu 官网
    Doc: ShenYu Doc
    3.2 架构ShenYu version:2.5.0
    整体架构流程图
    11 微服务架构学习与思考:开源 API 网关02-以 Java 为基础的 API 网关详细介绍

    文章插图
    (来自:https://github.com/apache/shenyu)

    经验总结扩展阅读