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

  • Predicates 和 Filters 作用于特定路由,易于编写的 Predicates 和 Filters
  • 集成了断路器
  • 集成了 Spring Cloud DiscoveryClient
  • 很容易编写 Predicates 和 Filters
  • 具备网关一些高级功能:动态路由、限流、路由重写
  • 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)
    • ShenYu Cluster
    • ShenYu Admin,管理 ShenYu gateway
    • Plugin
    流量进入 -> ShenYu Cluster —> Predicate断言匹配 -> Filter -> Plugins
    ShenYu 中的一些概念插件、选择器、规则,这些元素都可以在 ShenYu Admin UI 后台进行配置管理 。
    • 插件:Apache ShenYu 使用插件化设计思想,可以实现插件的热插拔 , 易扩展 。内置了丰富的插件,包括 RPC 代理、熔断和限流、权限认证、监控等等 。
    • 选择器:每个插件可以设置多个选择器 , 对流量进行初步筛选 。
    • 规则:每个选择器可以设置多个规则 , 对流量进行更细粒度的控制 。
    插件、选择器和规则执行规则:
    当流量进入到 Apache ShenYu 网关之后,会先判断是否有对应的插件,该插件是否开启;
    然后判断流量是否匹配该插件的选择器 。
    然后再判断流量是否匹配该选择器的规则 。
    如果请求流量能满足匹配条件才会执行该插件 , 否则插件不会被执行,处理下一个 。
    他们之间的数据关系,数据库 UML 图:
    11 微服务架构学习与思考:开源 API 网关02-以 Java 为基础的 API 网关详细介绍

    文章插图
    ?(来自:https://shenyu.apache.org/zh/docs/design/database-design)
    说明:一个插件可以对应多个选择器 , 一个选择器可以对应多个规则,一个规则可以对应多个匹配条件 。
    3.3 ShenYu Admin 后台管理Apache ShenYu Admin 是网关的后台管理系统,能够可视化管理所有插件、选择器和规则,设置用户、角色、控制资源 。

    推荐阅读