Soul 网关源码学习(5) - 从依赖的角度理解 Soul 网关(1)

Soul 模块概况

soul 网关项目采用 maven 组织项目模块, 主要的模块定义在可以从项目根路径的 pom.xml 出发找到各个模块:

模块名 模块说明
soul-admin soul 管理台控制接口, soul bootstrap 运行时数据支持
soul-bootstrap soul 网关承接流量的入口工程
soul-client soul 网关 RPC 代理调用客户端封装父 pom
soul-client-common soul 网关 RPC 代理公共组件
soul-client-dubbo soul 网关 dubbo RPC 调用客户端封装父 pom
soul-client-apache-dubbo soul 网关 apache dubbo RPC 调用客户端封装
soul-client-alibaba-dubbo soul 网关 alibaba dubbo RPC 调用客户端封装
soul-client-dubbo-common soul 网关 dubbo RPC 调用公共组件封装
soul-client-http soul 网关 HTTP RPC 调用客户端封装父 pom
soul-client-springcloud soul 网关 SpringCloud HTTP RPC 调用客户端封装
soul-client-springmvc soul 网关 SpringMVC HTTP RPC 调用客户端封装
soul-client-sofa soul 网关 sofa RPC 调用客户端封装
soul-client-tars soul 网关 tars RPC 调用客户端封装
soul-common soul 网关公共依赖封装
soul-dist soul 部署相关的依赖封装父 pom
soul-admin-dist soul admin 部署相关依赖封装
soul-bootstrap-dist soul bootstrap 部署相关依赖封装
soul-examples soul 网关示例子模块根 pom 工程
soul-metrics soul 数据采样相关依赖封装父 pom
soul-metrics-facade soul 数据采样相关调用入口封装
soul-metrics-prometheus soul 数据采样 prometheus 封装
soul-metrics-spi soul 数据采样 spi 定义
soul-plugin soul 网关插件相关封装父 pom
soul-plugin-alibaba-dubbo soul 网关 alibaba dubbo 插件封装
soul-plugin-apache-dubbo soul 网关 apache dubbo 插件封装
soul-plugin-api soul 网关插件 api 定义
soul-plugin-base soul 网关插件基础依赖定义
soul-plugin-context-path soul 网关 context path 插件定义
soul-plugin-divide soul 网关 divide 插件定义
soul-plugin-global soul 网关 global 插件定义
soul-plugin-httpclient soul 网关 httpclient 插件定义
soul-plugin-hystrix soul 网关 hystrix 插件定义
soul-plugin-monitor soul 网关 monitor 插件定义
soul-plugin-ratelimiter soul 网关限流插件定义
soul-plugin-resilience4j soul 网关 resilience4j 插件定义
soul-plugin-rewrite soul 网关接口路径重写 插件定义
soul-plugin-sentinel soul 网关 sentinel 插件定义
soul-plugin-sign soul 网关认证插件定义
soul-plugin-sofa soul 网关 sofa 插件定义
soul-plugin-springcloud soul 网关 springcloud 插件定义
soul-plugin-tars soul 网关 tars 插件定义
soul-plugin-waf soul 网关 waf 插件定义
soul-register-center soul 网关注册中心封装父 pom
soul-register-client soul 网关注册中心 client 封装父 pom
soul-register-client-api soul 网关注册中心 client 接口封装
soul-register-client-http soul 网关注册中心 http client 封装
soul-register-client-zookeeper soul 网关注册中心 zookeeper client 封装
soul-register-common soul 网关注册中心公共依赖封装
soul-register-server soul 网关注册中心 server 封装父 pom
soul-register-server-api soul 网关注册中心 server api 定义
soul-register-server-http soul 网关注册中心 http server 定义
soul-register-server-server soul 网关注册中心 zookeeper server 定义
soul-spi soul 网关 spi 功能定义组件
soul-spring-boot-starter soul 网关 spring boot starter 封装父 pom
soul-sync-data-center soul 网关数据同步封装父 pom
soul-web soul 网关 web 功能定义

soul 为了实现高吞吐, 高性能, 从方方面面进行优化, 包括网关应用编码方面采用响应式异步流编程, 功能特征数据流同步采用 JVM 缓存与数据库结合方式。可使用的数据同步的方式主要有以下几种, http长轮询、nacos 配置中心同步、websocket、zookeeper。
插件大体可以分为路由插件和网关业务功能插件,路由插件负责将请求转发到正确的下游服务上,网关业务插件负责执行网关的通用业务逻辑,比如限流、鉴权等。流量必须在路由插件中配置才能正确转发,而业务插件不是必配的。每个插件都是单独针对全部流量配置筛选和使用规则,所以配置可以很灵活。
soul-plugin 部分代码可以发现,如果想自定义插件,也至少需要这两部分,一个是插件处理类,一个是处理动态配置的类。

模块梳理之后的思考

soul 网关可部署的组件有两个: soul-adminsoul-dashboard, soul dashboard 中的功能概览如下:

Soul Admin 功能

以上的代码模块, 我从上到下整理了一遍, 阅读了各个模块 pom 的依赖关系, 接下来几天的学习将从如下的几条线去探索 soul 网关组件的源码:

  • 组件间如何协作来实现 soul 网关功能的可插拔的?
  • soul 网关如何保证高性能的?
  • soul 网关如何实现代理多种 RPC 请求的?
  • soul 的插件体系是如何实现可扩展的 ?
文章作者: David Liu
文章链接: https://davidliu.now.sh/2021/01/19/soul_admin_source_analyzeI/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 David Liu's Blog