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. 3D Graph Neural Networks for RGBD Semantic Segmentation

    3D Graph Neural Networks for RGBD Semantic Segmentation 原文章:https://www.yuque.com/lart/papers/wmu47a ...

  2. VB 性能优化点

    1.将Single,Double和Currency类型的变量替换为Integer或Long类型的变量:10倍 2.避免使用变体: 慢:Dim FSO as object     Set FSO = N ...

  3. php 随机生成ip

    #随机生成IP 中国区 function randip(){ $ip_1 = -1; $ip_2 = -1; $ip_3 = rand(0,255); $ip_4 = rand(0,255); $ip ...

  4. 实现一个简易版的SpringMvc框架

    先来看我们的程序入口DispatcherServlet 主要核心处理流程如下: 1 扫描基础包下的带有controller 以及 service注解的class,并保存到list中 2 对第一步扫描到 ...

  5. APP优化(转载)

  6. union: redis config

    # how to save to disk # warning: how to disable, just comment this config save $second $changes

  7. MongoDB学习记录(二) - MongoDB的"增查改删"操作之"增"

    如果做插入文档操作的集合不存在,那么集合将被创建 db.collection.insertOne() insertOne为collection插入一条文档,如果文档的_id字段未指定,MongoDB会 ...

  8. dubbo入门学习 四 注册中心 zookeeper入门

    一.Dubbo支持的注册中心 1. Zookeeper 1.1 优点:支持网络集群 1.2 缺点:稳定性受限于Zookeeper 2. Redis 2.1 优点:性能高. 2.2 缺点:对服务器环境要 ...

  9. LOJ-10092(最大半连通子图)

    题目连通:传送门 思路: 题目定义很清晰,然后就不会了QAQ…… 后来看了书,先缩点,然后再用拓扑排序找到最长的链子的节点数(因为缩点后所有点都是一个强连通分量,所以找最长的链子就是最大限度包含 点的 ...

  10. GXB动态重配置

    可选择重配置逻辑(Optional Reconfiguration Logic) 使能选项: • Capability registers • Control and status registers ...