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 ?
- 网关作为分布式系统必备的一个组件, 作为一名开发人员需要掌握一个高性能网关需要具备的能力
- Soul 使用了响应式编程框架 Spring WebFlux, 学习了 Soul 能一定程度掌握响应式编程框架在工程应用中的使用场景
- Soul 作为一个多受好评的网关, 其应用架构值得学习 (数据同步的设计, 设计模式的应用, 代码工程组织的设计)
带着问题, 开启 Soul 网关的学习
看了 Soul 的 官网 的介绍后, 关于 Soul 的运行原理提出了几个问题, 希望能带着这些问题开启接下来关于 Soul 网关的学习。