soul开源网关项目搭建学习

2024-05-02 10:38

本文主要是介绍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. 架构图

架构

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. 代码架构还是比较清晰的,首先负载均衡算法
    751560-20190122162521256-1125720278.png
  2. 提供了3种算法,hash(哈希算法),random(随机),roundRobin(循环权重分配)分别对应了spi包里的三个类
  3. 算法实际使用在divide插件,追溯源码可以发现
    751560-20190123102010154-996433021.png
  4. 具体算法设置在管理页面divide插件的规则列表设置
    751560-20190123102305805-536738795.png
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. 管理页面中选择器规则的条件判断和策略控制
    751560-20190123111215411-1549841707.png
1.7.1.5. 配置(config包)

751560-20190123112256528-603514791.png

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

751560-20190123151600595-1279656187.png

  1. 使用了高性能并发框架disruptor
1.7.1.7. web请求过滤(filter包)
  1. 用于web请求过滤,进行参数验证、过期验证
1.7.1.8. handler处理(handler包)

751560-20190123153713965-1795076923.png

  1. 用于创建webhandler相关实现,为webflux响应式编程实现
  2. 用于处理全局异常
  3. web请求处理拦截,SoulWebHandler是本项目主要入口,对全部插件进行了责任链模式的处理,如下为主要代码
    751560-20190123154732101-1069523789.png
1.7.1.9. influxDb操作类配置(influxdb包)

751560-20190123155101440-1418697004.png

1.7.1.10. logo包
  1. 启动打印logo
1.7.1.11. 插件(plugin包)

751560-20190123160206722-318358904.png

  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

这篇关于soul开源网关项目搭建学习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/954060

相关文章

Python 中 requests 与 aiohttp 在实际项目中的选择策略详解

《Python中requests与aiohttp在实际项目中的选择策略详解》本文主要介绍了Python爬虫开发中常用的两个库requests和aiohttp的使用方法及其区别,通过实际项目案... 目录一、requests 库二、aiohttp 库三、requests 和 aiohttp 的比较四、requ

SpringBoot项目启动后自动加载系统配置的多种实现方式

《SpringBoot项目启动后自动加载系统配置的多种实现方式》:本文主要介绍SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的... 目录1. 使用 CommandLineRunner实现方式:2. 使用 ApplicationRunne

使用IntelliJ IDEA创建简单的Java Web项目完整步骤

《使用IntelliJIDEA创建简单的JavaWeb项目完整步骤》:本文主要介绍如何使用IntelliJIDEA创建一个简单的JavaWeb项目,实现登录、注册和查看用户列表功能,使用Se... 目录前置准备项目功能实现步骤1. 创建项目2. 配置 Tomcat3. 项目文件结构4. 创建数据库和表5.

Python项目打包部署到服务器的实现

《Python项目打包部署到服务器的实现》本文主要介绍了PyCharm和Ubuntu服务器部署Python项目,包括打包、上传、安装和设置自启动服务的步骤,具有一定的参考价值,感兴趣的可以了解一下... 目录一、准备工作二、项目打包三、部署到服务器四、设置服务自启动一、准备工作开发环境:本文以PyChar

多模块的springboot项目发布指定模块的脚本方式

《多模块的springboot项目发布指定模块的脚本方式》该文章主要介绍了如何在多模块的SpringBoot项目中发布指定模块的脚本,作者原先的脚本会清理并编译所有模块,导致发布时间过长,通过简化脚本... 目录多模块的springboot项目发布指定模块的脚本1、不计成本地全部发布2、指定模块发布总结多模

SpringBoot项目删除Bean或者不加载Bean的问题解决

《SpringBoot项目删除Bean或者不加载Bean的问题解决》文章介绍了在SpringBoot项目中如何使用@ComponentScan注解和自定义过滤器实现不加载某些Bean的方法,本文通过实... 使用@ComponentScan注解中的@ComponentScan.Filter标记不加载。@C

Mycat搭建分库分表方式

《Mycat搭建分库分表方式》文章介绍了如何使用分库分表架构来解决单表数据量过大带来的性能和存储容量限制的问题,通过在一对主从复制节点上配置数据源,并使用分片算法将数据分配到不同的数据库表中,可以有效... 目录分库分表解决的问题分库分表架构添加数据验证结果 总结分库分表解决的问题单表数据量过大带来的性能

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步

javafx 如何将项目打包为 Windows 的可执行文件exe

《javafx如何将项目打包为Windows的可执行文件exe》文章介绍了三种将JavaFX项目打包为.exe文件的方法:方法1使用jpackage(适用于JDK14及以上版本),方法2使用La... 目录方法 1:使用 jpackage(适用于 JDK 14 及更高版本)方法 2:使用 Launch4j(

Docker集成CI/CD的项目实践

《Docker集成CI/CD的项目实践》本文主要介绍了Docker集成CI/CD的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、引言1.1 什么是 CI/CD?1.2 docker 在 CI/CD 中的作用二、Docke