Soul 回顾
Soul 是一个基于 Netty 的、反应式编程的、支持多种RPC请求类型的、高性能的、插件化的、动态配置的、支持多种流量控制手段的网关。Soul 灵活的配置以及丰富的插件,可以提供很多开箱即用的能力。
- 支持各种语言(http协议),支持 dubbo,springcloud协议。
- 插件化设计思想,插件热插拔,易扩展。
- 灵活的流量筛选,能满足各种流量控制。
- 内置丰富的插件支持,鉴权,限流,熔断,防火墙等等。
- 流量配置动态化,性能极高,网关消耗在 1~2ms。
- 支持集群部署,支持 A/B Test,蓝绿发布。
架构
通过近一个月,对 Soul 网关源码的研究,回过头来,再来看 Soul 的架构图。
- Soul-Admin 主要负责管理插件和配置流量控制的规则,配置数据会通过 http 长轮询、websocket、zookeeper、nacos 等多种方式同步给 Soul-bootstrap。
- 请求到达网关后,会经过插件链,匹配到对应的插件后,请求会被插件进行一系列的处理,如防火墙、验证签名、限流、过滤、容错处理、请求重写等等。
收获与展望
收获
- 插件化的设计思想。可以方便的增加功能,代码的可扩展性非常强。
- 新接触到了一些新的 RPC 协议。如 tars 协议、sofa 协议
- 学习到了好的设计思路。如 通过 websocket 等方式同步数据,可以解耦系统;插件责任链的编程思想,使得整个调用链路清晰,可扩展性强;恰当的利用本地内存和集中式内存来缓存数据,提高系统性能。
- 接触到了好的编程范式。如反应式编程( WebFlux )、异步编程(Servlet 3.0 异步响应机制)
- 阅读源码的方式方法以及能力上升了一个台阶
展望
- Soul 中一些具体的编码技巧,还有待深挖
- Soul 的性能,后面可以想办法进行压测