「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战」
一、关于是什么,为什么
1.1 什么是Shenyu
Shenyu网关,原名soul网关,一个异步,高性能,跨语言,响应式,插件化的API网关,已经进入apache孵化器。
今年也在一番技术选型之后,将Shenyu网关作为了公司的业务网关,至于为什么选择它作为业务网关呢,我觉得原因有这几个
1.2 为什么是Shenyu
1.首先是性能,根据众多大佬的测试,Shenyu和SpringcloudGateWay的性能差距很小,甚至可能shenyu的性能更优,由于没有亲测过(以后弥补下),不好下很肯定的结论,但根据收集的信息和数据来看,性能可靠。
2.然后是插件化,shenyu有非常多的插件化组件,比如你需要限流,可以选择RateLimiter也可以用Sentinel,如果你需要鉴权,可以使用sing,token,awt中任何一种,也可以自己扩展开发。
3.再然后就是可视化界面,这个我个人认为比较重要,没有可视化界面对维护会造成比较大的困扰。
最后,综上所述,我们最终将Shenyu定为了公司的业务网关进行部署和二次开发。
关于介绍和选择原因差不多就这样,其他也不多说了,我们直接来看项目结构和源码,毕竟二开需要对项目很熟悉,而且大家使用上碰到问题也需要通过源码去分析解决。
ps:有问题可以向社区提issue,也可以自己提PR解决,欢迎参与到Shenyu中来!
二、项目结构
可以看到这个分包还是很多的,但是对于我们来说,最主要的是两个包,shenyu-admin(管理控制台)和shenyu-bootstrap(项目启动主包)
详细分包情况说明
## shenyu-admin :
这个包下面主要是插件和相关配置信息的管理后台的代码
部署时需要配置数据库,可以使用h2或者Mysql,存放了路由选择器,规则,元数据等信息
监听器:这里会监听各种注册类型的应用服务注册情况,然后变更数据库,完成变更界面展示用户的注册信息
## shenyu-bootstrap:
启动bootstrap整个网关应用的启动器
## shenyu-client:
支持SpringMvc,Dubbo,SpringCloud等注册的代码
这里主要和shenyu-spring-boot-starter利用Spring Factories进行了扩展
## shenyu-distuptor:
基于disruptor的封装
Disruptor是一个高性能的异步处理框架,一个轻量级的JMS,大家可以自行学习,后面也会给大家讲解下
## shenyu-register-center:
为shenyu-client提供的各种注册方式提供注入支持,目前支持Consul,etcd,http,nacos,zookeeper
## shenyu-common:
框架的通用类
## shenyu-dist:
构建项目
## shenyu-metrics:
prometheus实现的metrics,可以和自己搭建的grafana+prometheus结合搭建网关的监控平台,也可以扩展业务监控,比如成功请求数,接口的rt等
## shenyu-plugin
shenyu支持的插件集合,这里可以进行扩展
## shenyu-spi
定义Shenyu的spi
## shenyu-spring-boot-starter:
支持SpringBootStarter
## shenyu-sync-data-center
提供ZooKeeper,HTTP,WebSocket,Nacos的方式同步Rule,Selector等数据数据
## shenyu-examples:
RPC示例项目
## shenyu-web:
包括请求路由转发,过滤器和一些本地数据处理的RestApi入口,主要入口是ShenyuWebHandler,大家看请求进入之后干了啥,可以从这里开始。
后面系列说明
网关主要是做流量的筛选和控制,Shenyu本身又是以插件化设计思想来做的,所以主要我们需要看下,接口是如何注册到网关,请求如何从网关进行筛选和处理,以及Shenyu的SPI和自定义插件开发。