模块启动加速
模块启动加速
模块启动加速的设计思路
模块启动加速的总体思路是:
- 基座提前启动好服务,这个只需要基座提前引入依赖即可
- 模块通过各种方式复用基座的服务,可以通过如下的方式复用基座服务包括,具体使用哪种方式需要根据实际情况分析,有疑问可以社区群里交流:
- 通过类 static 变量的共享达到复用
- 通过基座封装一些服务的接口 api,模块直接调用这些 api 来复用基座的服务。
- 通过注解的方式获取基座对象的代理,Koupleless 提供的 @AutowiredFromBase 、@AutowiredFromBiz、SpringServiceFinder 工具类 ,dubbo 或者 SOFARpc 的一些支持 jvm service 调用的注解。
- 通过跨模块查找对象的方式,直接获取基座对象,如 Koupleless 提供的 SpringBeanFinder 工具类
这里隐含了一个问题,那就是模块为了能顺利调用基座服务,需要使用一些模型类,所以模块一般都需要将该服务对应的依赖引入进来,这导致模块启动的时候会扫描到这些服务的配置,从而再次初始化这些服务,这会导致模块启动一些不需要的服务,并且启动变慢,内存消耗增加。所以要让模块启动加速实际上要完成三件事情:
- 基座提前启动好服务
- 模块禁止启动这些服务,这是本文要详细介绍的
- 模块复用基座服务
模块如何禁止启动部分服务
Koupleless 1.1.0 版本开始,提供了如下的配置能力:
koupleless.module.autoconfigure.exclude # 模块启动时不需要启动的服务 AutoConfiguration
koupleless.module.autoconfigure.include # 模块启动时需要启动的服务 AutoConfiguration,如果某个服务同时配置了 include 和 exclude,则会启动该服务
该配置可以在基座里配置,也可以在模块里配置。如果在基座里配置,则所有模块都会生效,如果在模块里配置,则只有该模块生效,并且模块里的配置会覆盖基座的配置。
benchmark
详细 benchmark 还待补充
Feedback
Was this page helpful?
Welcome propose feedback to community!
Welcome propose feedback to community, or improve this document directly.。
最后修改 2024.14.08: Merge pull request #59 from koupleless/youji-dev (8973b06)