What's New In LiteFlow v2.11.4?
# 介绍
2.11.4经历了BETA1,BETA2,BETA3版本之后,正式版发布!
2.11.4总共有18个issue的更新,绝大多数为增强类issue。在这个版本中,我们优化了底层,着重优化了性能。也提供了一些小特性的升级。
强烈建议还在用2.11.3版本的同学进行升级。
接下来挑几个更新的增强来详细说下。
# 重写了声明式的部分
此增强issue困扰我半个多月,一直以来,LiteFlow声明式的底层代码比较混乱。不太好阅读,而且始终会在一些边缘场景莫名其妙的出问题。我一直想对其进行重写,这个版本,我阅读了大量了spring bean构造的底层代码,终于在底层实现了更加优化的改造。改造之后的声明式底层代码更加合理,结构层次也更加清晰,应该会摆脱一些边缘场景的问题。
改造之后的使用方式同之前一致,用户并不会感知到。
只是为了说明下,我们对底层代码是有追求的,并会为了追去极致的代码优雅而去不停努力。
希望你们去使用LiteFlow,因为LF正在变得更强大。
# 解决了并行线程池的性能问题
源于社区的小伙伴在落地LF时发现,第一次请求会比后面的请求慢上一些。社区小伙伴也进行排查,发现LF是第一次请求时去初始化并行线程池,并报上了issue。
这里确实是之前的版本没考虑周全,这一次,我们修复了这个问题。之后所有的线程池的初始化全都在启动时进行,包括用户自定义的线程池,也是如此。
# 并行线程池隔离BUG的修复
在2.11.1版本中曾经推出了并行线程池的隔离特性,旨在对一些并行分支非常多的进行线程池的隔离,以达到优化性能的目的,没想到这个特性一直存在BUG。这次我们也深度进行了排查,并修复了这个问题。
# 增加映射关键字SER和PAR
曾经有一个issue我还记得,说是LF中的THEN和WHEN是表示串行和并行的意思,但是关键字意义却不精准。
虽然我承认THEN和WHEN表示串行和并行的确有些牵强,但是LF用户一直这么用,突然改变最主要的关键字也不太好。
所以这次新推出了SER
和PAR
关键字,等同于THEN
和WHEN
。当然继续使用THEN
和WHEN
也是可以的。
# CmpStep中加入startTime和endTime
以前的CmpStep提供了耗时,但是没有组件的执行时间参数,这次提供了startTime和EndTime。
# 加入了快速解析的参数
这个增强,也是源于社区内的一位落地的小伙伴,他和我说项目内有几万的流程。启动耗时非常久。
详细分析原因后,发现是LF的CopyOnWriteHashMap
比较慢的缘故,当初用这个是为了平滑更新的因素。
所以,2.11.4版本推出了liteflow.fast-load
参数,当这个参数为true时。那么启动解析的速度回提升4到5倍。
我也进行了测试,1w条流程(每个流程均有14个组件)耗时3秒,这个解析是线性的。所以在配置了这个参数后,解析速度还是可以接受的。
但是我并不推荐所有的人把快速load模式打开,因为快速load模式牺牲了热更新时的平滑性。换句话说就是,在正常模式下,如果当你热更新时正好有正在执行的流程,那么正在执行的流程是会用老的链路的,只有下一次才会用最新的链路。如果你打开了快速load模式,那么在热更新时,正好在执行过程中的流程有可能前半部分是老的流程,而后半部分有可能读到新的流程。这样就造成了不一致了。
当然这种场景是非常极端的场景,在普通的场景中,可能根本也不需要保持热更新时的平滑性。所以fast-load模式是有代价的。鱼和熊掌不可兼得。看项目要求了。
# Nacos配置模式新增对阿里云MSE的鉴权方式
新版本的LiteFlow在Nacos层面可以支持阿里云的MSE鉴权方式了。
只需要这么配置就行了:
liteflow.rule-source-ext-data={\
"serverAddr":"127.0.0.1:8848",\
"dataId":"demo_rule",\
"group":"DEFAULT_GROUP",\
"namespace":"your namespace id",\
"accessKey":"xxxxxxxxxx",\
"secretKey":"xxxxxxxxxx"\
}