前言
时隔 4 个月,Apache ShenYu 迎来 2.5.0 的大版本,本次版本内容,共有 300 + 的 pull Request,60 + 的贡献者参加提交,88000 + 的增加或者批改的代码行数,该版本优化许多内容,让咱们看下这个版本都做了什么。以下只是列举比拟重要的一些性能。
日志性能
- 新增对接阿里云 SLS 日志插件
具体应用参考:https://shenyu.apache.org/zh/…
- 新增对接 Elastic Search 日志插件
具体应用参考:https://shenyu.apache.org/zh/…
- 新增对接 Apache RocketMQ 日志插件
具体应用参考:https://shenyu.apache.org/zh/…
- 新增对接 Apache Kafka 日志插件
具体应用参考:https://shenyu.apache.org/zh/…
新性能
新增 mock 插件。
为申请指定响应状态码和响应体不便进行测试。
反对设置申请的响应状态码和响应体。
反对配置 ${int|min-max}
, ${double|min-max|format}
, ${email}
, ${phone}
, ${zh|min-max}
, ${list|[arg1,arg2...]}
, ${array|item|length}
等占位符主动生成数据。
具体应用参考:https://shenyu.apache.org/zh/…
用户也能够自定义开发其余占位符:
具体开发:https://shenyu.apache.org/zh/…
response 插件中自定义输入后果
ShenYu 代码 :
@Bean
public ShenyuPlugin responsePlugin(final ObjectProvider<List<MessageWriter>> httpWriter) {Map<String, MessageWriter> writerMap = new LinkedHashMap<>();
List<MessageWriter> writerList = httpWriter.getIfAvailable(ArrayList::new);
for (MessageWriter writer : writerList) {List<String> supportTypes = writer.supportTypes();
for (String type : supportTypes) {writerMap.put(type, writer);
}
}
return new ResponsePlugin(writerMap);
}
用户自定实现:rg.apache.shenyu.plugin.response.strategy.MessageWriter
/**
* The interface Message writer.
*/
public interface MessageWriter {
/**
* Write with exchange and shenyu plugin chain.
*
* @param exchange exchange the current server exchange
* @param chain provides a way to delegate to the next filter
* @return {@code Mono<Void>} to indicate when request processing is complete
*/
Mono<Void> writeWith(ServerWebExchange exchange, ShenyuPluginChain chain);
/**
* Support type list.
*
* @return the list
*/
List<String> supportTypes();}
注册核心
ShenYu 的注册核心的目标是将网关的实例裸露进来, 以便反对 ShenYu 的集群性能。能够应用 shenyu-nginx 我的项目,也能够对接其余的负载平衡服务。
ShenYu-Nginx:https://github.com/apache/she…
新增 Nacos 的反对
应用:在网关 bootstarp 的 yaml 新增如下配置:
shenyu :
instance:
enabled: true // 设置 true 示意关上
registerType: nacos // 类型为 nacos
serverLists: localhost:8848
props:
新增 Consul 的反对
应用:在网关 bootstarp 的 yaml 新增如下配置:
shenyu :
instance:
enabled: true // 设置 true 示意关上
registerType: consul // 类型为 consul
serverLists: localhost:2379
props:
性能优化
- 降级 SpringBoot 到 2.6.8, 同时将 Reactor-netty 降级到 1.0.19
-
网关自定义 Netty 全量参数配置。满足用户的个性化配置
具体能够参考:https://shenyu.apache.org/zh/…
新增匹配缓存策略。流量匹配效率为 O(1)
。
如何应用? 在网关的 yaml 文件中进行配置:
shenyu:
matchCache:
enabled: true // 设置为 true 开启
maxFreeMemory: 256 # // 内存大小 单位 M
新增自定义线共享线程池。
如何应用? 在网关的 yaml 文件中进行配置:
shenyu:
sharedPool:
enable: true
prefix: "shenyu-shared"
corePoolSize: 200
maximumPoolSize: 2000
keepAliveTime: 60000
maxWorkQueueMemory: 1073741824 # 1GB
maxFreeMemory: 268435456 # 256MB
原理:自定义 shenyu 线程池,重写队列等等。具体能够查看如下代码:
管控平台
- 数据存储新增反对 oracle 数据库。
- 新增 API 文档治理性能。
- ShenYu Admin 治理控制台新增日志记录。
- 更多 ….
重构
- 重构 spring cloud 插件负载平衡。
- 重构 IpUtils 获取 ip 逻辑。
- Zookeeper 客户端替换成 Apache Curator。
- 重构 ShenYu Java Client 注册逻辑。
- 更多 ….
BugFix
- 修复 divide 插件空指针异样.
- 修复 body 体过大的异样。
- 修复 Java 客户端注册,循环谬误。
- 修复 Grpc 客户端注册谬误。
- 修复 加载本地插件失败的问题。
- 修复 Consul 注册只注册 1 个元数据的问题。
- 修复 应用 Websocket 同步数据时候的 CSRF 攻打。
- 修复 Admin pg 脚本谬误。
- 更多 ….
贡献者
特别感谢对 2.5.0 的反对的贡献者,排名不分程序。
dragon-zhang,renzhuyan,moremind,xiaoyu,likeguo,qinghai777,Kevin,
Qicz,,yunlongn,lianjunwei,zhengpeng,Han,weihubeats,Zihao,
DamonXue(Fibonacci),Luke.Z,ShawnSiao,sunshujie1990,Codd,dayu,
LiuTianyou,PJ,Sixh-PrFor,ChineseTony,chuang,erdengk,hutaishi,impactCn,
Jiageng,lahmxu,qifanyyy,Shawn,SongTao,zouchangfu,damonxue,Kunshuai,
mango,nuo-promise,Salted,Seth,SongTaoZhuang,wklong,AhahaGe,Bigbang,
Chencheng,Dongx,Ethan,haibo.duan,Haitao,huanccwang,jerbo99,Lidyaqf
Liming,midnight2104,Nick-fengzl,ningminglong,Rubén,Shuaiqi,vijay
wjlonger,Zhang,zhc,Zhiqiang,ZZQ
对于 Apache ShenYu
Apache ShenYu 一款应用 Java Reactor 开发的响应式 API 网关。以其高性能,动静灵便的流量管控,热插拔,易部署等个性,开箱即用为用户提供整套全生命周期的 API 网关,蕴含 API 注册、服务代理、协定转换与 API 治理等性能。于 2022 年 7 月毕业成为 Apache 顶级我的项目。