跨服务调用时合并请求

已完成
对流程性能提升显著;

  • 流程用户插件中有大量用户查询,且每条数据都进行服务调用查询;
  • 将该类型的请求合并为一个远程请求统一处理;
  • 示例:com.lc.ibps.bpmn.plugin.task.userassign.plugin.UserQueryPlugin.filterUser(List<BpmIdentity>, List<BpmIdentity>)中调用com.lc.ibps.org.api.IPartyEntityService.trans(PartyEntityTransVo),有效减少网络消耗;
  • 合并处理后使用多线程并行计算用户数据,逻辑在com.lc.ibps.org.api.IPartyEntityService.trans(PartyEntityTransVo)中处理;

org.slf4j.Logger对象静态化

已完成
影响全平台日志输出性能,积少成多的瓶颈;

  • IBPS中大量使用org.slf4j.LoggerFactory.getLogger(getClass())获取日志对象并输出日志;
  • com.lc.ibps.base.framework.repository.AbstractRepository.get(PK)中日志对象创建耗时的影响尤为突出;
  • 将Logger操作对象静态化,如:private static final Logger LOGGER = LoggerFactory.getLogger(DataTemplateRepositoryImpl.class);,可减少方法执行时创建时间;

动态获取系统配置属性优化

已完成
影响全平台配置读取性能,积少成多的瓶颈;

  • 框架中频繁调用Environment.getProperty,导致累计耗时增加,对业务的影响直线上升,使用线程上下文隔离配置属性的获取,同一个线程中只从Environment中获取一次,之后都从线程上下文获取,从而减少Environment.getProperty的调用次数;
  • Environment.getProperty对功能的影响:所有业务功能,包括服务发现(eureka)、网关(zuul)、认证服务、业务服务;

JSON工具优化

已完成
影响流程、表单性能,有效提升性能;

  • JSON框架json-lib框架老旧、性能较低,因此需要替换该框架,将切换到Jackson
  • JSON框架对功能的影响:表单(所有功能都受影响)、流程(受影响功能:审批意见);

BeanUtils.copy调用优化

进行中…
平台级提升;

  • 缓存对象读取后全局调用BeanUtils.copy,导致很多不必要的损耗;
  • 将ObjectStream方式改为其Kryo方式复制;
  • 去掉只读场景的BeanUtils.copy调用;

Domain这层的原型对象创建过程优化

完成
平台级提升;

  • Domain这层大对象的创建耗时在150ms左右,再加上频繁调用导致累计耗时增加,对业务的影响直线上升,目前尝试修改创建方式;
  • 框架级问题,影响所有业务功能;
  • 优化方案:将Domain改为单例对象,内部参数改为形参传递;

流程定义JAXB优化

未开始

  • 流程定义中使用JAXB做xml与对象转换,效率有点低;
  • com.lc.ibps.bpmn.core.xml.BpmnXmlUtil.unmarshall

慢SQL优化

进行中…

  • 流程引擎慢SQL查找、分析、解决;

缓存设计优化

进行中…

  • 用户上下文缓存;完成
  • 表单定义计算结果缓存;完成
  • 数据字典缓存;完成
  • 菜单资源缓存;完成
  • 接口权限缓存;未开始
  • 持续中…

流程异步方案

进行中…
提升体验,并非性能解决方案;
Request存在序列化问题暂时无法实现一键重试

  • 流程切换使用异步接口;
  • 通过socket推送消息提示成功或失败;
  • 失败后在失败列表重试,重试时直接跳转到流程启动/审批页面并自动回填数据,手续操作由人工干预;
文档更新时间: 2021-04-22 14:15   作者:Eddy