?
1. 简述:
soul网关是作者根据现有的kong、gateway等网关,再结合公司的定制化需求开发出的一款异步的、高性能的、跨语言的、响应式的api网关。soul网关结合kong的插件话思想和gateway的webflux响应式编程设计,其内置的插件支持不同语言之间的转换,支持请求转发合并,负载均衡,协议转换,限流熔断等诸多功能。而这些功能都是通过可插拔的插件话进行管理的,即在可视化界面进行动态的配置,改变插件的配置和开启关闭。soul网关经过了高并发的生产测试,并拥有高度的可扩展性,是一款十分优秀的工具。
2. 流程介绍
soul网关的启动以及配置流程在官网或这dorama组织的公众号上都有详尽的内容介绍。在此不作赘述。
废话不多说,先来一张soul网关的架构流程图:
该图介绍的是程序猿对于网关的配置操作,程序猿登录网关ui管理界面,进行插件和规则的配置,配置好的插件和规则会保存到数据库当中并会使用http、websocket、nacos、zookeeper等(可选)将规则数据同步到bootstrap(gateway)服务中,在bootstrap服务器中,使用concurrentMap存储在服务器内存当中。以对后续的网关进行规则匹配。
该图是客户端进行网关访问时的具体请求走向过程。(websocket同步方式)
客户机请求经过nginx转发到达网关之后,经过soul网关,sou网关在启动时候,已经收到从soul-admin发送的配置包了。此时网关服务会将请求进行规则的匹配,部分插件会设置请求头的 按照定义好的插件顺序,进行每个插件的工作,最后将请求发送到具体的机器当中。
3. 项目结构
soul-admin: 默认9095端口,soul的可视化配置管理后台
soul-bootstrap: 默认9195端口,soul的网关服务启动器,作为插件的集成处
soul-client: 客户端启动之后,进行网关接口配置数据的拼装
soul-common: 公共服务,工具类,公有配置等
soul-disruptor: soul网关基于disruptor高性能异步队列框架的业务封装,微服务启动注册到soul网关时,使用队列发布以及订阅消息,进行微服务配置数据的更新。
soul-dist: docker镜像
soul-examples: soul网关的测试例子
soul-metrics: 普罗米修斯监控系统
soul-plugin: 插件块代码
soul-register-center: soul-client拼装好的数据,在此模块进行推送至soul-admin
soul-spi: soul对于spi的封装
soul-spring-boot-starter: soul所有启动器,包括客户端推送数据,网关、插件启动器,soul-bootstrap同步接收数据启动器等
soul-sync-data-center: 同步数据主要逻辑代码
soul-web: soul网关对于请求的拦截代码
4. 使用技术栈
Springboot:springboot项目
SPI:设置选取数据同步机制、匹配规则等
Disrutpor:服务注册数据推送,异步队列进行数据更新入库
webflux:响应式编程
其他使用在插件当中:例如:websocket,nacos,dubbo,ratelimit,lua,redis,sofa,grpc,tars等。
?