- 官方介绍:这是一个异步的,高性能的,跨语言的,响应式的API网关。参考了Kong,Spring-Cloud-Gateway等优秀的网关后,站在巨人的肩膀上,Soul由此诞生!
- 支持各种语言,无缝集成Dubbo,SpringCloud。
- 丰富的插件支持,鉴权,限流,熔断,防火墙等等。
- 网关多种规则动态配置,支持各种策略配置。
- 插件热插拔,易扩展
- 支持集群部署,支持A/B Test
- jdk1.8+
- maven3.2+
- git
- zookeeper
- mysql
- divide插件定位是一个http代理插件,当请求头的rpcType为http的时候,并且插件开启的时候,它根据请求参数匹配到规则,然后进行响应式的代理调用。
- dubbo插件,是soul支持dubbo框架的插件。dubbo插件开启,并且当请求头的rpcType字段为dubbo的时候,会走这个插件。
- springcloud插件,是soul支持springcloud框架的插件。Springcloud插件开启,并且当请求头的rpcType字段为springcloud的时候,会走这个插件。
- 可以进行hystrix熔断参数配置
- serviceId的服务调用
- 代码架构还是比较清晰的,首先负载均衡算法
- 提供了3种算法,hash(哈希算法),random(随机),roundRobin(循环权重分配)分别对应了spi包里的三个类
- 算法实际使用在divide插件,追溯源码可以发现
- 具体算法设置在管理页面divide插件的规则列表设置
- UpstreamCacheManager类是divide插件专用,用来缓存更新该插件的选择器和规则以及定时检查url
- ZookeeperCacheManager 用来进行插件、选择器、规则、权限的缓存和zookeeper节点订阅
- SoulThreadFactory用来自定义工厂名称、是否守护线程、优先级
- 管理页面中选择器规则的条件判断和策略控制
- dubbo插件配置
- 异常处理配置
- 时序数据库InfluxDB配置
- redis限流配置
- soul基本插件配合,如监控、限流、签名等
- springcloud插件配置
- 使用了高性能并发框架disruptor
- 用于web请求过滤,进行参数验证、过期验证
- 用于创建webhandler相关实现,为webflux响应式编程实现
- 用于处理全局异常
- web请求处理拦截,SoulWebHandler是本项目主要入口,对全部插件进行了责任链模式的处理,如下为主要代码
- 启动打印logo
- 监控调用插件monitor
- 签名插件sign
- 防火墙插件waf
- http分发插件divide
- dubbo插件
- 限流插件rateLimiter
- 重写插件rewrite
- springcloud插件
- 以及以上插件所依赖的某些服务,如redis限流,hystrix限流
- RequestDTO对象
责任链模式进行插件热插拔,使用zookeeper管理配置信息,使用InfluxDb存储监控调用信息,使用distruptor并发高性能队列进行监控写入,架构采用了webflux反应式Web框架,基于Netty进行异步非阻塞调用