今日分享丨浅谈iGIX并行启动

2024-08-21 18:52

本文主要是介绍今日分享丨浅谈iGIX并行启动,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.概述

在Java生态里,有很多系统都是基于Spring Framework、Spring Boot来开发。Spring Boot 是一个基于 Spring 框架的快速开发框架,Spirng Boot 本身并不提供 Spring 框架的核心特性以及扩展功能,只是用于快速、敏捷地开发新一代基于 Spring 框架的应用程序。

Spring Boot 以约定大于配置的核心思想,默认帮我们进行了很多设置,自动装配了Bean几乎可以零配置的供我们开箱即用。所以在Spring Boot的启动过程中Bean的装配是一个最主要的过程,从而使得Spring Boot应用的启动速度和Bean的数量,Bean初始化方式等成正相关。当一个大型Spring Boot应用包含了很多Bean的使用,那么应用的启动速度就会受到这些Bean初始化的严重影响。

2.iGIX并行启动

iGIX基于Spring Boot开发,Spring Boot启动过程本身是单线程的,应用启动过程中所有Bean的初始化工作全部串行执行。但从实际Bean依赖考虑,并非系统里所有的Bean之间都有相互依赖,而这些不相互依赖的Bean在启动阶段完全没有必要串行启动浪费等待时间。因此我们借助iGIX里SU模块隔离的方式,在Spring Boot启动过程中把不同SU模块Bean创建变成基于多线程机制的并行初始化,这样就可以省去非相互依赖Bean初始化的等待时间,充分利用多核CPU的性能,大大提升启动速度。

3.并行启动原理

3.1 Spring Bean加载

在说Bean加载的生命周期时,需要先说Spring Boot启动时的几个重要对象:

1. SpringApplication: Spring Boot核心启动类

2. ApplicationContext:Spring Boot应用程上下文

3. LaunchedURLClassLoader: Spring Boot类加载器

Spring Boot启动通过SpringApplication.run方法来启动应用程序,然后通过refreshContext()来通知ApplicationContext来refresh()。在refrsh里,ApplicationContext就完成了Bean生命周期的创建过程,包括:BeanFactory注册、BeanFactory创建前后处理器注册和触发、Bean创建前后处理的注册、Bean的创建等等过程。整个Spring Boot启动最耗时的部分也就是在整个Application的Context里。

3.2 iGIX并行启动Bean加载

由3.1我们知道Bean的初始化都是在ApplicationContext的refresh里完成,并且Spring整个过程都是单线程处理,那只要把不同模块的划分为不同的ApplicationContext,在多线程里完成refresh过程即可实现并行加载的过程。按照这个思路,iGIX通过以下两部完成了模块见的并行启动:

1. 通过自定义的ApplicaitonContext去维护不同模块的应用程序上下文和Bean容器,隔离了不同模块的Bean容器,这样保证了不同模块可以独立线程启动。

2.通过自定义的ClassLoader来统一持有了系统里的所有的Class,保证了系统里Class稳定性,在各个Bean容器共享。

通过以上方式,iGIX的启动速度相比Spring Boot原生的启动速度有了40%-50%的性能提升

同时也兼顾的Spring Boot本身的开发模式,对现有代码的改动侵入性降到了最低。


写在最后,欢迎大家下载我们的inBuilder低代码平台开源社区版,可免费下载使用,加入我们,开启开发体验之旅!

这篇关于今日分享丨浅谈iGIX并行启动的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1093993

相关文章

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

linux进程D状态的解决思路分享

《linux进程D状态的解决思路分享》在Linux系统中,进程在内核模式下等待I/O完成时会进入不间断睡眠状态(D状态),这种状态下,进程无法通过普通方式被杀死,本文通过实验模拟了这种状态,并分析了如... 目录1. 问题描述2. 问题分析3. 实验模拟3.1 使用losetup创建一个卷作为pv的磁盘3.

MySQL8.2.0安装教程分享

《MySQL8.2.0安装教程分享》这篇文章详细介绍了如何在Windows系统上安装MySQL数据库软件,包括下载、安装、配置和设置环境变量的步骤... 目录mysql的安装图文1.python访问网址2javascript.点击3.进入Downloads向下滑动4.选择Community Server5.

Windows设置nginx启动端口的方法

《Windows设置nginx启动端口的方法》在服务器配置与开发过程中,nginx作为一款高效的HTTP和反向代理服务器,被广泛应用,而在Windows系统中,合理设置nginx的启动端口,是确保其正... 目录一、为什么要设置 nginx 启动端口二、设置步骤三、常见问题及解决一、为什么要设置 nginx

springboot启动流程过程

《springboot启动流程过程》SpringBoot简化了Spring框架的使用,通过创建`SpringApplication`对象,判断应用类型并设置初始化器和监听器,在`run`方法中,读取配... 目录springboot启动流程springboot程序启动入口1.创建SpringApplicat

树莓派启动python的实现方法

《树莓派启动python的实现方法》本文主要介绍了树莓派启动python的实现方法,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、RASPBerry系统设置二、使用sandroidsh连接上开发板Raspberry Pi三、运

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具

10个Python自动化办公的脚本分享

《10个Python自动化办公的脚本分享》在日常办公中,我们常常会被繁琐、重复的任务占据大量时间,本文为大家分享了10个实用的Python自动化办公案例及源码,希望对大家有所帮助... 目录1. 批量处理 Excel 文件2. 自动发送邮件3. 批量重命名文件4. 数据清洗5. 生成 PPT6. 自动化测试

10个Python Excel自动化脚本分享

《10个PythonExcel自动化脚本分享》在数据处理和分析的过程中,Excel文件是我们日常工作中常见的格式,本文将分享10个实用的Excel自动化脚本,希望可以帮助大家更轻松地掌握这些技能... 目录1. Excel单元格批量填充2. 设置行高与列宽3. 根据条件删除行4. 创建新的Excel工作表5

Redis多种内存淘汰策略及配置技巧分享

《Redis多种内存淘汰策略及配置技巧分享》本文介绍了Redis内存满时的淘汰机制,包括内存淘汰机制的概念,Redis提供的8种淘汰策略(如noeviction、volatile-lru等)及其适用场... 目录前言一、什么是 Redis 的内存淘汰机制?二、Redis 内存淘汰策略1. pythonnoe