soul从入门到放弃1--项目搭建
零、概述
用于工作、学习的需要开始学习soul,希望能坚持下去,不像专栏的名字一样 ------ soul从入门到放弃
本篇导读:网关的基本概念、soul主要架构、环境的基本搭建
一、基本概念
什么是api网关(服务网关)?
服务网关 = 路由转发 + 过滤器
- 路由转发:接收所有外界请求,根据路由配置,转发到微服务上
- 过滤器:可以完成一系列的横切功能,如:限流、监控、权限校验等
以上这些功能本质上都是通过过滤器实现的
什么是soul?
一个基于WeuFlux实现的响应式API网关,具有异步的,高性能的,跨语言的等特点。
soul的主要功能
- 支持各种语言(http协议),支持 dubbo,springcloud协议。
- 插件化设计思想,插件热插拔,易扩展。
插件的热插拔,规则的动态配置。
举个列子,比如一个接口你限流是1秒50次,但是你想调小点,像Springcloud-gateway 或者zuul 是不是还得改动配置 然后重启。 soul则不需要,直接在soul-admin找到对应的接口修改即可.</pre>
- 灵活的流量筛选,能满足各种流量控制。
- 内置丰富的插件支持,鉴权,限流,熔断,防火墙等等。
- 流量配置动态化,性能极高,网关消耗在 1~2ms。
- 支持集群部署,支持 A/B Test, 蓝绿发布。
架构图
image image此图绿色部分为客户端,按照网关要求的数据格式来请求网关服务。
soul的底层是webflux,如果soul是集群部署的话,可以开启nginx,来反向代理网关服务。
Soul-admin
是soul的控制台,负责管理插件插拔,选择器的配置,规则的配置。将数据写入mysql中,同时基于SPI(HTTP、Zookeeper、Websocket三种之一),实现数据同步机制(后续篇章会详解)。
Soul Cluster
soul启动后,会根据数据同步机制,拉去远端相关配置信息至本地,写入本地JVM,然后开启监听,来动态更新JVM中的数据,
Plugins--Handler
基于插件责任链模式的执行流程,每个插件各司其职。插件是根据用户在soul-admin配置网关请求数据,规则,来执行具体逻辑。
二、环境搭建
依赖工具:朴实无华的工具,降低网关引入门槛
JDK 1.8+
Maven 3.2.x
Git
mysql 5.x :温馨提醒,轻易不要尝试mysql 8
克隆代码
giee:git clone https://gitee.com/shuaiqiyu/soul.git --depth=1
github:git clone https://gitee.com/shuaiqiyu/soul.git --depth=1
关于: depth
- 用 git clone --depth=1 的好处是限制 clone 的深度,不会下载 Git 协作的历史记录,这样可以大大加快克隆的速度
- depth用于指定克隆深度,为1即表示只克隆最近一次commit
- 适合用 git clone --depth=1 的场景:你只是想clone最新版本来使用或学习,而不是参与整个项目的开发工作
maven编译
可以skip一些,提升运行效率
mvn clean package install -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -Drat.skip=true -Dcheckstyle.skip=true
修改配置及启动
soul-admin
soul-admin/src/main/resources/application.yml
image修改mysql的配置项目,之后 启动项目即可。
项目启动会类LocalDataSourceLoader,会执行schema.sql脚本,自动创建库、表、相关初始化数据。
用户名:admin 密码:123456
image.png
各种插件
soul-bootstrap
基本不需要修改,只要注意与后台连接地址一致即可
image三、心得总结
环境搭建的过程,复习很多maven与git上的使用小技巧
本篇幅讲了soul的大致架构,对分布式系统的交互有了新的理解,下一篇将撸起胳膊开始最简单的http接口测试
靡不有初,鲜克有终。希望自己能坚持写完这个系列