乐趣区

关于后端:Apache-ShenYu-发布-250

前言

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

退出移动版