soul开源网关项目搭建学习

1. soul开源网关项目搭建学习

1.1. 地址

https://gitee.com/shuaiqiyu/soul

1.2. 介绍

  1. 官方介绍:这是一个异步的,高性能的,跨语言的,响应式的API网关。参考了Kong,Spring-Cloud-Gateway等优秀的网关后,站在巨人的肩膀上,Soul由此诞生!

1.3. 特性

  1. 支持各种语言,无缝集成Dubbo,SpringCloud。
  2. 丰富的插件支持,鉴权,限流,熔断,防火墙等等。
  3. 网关多种规则动态配置,支持各种策略配置。
  4. 插件热插拔,易扩展
  5. 支持集群部署,支持A/B Test

1.4. 架构图

soul开源网关项目搭建学习

1.5. 依赖

  1. jdk1.8+
  2. maven3.2+
  3. git
  4. zookeeper
  5. mysql

1.6. 插件

1.6.1. divide插件

  1. divide插件定位是一个http代理插件,当请求头的rpcType为http的时候,并且插件开启的时候,它根据请求参数匹配到规则,然后进行响应式的代理调用。

1.6.2. dubbo插件

  1. dubbo插件,是soul支持dubbo框架的插件。dubbo插件开启,并且当请求头的rpcType字段为dubbo的时候,会走这个插件。

1.6.3. Springcloud插件

  1. springcloud插件,是soul支持springcloud框架的插件。Springcloud插件开启,并且当请求头的rpcType字段为springcloud的时候,会走这个插件。
  2. 可以进行hystrix熔断参数配置
  3. serviceId的服务调用

1.7. 源码解析

1.7.1. 核心 soul-web

1.7.1.1. 负载均衡算法(balance包)

  1. 代码架构还是比较清晰的,首先负载均衡算法
    soul开源网关项目搭建学习
  2. 提供了3种算法,hash(哈希算法),random(随机),roundRobin(循环权重分配)分别对应了spi包里的三个类
  3. 算法实际使用在divide插件,追溯源码可以发现
    soul开源网关项目搭建学习
  4. 具体算法设置在管理页面divide插件的规则列表设置
    soul开源网关项目搭建学习

1.7.1.2. 缓存(cache包)

  1. UpstreamCacheManager类是divide插件专用,用来缓存更新该插件的选择器和规则以及定时检查url
  2. ZookeeperCacheManager 用来进行插件、选择器、规则、权限的缓存和zookeeper节点订阅

1.7.1.3. 自定义线程工厂(concurrent包)

  1. SoulThreadFactory用来自定义工厂名称、是否守护线程、优先级

1.7.1.4. 条件匹配(condition包)

  1. 管理页面中选择器规则的条件判断和策略控制
    soul开源网关项目搭建学习

1.7.1.5. 配置(config包)

soul开源网关项目搭建学习

  1. dubbo插件配置
  2. 异常处理配置
  3. 时序数据库InfluxDB配置
  4. redis限流配置
  5. soul基本插件配合,如监控、限流、签名等
  6. springcloud插件配置

1.7.1.6. 并发写入监控数据(disruptor包)

soul开源网关项目搭建学习

  1. 使用了高性能并发框架disruptor

1.7.1.7. web请求过滤(filter包)

  1. 用于web请求过滤,进行参数验证、过期验证

1.7.1.8. handler处理(handler包)

soul开源网关项目搭建学习

  1. 用于创建webhandler相关实现,为webflux响应式编程实现
  2. 用于处理全局异常
  3. web请求处理拦截,SoulWebHandler是本项目主要入口,对全部插件进行了责任链模式的处理,如下为主要代码
    soul开源网关项目搭建学习

1.7.1.9. influxDb操作类配置(influxdb包)

soul开源网关项目搭建学习

1.7.1.10. logo包

  1. 启动打印logo

1.7.1.11. 插件(plugin包)

soul开源网关项目搭建学习

  1. 监控调用插件monitor
  2. 签名插件sign
  3. 防火墙插件waf
  4. http分发插件divide
  5. dubbo插件
  6. 限流插件rateLimiter
  7. 重写插件rewrite
  8. springcloud插件
  9. 以及以上插件所依赖的某些服务,如redis限流,hystrix限流

1.7.1.12. 请求对象(request包)

  1. RequestDTO对象

1.8. 总结

  经过所有核心代码分析,整个流程大致就清楚了,项目核心采用责任链模式进行插件热插拔,使用zookeeper管理配置信息,使用InfluxDb存储监控调用信息,使用distruptor并发高性能队列进行监控写入,架构采用了webflux反应式Web框架基于Netty进行异步非阻塞调用

1.9. 具体介绍文档

https://dromara.org/website/zh-cn/docs/soul/selector.html

上一篇:boost 编译


下一篇:IE浏览器兼容 css之bug 问题