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


  • 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 是网关的后台管理系统,能够可视化管理所有插件、选择器和规则,设置用户、角色、控制资源 。
这些更改通过数据同步到网关的 JVM 内存里 。
Admin 使用文档:https://shenyu.apache.org/zh/docs/user-guide/admin-usage/data-permission
后台界面:
11 微服务架构学习与思考:开源 API 网关02-以 Java 为基础的 API 网关详细介绍

文章插图
3.3 插件内置插件ShenYu 内置了很多插件 。在 ShenYu Admin 后台可以设置这些插件 。
比如设置 hystrix 熔断保护服务的插件 。添加插件、设置插进的步骤详情请查看文档 。
内置插件的文档:https://shenyu.apache.org/zh/docs/plugin-center/http-process/contextpath-plugin 。
ShenYu 网关内置了很多插件,详情看文档 。
自定义插件文档:https://shenyu.apache.org/zh/docs/developer/custom-plugin
3.4 扩展功能SPI 扩展比如自定义负载均衡策略,可以对 org.apache.shenyu.loadbalancer.spi.LoadBalancer 进行自定义扩展 。
详情文档:https://shenyu.apache.org/zh/docs/developer/spi/custom-load-balance
插件扩展也就是自定义插件功能,上文有讲到过 。
自定义插件文档
自定义 Filter这里有一个示例,对 org.springframework.web.server.WebFliter 进行扩展 。文档地址 -> filter 扩展
3.5 集群第一种:
利用 Nginx 负载均衡能力实现集群功能,文档地址->集群 。
第二种:
Apache Shenyu-nginx 模块实现集群,https://github.com/apache/shenyu-nginx,在 github 上的 README 看到这个功能模块还是一个实验性质的(到目前2022.10.21) 。
四、参考