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

相关文章

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

MySQL版本问题导致项目无法启动问题的解决方案

《MySQL版本问题导致项目无法启动问题的解决方案》本文记录了一次因MySQL版本不一致导致项目启动失败的经历,详细解析了连接错误的原因,并提供了两种解决方案:调整连接字符串禁用SSL或统一MySQL... 目录本地项目启动报错报错原因:解决方案第一个:第二种:容器启动mysql的坑两种修改时区的方法:本地

springboot项目中使用JOSN解析库的方法

《springboot项目中使用JOSN解析库的方法》JSON,全程是JavaScriptObjectNotation,是一种轻量级的数据交换格式,本文给大家介绍springboot项目中使用JOSN... 目录一、jsON解析简介二、Spring Boot项目中使用JSON解析1、pom.XML文件引入依

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

pytest+allure环境搭建+自动化实践过程

《pytest+allure环境搭建+自动化实践过程》:本文主要介绍pytest+allure环境搭建+自动化实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、pytest下载安装1.1、安装pytest1.2、检测是否安装成功二、allure下载安装2.

使用vscode搭建pywebview集成vue项目实践

《使用vscode搭建pywebview集成vue项目实践》:本文主要介绍使用vscode搭建pywebview集成vue项目实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录环境准备项目源码下载项目说明调试与生成可执行文件核心代码说明总结本节我们使用pythonpywebv