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

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. 管理页面中选择器规则的条件判断和策略控制

1.7.1.5. 配置(config包)

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

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

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

1.7.1.7. web请求过滤(filter包)

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

1.7.1.8. handler处理(handler包)

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

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

1.7.1.10. logo包

  1. 启动打印logo

1.7.1.11. 插件(plugin包)

  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开源网关项目搭建学习的更多相关文章

  1. Android开源地图项目 BigPlanetTracks 学习随笔

    一.         app主体部分 [tyt.android.bigplanettracks] 二.         地图部分 [tyt.android.bigplanettracks.maps] ...

  2. 传统web项目搭建学习

    1.安装插件 # babel安装问题,Cannot find module '@babel/core' babel-loader@8 requires Babel 7.x (the package ' ...

  3. ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml) 用javascript在客户端删除某一个cookie键值对 input点击链接另一个页面,各种操作。 C# 往线程里传参数的方法总结 TCP/IP 协议 用C#+Selenium+ChromeDriver 生成我的咕咚跑步路线地图 (转)值得学习百度开源70+项目

    ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml)   我们都知道在使用WebApi的时候Controller会自动将Action的返回值自动进行各种序列化处理(序列化为 ...

  4. iOS及Mac开源项目和学习资料【超级全面】

    UI 下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UITable ...

  5. iOS开发--iOS及Mac开源项目和学习资料

    文/零距离仰望星空(简书作者)原文链接:http://www.jianshu.com/p/f6cdbc8192ba著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 原文出处:codecl ...

  6. 强烈推荐 GitHub 上值得前端学习的开源实战项目

    强烈推荐 GitHub 上值得前端学习的开源实战项目. Vue.js vue-element-admin 是一个后台前端解决方案,它基于和 element-ui 实现 基于 iView 的 Vue 2 ...

  7. Android 开源项目及其学习

    Android 系统研究:http://blog.csdn.net/luoshengyang/article/details/8923485 Android 腾讯技术人员博客 http://hukai ...

  8. iOS超全开源框架、项目和学习资料汇总(5)AppleWatch、经典博客、三方开源总结篇

    完整项目 v2ex – v2ex 的客户端,新闻.论坛.apps-ios-wikipedia – apps-ios-wikipedia 客户端.jetstream-ios – 一款 Uber 的 MV ...

  9. 【转】iOS超全开源框架、项目和学习资料汇总

    iOS超全开源框架.项目和学习资料汇总(1)UI篇iOS超全开源框架.项目和学习资料汇总(2)动画篇iOS超全开源框架.项目和学习资料汇总(3)网络和Model篇iOS超全开源框架.项目和学习资料汇总 ...

随机推荐

  1. linux升级openssh到7.9

    客户linux主机ssh存在高危漏洞,需要进行升级修复. linux联网后,直接命令行: [root@gw ~]# yum update openssl -y 此命令只是小版本的升级,比如将opens ...

  2. 使用SQL创建唯一索引

    使用sql语句创建唯一索引,格式如下: create unique index 索引名 on 表名(列名1,列名2……) 示例:在表GoodsMade_Labour的SID列上创建唯一索引IX_Goo ...

  3. pd16.5增加字段备注

    EXEC sp_addextendedproperty 'MS_Description', %.q:COLNNAME%, 'user', dbo, 'table', %TABLE%, 'column' ...

  4. vue2组件懒加载浅析

    vue2组件懒加载浅析 一. 什么是懒加载 懒加载也叫延迟加载,即在需要的时候进行加载,随用随载. 二.为什么需要懒加载 在单页应用中,如果没有应用懒加载,运用webpack打包后的文件将会异常的大, ...

  5. pytest框架之fixture详细使用

    本人之前写了一套基于unnitest框架的UI自动化框架,但是发现了pytest框架之后觉得unnitest太low,现在重头开始学pytest框架,一边学习一边记录,和大家分享,话不多说,那就先从p ...

  6. 微信小程序开发之搞懂flex布局1——Flexbox

    Flexbox ——弹性布局 Flexbox is a layout model for displaying items in a single dimension — as a row or as ...

  7. Deployment descriptor

    部署描述符是JavaEE程序常见的一部分,部署一个Servlet 3 或以上应用程序是一件轻而易举的事.通过Servlet注解,对于不太复杂的应用程序,甚至可以部署没有描述符的Servlet/JSP应 ...

  8. linux 解压 压缩 常见命令

    压缩命令: .tar tar -cvf 文件名称.tar 文件或者文件夹 .tar.gz tar -zcvf 文件名称.tar.gz 文件或者文件夹 .tar.xz tar -Jcf 文件名称.tar ...

  9. 初识 Proxysql

    1.ProxySQL 介绍和安装 ProxySQL 是一种高性能.高可用的开源中间件,适用于mysql和相关的数据库,如MariaDB官网:http://www.proxysql.com 安装 发行版 ...

  10. MySQL的计算时间差

    一.MySQL计算两个日期的时间差 TIMESTAMPDIFF(DAY, datetime1, datetime2); 第一个参数为比较类型,有day, month, year, hour等: 第二个 ...