Soul源码阅读系列(一)Soul网关初探
23 Feb 2021 | Soul |本篇文章主要内容如下:
Soul
是什么- 如何在本地运行
Soul
- 对
Soul
进行压测
Soul 是什么
Soul
是什么?它可不是灵魂交友软件!
引用Soul
的官网,它是这样描述Soul
的:
这是一个异步的,高性能的,跨语言的,响应式的
API
网关。我希望能够有一样东西像灵魂一样,保护您的微服务。参考了Kong
,Spring-Cloud-Gateway
等优秀的网关后,站在巨人的肩膀上,Soul
由此诞生!
Soul
是一个网关,它的特点如下:
- 支持各种语言(
http
协议),支持dubbo
,spring cloud
协议。 - 插件化设计思想,插件热插拔,易扩展。
- 灵活的流量筛选,能满足各种流量控制。
- 内置丰富的插件支持,鉴权,限流,熔断,防火墙等等。
- 流量配置动态化,性能极高,网关消耗在
1~2ms
。 - 支持集群部署,支持
A/B Test
,蓝绿发布。
来自官网的一张架构图
从上面的架构图可以看出,Soul
网关与语言无关,各种语言(Java
,PHP
,.NET
等)都可以接入到网关中。它通过对不同插件的支持实现各种功能(监控,认证,限流,熔断,不同用户接入等)。在后台管理系统(soul-admin
)就可以灵活配置各种流量。
如何在本地运行 Soul
好了,知道了Soul
是一个网关,那么接下来就看看怎么使用它。 通过案例演示的方式比直接了解各个概念的方式更能激发兴趣,所以开始play it
吧!
-
从官网拉取项目源码
git clone git@github.com:dromara/soul.git
,当前最新版本是2.2.1
。 -
创建并切换分支
git checkout -b myLearn
,就在自己的在本地跑,直接用master
分支也行。 -
使用
IDEA
打开项目,然后本地编译一下,确保没有错。mvn clean install
第一次编译会很慢,需要下载依赖。当然,也可以跳过相关测试和注释,这样会快一点。
mvn clean install -Dmaven.test.skip=true -Dmaven.javadoc.skip=true
-
启动
Soul
的后台管理地址,就是项目源码中的soul-admin
模块,这是一个SpringBoot
项目,只需要修改一下数据库的地址就可以运行了。项目会自动创建对应的库和表。项目启动后的登录地址是
http://localhost:9095/
,默认用户名是admin
,密码是123456
。后台界面如下:主要模块有插件列表和系统管理,在插件列表中可以对各个插件进行管理,每个插件都可以添加多个选择器,每个选择器都可以添加多条规则。实际这就是
Soul
根据请求的URL
去匹配规则:插件->选择器->规则
,这个后面再细说。 -
启动
Soul
的核心模块soul-bootstrap
,这是网关的核心处理逻辑。不要怕它,这个模块本身不复杂,目录结构如下:启动成功后,就可以访问这个网关了
http://127.0.0.1:9195/
,返回信息如下:{"code":-107,"message":"Can not find selector, please check your configuration!","data":null}
因为还没有接入业务系统,所以没有相关返回值,上面展示的信息是
Soul
网关没有找到相应的选择器,返回的一个提示信息 -
通过上述步骤,就成功的搭建起
Soul
网关服务了,后面就是在自己的业务系统上使用网关。使用例子可以参考soul-examples
模块。 -
本文运行
soul-examples
下面的http
服务,结合divde
插件,发起http
请求到soul
网关,体验http
代理。模块目录及配置信息如下:配置文件中有关
soul
的配置我们后面再详细解释,现在只需要知道这个服务就是一个很普通的Spring Boot
项目。其中的一个接口信息如下:运行
SoulTestHttpApplication
,启动这个项目。成功之后,通过postman
进行访问:上面就是一个普通的
http
请求,直接请求业务系统的后端服务,现在通过Soul
网关来访问该服务。
这个localhost:9195
地址就是网关的地址,/http
是业务系统在网关中的名称。那么,现在的请求就是先通过Soul
网关,再由网关转发到实际的请求接口。
对 Soul 进行压测
成功在本地运行Soul
网关之后,我们最后再来看看Soul
网关的性能如何。在windows
平台可以通过SuperBenchmarker
工具进行压测。压测设置的参数是200个请求,32个并发,100秒内执行完。
然后再来看一下直连的情况:
可以看到 直连的RPS(3916.9)
还是大于经过网关转发后的RPS(1526.3 )
,毕竟多了网关这一层的转发。
小结一下,本篇文章介绍了Soul
网关的特点和架构设计。然后,拉取soul
源码,在本地运行测试案例。最后,对soul
网关进行了简单的压测。
参考文章: