我正在参与掘金创作者训练营第4期,点击了解活动详情,一起学习吧!
初识shenyu
与Apache ShenYu的初识是一个偶然: 在某位已经不知道是哪个公众号博主的介绍里, 看到了shenyu的身影. 知道这是一个本土开源的一个API网关. 面向百度, 原来shenyu这个名字来源于大禹治水. 也由于近期确实想了解一个开源的网关系统, 然后就加入了其社区中.
shenyu是什么
Apache ShenYu网关是的前身是soul的网关, 是Dromara开源组织下的, 后来逐渐的完善, 捐献给了Apache基金会, 更名为ShenYu. 从名字上大禹治水之势可想而知, 他注定就是Api网关中的一匹黑马.
Apache ShenYu网关从设计底层就有很好的基因:
- 内存抽象治理, 奠定了
高性能
,流量配置动态化
- SPI机制的插件化, 奠定了
热插拔, 易扩展
,可定制化
,丰富插件, 快速集成
- spring基础, 奠定了
丰富协议支持(Dubbo, Tas, SpringCloud, gRPC等)
,迭代升级快
- soul网关演进而来, 奠定了
高并发, 大规模场景锤炼
- 社区开放, 奠定了
开源共建, 包容万象
,快速升级迭代
- 等等. DDDD(懂得都懂)
学习shenyu
自加入社区以来, 已经够卷的我还是菜, 真的就是个卷心菜
. 原谅我虽然看过不少源码, 很多没有看进去, 也很多没有加入社区.
首先了解了整体架构
首先在功能架构上已经有了很详细的两个很详尽的图了, 就目前我自己的理解画了一个实现依赖相关的草图. 可能不完善, 不正确, 待指正和学习后改正.
Reactor响应式编程学习
太菜不可怕, 怕的是你不够卷.
由于之前很少使用Reactor开发, 所以要想看源码或者仅是学习博客和ShenYu的文档都需要搞清楚这个响应式编程.
先来个传送门: Reactor3
对于Java开发者来说, 多线程真的是一把双刃剑, 用好了, 也有风险. 正如<Java编程思想>的Bruce Eckel大佬的四个格言:
- 不要这样做
- 没有什么是真的,一切可能都有问题
- 它起作用, 并不意味着它没有问题
- 你仍然必须理解它 以至于后来java一些版本也都在为了解决多线程的一些问题在做升级, Java 8 中进行改进:并行流和CompletableFutures.
所以在处理高并发使用线程的时候, 一定要考虑清楚, 尤其是向像ShenYu这样优秀的开源代码多学习.
抽象与设计
java开发人员就是将现实抽象为计算机里的类, 但是其实很多我们更多的是要抽象那些现实世界中没有的概念. 抽象不抽象, 这是个问题
. 不管是微服务也好, 还是开发的抽象也好, 都是在取舍.
开发人员的功力深厚与否的评判原则之一, 就是抽象设计的取舍上.
> • 插件:Apache ShenYu 使用插件化设计思想,实现插件的热插拔,极易扩展。内置丰富的插件,包 括 RPC, 代理、熔断和限流、权限认证、监控等等。
> • 选择器:每个插件可设置多个选择器,对流量进行初步筛选。
> • 规则:每个选择器可设置多个规则,对流量进行更细粒度的控制。
> • 数据库 UML 类图:
> • 设计详解:
> – 一个插件对应多个选择器,一个选择器对应多个规则。
> – 一个选择器对应多个匹配条件,一个规则对应多个匹配条件。
> – 每个规则在对应插件下,有不同的处理能力。
以上摘取自 Apache ShenYu中文文档
这只是基础的抽象, 更重要的是根据这些基础抽象进行的设计, 设计模式的使用是源码中的一大亮点.
常用的模板模式:
当然还有很多常用的: 工厂模式, 单例模式, 策略模式, 代理模式, 随处可见.
路漫漫其修远兮
在Apache ShenYu的学习中我还只是个婴儿, 希望自己能下定决心对他的源码能够通读一遍. 让自己快速提升.