前言

时隔 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顶级我的项目。