Soul源码分析 —— 调试环境搭建
工具依赖
Maven
Git
JDK
IntelliJ IDEA
什么是Soul
Soul是网关,而网关是在分布式和集群环境中对流量进行统一管理的组件。
套用Soul官方的说法:
soul是一个异步的, 高性能的, 跨语言的, 响应式的API网关。
soul核心Features
提供了诸如限流、熔断、转发和路由监控等插件;
与 HTTP、RESTful、WebSocket、Dubbo 和 Spring Cloud 无缝对接;
支持热插拔, 用户可以定制化开发;
为了灵活的适配, 选择器和规则可以动态的适配;
支持集群部署;
支持 A/B 测试和灰度发布。
把项目跑起来先
从git拉代码
git clone git@github.com:dromara/soul.git
使用IDEA打开项目,等待maven自动拉下依赖之后执行
mvn install -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -Drat.skip=true -Dcheckstyle.skip=true
本地部署soul-admin和soul-bootstrap服务
启动mysql服务在默认端口3306
mvn spring-boot:run soul-admin模块或者直接运行SoulAdminBootstrap.java, 输出如下日志
1-01-15 02:08:28.677 INFO 20508 --- [ main] o.s.b.w.embedded.tomcat.TomcatWeServer : Tomcat started on port(s): 9095 (http) with context path ''
2021-01-15 02:08:28.690 INFO 20508 --- [ main] o.dromara.soul.admin.SoulAdminBootstrap : Started SoulAdminBootstrap in 16.388 seconds (JVM running for 18.019)
运行soul-bootstrap的模块下面的SoulBootstrapApplication.java文件将输出如下日志
2021-01-15 02:08:51.163 INFO 20515 --- [ main] o.s.b.web.embedded.netty.NettyWebServer : Netty started on port(s): 9195
2021-01-15 02:08:51.171 INFO 20515 --- [ main] o.d.s.b.SoulBootstrapApplication : Started SoulBootstrapApplication in 12.309 seconds (JVM
数据初始化
运行soul-admin会执行soul-admin/src/main/resources/META-INF/schema.sql文件,来初始化数据库和表结构, 并插入配置数据.
登陆admin界面
用定义在sql文件中的用户名和密码登陆http://localhost:9095/, 可以看到菜单的PlugInList和System Manage,点击System Manage可以看到Divide插件是缺省开启的。
插件的作用
每一个打开的插件就会增加soul网关对流量的适配。也就是说没有打开的插件时,soul网关会拒绝所有的流量。需要对http协议的支持,就有了divide插件,需要对dubbo协议的支持,就有了dubbo插件,等等。有些插件时通用的,比如说rate_limitor是做限流的,monitor是做系统性能监控的,等等。各插件的作用以后会具体研究。
soul-admin提供了什么
首先它提供了对插件的配置数据和元数据的可视化管理和缓存,并将数据持久化并高效地提供给插件服务读取。