Soul 网关源码学习(1) - 初探高性能网关 soul

初识 Soul

Soul 是基于 Spring WebFlux 的高性能、可插拔、响应式的 API 网关。根据 soul 的官方文档,Soul 提供了一下的功能 :

  • 提供了诸如限流、熔断、转发和路由监控等插件
  • 与 HTTP、RESTFUL、WebSocket、Dubbo 和 Spring Cloud 无缝对接
  • 支持热插拔,用户可以定制化开发
  • 为了灵活的适配,选择器和规则可以动态的适配
  • 支持集群部署
  • 支持 A/B 测试和灰度发布

在 Soul 网关中, 所有请求都会通过响应链执行所有已打开的插件。

问题1: Soul 是如何通过响应链, 将要执行的插件组合起来的 ?

插件是 Soul 的灵魂,并且插件也是可扩展和热插拔的, 不同的插件实现不同的功能。

问题2: Soul 是实现插件的扩展和热插拔的 ?

在 Soul 网关中, 有选择器和规则的概念, 选择器和规则会根据 HTTP 的请求头来路由你的请求。 选择器是你的第一个路由,它是粗粒度的,举个例子,模块级别。 规则是你的第二个路由,即你认为你的请求应该做什么,举个例子,模块中的方法级别。 选择器和规则只匹配一次,然后返回匹配。因此,最粗粒度应排在最后。

问题3: Soul 中, 选择器和规则路由请求的流程是什么样的 ?

在 Soul 中, 所有的数据都被缓存在 JVM 的 ConcurrentHashMap 中,所以它非常快。 当用户在后台界面改变配置信息时,Soul 通过监听 ZooKeeper node,WebSocket push,HTTP longPull 来动态更新缓存。

问题4: 不同的数据同步方式, 各个模块之间是如何协作的 ?

为什么要学习 Soul ?

  1. 网关作为分布式系统必备的一个组件, 作为一名开发人员需要掌握一个高性能网关需要具备的能力
  2. Soul 使用了响应式编程框架 Spring WebFlux, 学习了 Soul 能一定程度掌握响应式编程框架在工程应用中的使用场景
  3. Soul 作为一个多受好评的网关, 其应用架构值得学习 (数据同步的设计, 设计模式的应用, 代码工程组织的设计)

带着问题, 开启 Soul 网关的学习

看了 Soul 的 官网 的介绍后, 关于 Soul 的运行原理提出了几个问题, 希望能带着这些问题开启接下来关于 Soul 网关的学习。

文章作者: David Liu
文章链接: https://davidliu.now.sh/2021/01/14/start_discoverty_soul/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 David Liu's Blog