网关之大禹治水-Apache ShenYu

535 阅读4分钟

我正在参与掘金创作者训练营第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

自加入社区以来, 已经够卷的我还是菜, 真的就是个卷心菜. 原谅我虽然看过不少源码, 很多没有看进去, 也很多没有加入社区.

image.png image.png

首先了解了整体架构

首先在功能架构上已经有了很详细的两个很详尽的图了, 就目前我自己的理解画了一个实现依赖相关的草图. 可能不完善, 不正确, 待指正和学习后改正. image.png

Reactor响应式编程学习

太菜不可怕, 怕的是你不够卷. 由于之前很少使用Reactor开发, 所以要想看源码或者仅是学习博客和ShenYu的文档都需要搞清楚这个响应式编程.

先来个传送门: Reactor3

对于Java开发者来说, 多线程真的是一把双刃剑, 用好了, 也有风险. 正如<Java编程思想>的Bruce Eckel大佬的四个格言:

  • 不要这样做
  • 没有什么是真的,一切可能都有问题
  • 它起作用, 并不意味着它没有问题
  • 你仍然必须理解它 以至于后来java一些版本也都在为了解决多线程的一些问题在做升级, Java 8 中进行改进:并行流和CompletableFutures.

所以在处理高并发使用线程的时候, 一定要考虑清楚, 尤其是向像ShenYu这样优秀的开源代码多学习.

抽象与设计

java开发人员就是将现实抽象为计算机里的类, 但是其实很多我们更多的是要抽象那些现实世界中没有的概念. 抽象不抽象, 这是个问题. 不管是微服务也好, 还是开发的抽象也好, 都是在取舍.

开发人员的功力深厚与否的评判原则之一, 就是抽象设计的取舍上.

> • 插件:Apache ShenYu 使用插件化设计思想,实现插件的热插拔,极易扩展。内置丰富的插件,包 括 RPC, 代理、熔断和限流、权限认证、监控等等。 
> • 选择器:每个插件可设置多个选择器,对流量进行初步筛选。 
> • 规则:每个选择器可设置多个规则,对流量进行更细粒度的控制。 
> • 数据库 UML 类图: 
> • 设计详解: 
>    – 一个插件对应多个选择器,一个选择器对应多个规则。 
>    – 一个选择器对应多个匹配条件,一个规则对应多个匹配条件。 
>   – 每个规则在对应插件下,有不同的处理能力。

以上摘取自 Apache ShenYu中文文档

这只是基础的抽象, 更重要的是根据这些基础抽象进行的设计, 设计模式的使用是源码中的一大亮点.

常用的模板模式: image.png

当然还有很多常用的: 工厂模式, 单例模式, 策略模式, 代理模式, 随处可见.

路漫漫其修远兮

在Apache ShenYu的学习中我还只是个婴儿, 希望自己能下定决心对他的源码能够通读一遍. 让自己快速提升.