CN116909547B - 基于axi框架的业务功能在线开发方法、实现方法及设备 - Google Patents
基于axi框架的业务功能在线开发方法、实现方法及设备 Download PDFInfo
- Publication number
- CN116909547B CN116909547B CN202311180561.XA CN202311180561A CN116909547B CN 116909547 B CN116909547 B CN 116909547B CN 202311180561 A CN202311180561 A CN 202311180561A CN 116909547 B CN116909547 B CN 116909547B
- Authority
- CN
- China
- Prior art keywords
- plug
- service
- function
- thread
- service function
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 86
- 238000011161 development Methods 0.000 title claims abstract description 64
- 230000006870 function Effects 0.000 claims abstract description 321
- 238000006243 chemical reaction Methods 0.000 claims description 25
- 238000013507 mapping Methods 0.000 claims description 21
- 230000008569 process Effects 0.000 claims description 15
- 238000010276 construction Methods 0.000 claims description 5
- 238000011144 upstream manufacturing Methods 0.000 claims description 3
- 230000008520 organization Effects 0.000 claims description 2
- 238000004891 communication Methods 0.000 claims 1
- 230000008878 coupling Effects 0.000 abstract description 3
- 238000010168 coupling process Methods 0.000 abstract description 3
- 238000005859 coupling reaction Methods 0.000 abstract description 3
- 230000018109 developmental process Effects 0.000 description 50
- 238000010586 diagram Methods 0.000 description 7
- 239000000243 solution Substances 0.000 description 6
- 238000002347 injection Methods 0.000 description 5
- 239000007924 injection Substances 0.000 description 5
- 238000013461 design Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 238000012546 transfer Methods 0.000 description 4
- 238000007726 management method Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 235000020028 corn beer Nutrition 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 210000001503 joint Anatomy 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 230000001376 precipitating effect Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000001737 promoting effect Effects 0.000 description 1
- 238000013468 resource allocation Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 230000033772 system development Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/36—Software reuse
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
- G06F9/44526—Plug-ins; Add-ons
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44536—Selecting among different versions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及业务开发技术领域,公开了一种基于AXI框架的业务功能在线开发方法、实现方法、设备及存储介质。业务功能在线开发方法包括:主程序获取编写好的若干新的业务功能插件,并对业务功能插件中的若干业务函数进行初始化;主程序将各业务功能插件附加到AXI框架的模块工程中进行编译,得到新的业务模块;主程序中的主线程根据插件配置文件,加载业务模块,并将业务模块中的各业务功能插件中的业务函数注册到主线程的线程池中。本发明实现了基础架构与业务的松耦合架构,将框架复用转变为业务功能插件的复用,提高了技术架构的灵活性,降低了业务开发复杂度,提高了业务功能的开发及重构效率以及微服务业务编排的灵活性。
Description
技术领域
本发明涉及业务开发技术领域,尤其涉及一种基于AXI框架的业务功能在线开发方法、实现方法、设备及存储介质。
背景技术
在互联网业务发展过程中,业务***逐步由单体应用向互联网应用过渡,***架构由传统架构向微服务架构过渡,单体应用被分解为微小且相互联系的微服务。传统业务***主要采用多线程多模块的方式构建单体应用,通过消息队列进行业务分解,在微服务方面的成熟架构相对较少。
随着业务的不断发展,业务***越来越复杂,微服务的数量不断上升,微服务的划分随着业务的变化需要不断进行调整,而有些微服务则需要具有业务的水平拆分能力。水平拆分一般采用API网关的形式进行业务分发,不同的微服务相对独立,可以快速的进行水平分解和扩容,技术方案相对成熟。当业务***发展遇到瓶颈时,需要对现有的微服务粒度重新进行划分,而这需要大量的开发与测试工作,由于无法快速解决业务单元的拆分与合并,进而使得业务***重新部署效率较低下,存在巨大风险,模块重用性也不高,并且技术难度较高以及部署复杂。随着业务复杂性的增加,如何提高框架或模块的复用性,进而提高业务功能的开发及重构效率,提升微服务业务编排的灵活性,是目前需要亟待解决的问题。
发明内容
本发明的主要目的在于提供一种基于AXI框架的业务功能在线开发方法、实现方法、设备及存储介质,旨在解决现有在业务复杂性不断增加的情况下,如何提高框架或模块的复用性的技术问题。
本发明第一方面提供了一种基于AXI框架的业务功能在线开发方法,所述AXI框架包括多个AXI组件,各所述AXI组件之间通过内存或消息总线进行通信,所述AXI组件由若干模块组成,所述模块由若干插件组成,所述AXI组件为独立进程,所述模块为进程中的独立模块,所述插件为编译到所述模块中的独立业务代码,所述业务功能在线开发方法包括:
主程序获取编写好的若干新的业务功能插件,并对所述业务功能插件中的若干业务函数进行初始化;
所述主程序将各所述业务功能插件附加到所述AXI框架的模块工程中进行编译,得到新的业务模块;
所述主程序中的主线程根据插件配置文件,加载所述业务模块,并将所述业务模块中的各所述业务功能插件中的业务函数注册到所述主线程的线程池中。
可选的,在本发明第一方面的第一种实现方式中,所述插件配置文件包括插件资源名称、模块与插件配置、线程池配置、资源配置、业务功能配置。
可选的,在本发明第一方面的第二种实现方式中,所述插件资源名称用于唯一标识插件,通过所述插件资源名称访问对应插件,插件资源包含插件对象;所述模块与插件配置用于指定创建插件对象需要的模块或插件;所述线程池配置用于创建运行插件资源所需的线程池,线程池中每个线程维护插件资源中的一个插件对象;所述资源配置用于管理资源别名与插件资源名称的映射关系,上游插件通过资源别名调度访问下游插件;所述业务功能配置用于设置插件对象的个性化配置。
可选的,在本发明第一方面的第三种实现方式中,所述主程序中的主线程根据插件配置文件,加载所述业务模块,并将所述业务模块中的各所述业务功能插件的业务函数注册到所述主线程的线程池中包括:
所述主程序的主线程加载并解析所述插件配置文件;
所述主线程根据所述模块与插件配置,加载对应业务模块至内存中,其中,所述业务模块包括若干业务功能插件;
所述业务模块初始化一个全局变量以及一个全局的插件列表,通过所述全局变量的构造函数,将各所述业务功能插件的注册函数写入所述插件列表;
所述主线程获取所述业务模块的插件列表,根据所述线程池配置,创建新的线程池,并对所述线程池进行初始化;
所述主线程通过所述插件列表中的注册函数,在所述线程池中初始化插件对象并以资源名进行命名,其中,所述线程池包括多个线程,每个线程对应初始化一个插件对象;
所述主线程通过所述业务功能插件的构造函数,将所述业务功能插件中的业务函数注册到所述线程池的线程对象中。
可选的,在本发明第一方面的第四种实现方式中,所述业务功能在线开发方法还包括:
在注册所述业务函数后,所述主线程在所述线程池创建映射关系表,并保存所述线程池中各线程分别与所述业务功能插件、所述业务函数之间的映射关系,各所述线程分别保存一份所述映射关系表的副本。
可选的,在本发明第一方面的第五种实现方式中,所述业务功能在线开发方法还包括:
在注册所述业务函数后,所述主线程创建不同线程池中线程之间的数据转换函数,所述数据转换函数用于实现不同线程间业务函数的数据转换,以将多个线程池关联,所述数据转换函数的接口实现方式与对应业务函数保持一致。
本发明第二方面提供了一种基于AXI框架的业务功能在线开发方法开发的业务功能的实现方法,所述业务功能的实现方法包括:
主程序的主线程接收业务功能访问请求,并确定响应所述业务功能的业务功能插件,所述业务功能插件运行在第一线程池的线程下;
所述主线程通过所述第一线程池的线程,访问所述业务功能插件并执行所述业务功能插件的第一业务函数;
当所述第一业务函数需要调用第二业务函数时,所述主线程在所述第一线程池查找所述第二业务函数;
若所述第二业务函数已在所述第一线程池注册,则所述主线程通过所述第一业务函数调用并运行所述第二业务函数;
若所述第二业务函数未在所述第一线程池注册,则所述主线程根据全局映射关系表,查找所述第二业务函数注册的第二线程池;
当在所述第二线程池查找到所述第二业务函数时,所述主线程返回所述业务函数对应的线程间的数据转换函数;
所述主线程通过所述数据转换函数执行跨线程调用,并在所述第二线程池中调用并运行所述第二业务函数。
可选的,在本发明第二方面的一种实现方式中,所述业务功能的实现方法应用于基于AXI框架的微服务***,所述微服务***包括多个协议组件、多个业务组件以及多个节点组件,每一个业务组件对应一个微服务,所述协议组件、所述业务组件和所述节点组件均为可独立运行的进程,各组件之间通过内存或消息总线进行通信,所述业务组件包括多个独立的业务模块,所述业务模块包括多个业务功能插件。
本发明第三方面提供了一种计算机设备,包括:存储器和至少一个处理器,所述存储器中存储有指令;所述至少一个处理器调用所述存储器中的所述指令,以使得所述计算机设备执行上述的基于AXI框架的业务功能在线开发方法的各个步骤。
本发明的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述的基于AXI框架的业务功能在线开发方法的各个步骤。
相比现有技术,本发明的有益效果在于:本发明基于微服务架构,采用C++技术栈实现了一种基于AXI架构的业务功能开发与实现方法,通过标准化的业务功能开发与实现方法,实现了基础架构与业务的松耦合架构,将开发难度较高的部分在基础架构中实现,以配置化方式实现微服务架构的水平拆分与合并,将架构设计由开发阶段向部署阶段转移,由框架复用转变为业务功能插件的复用,提高了技术架构的灵活性,降低了***的开发复杂度,提高业务功能的开发及重构效率,也提升了微服务业务编排的灵活性。
附图说明
图1为本发明基于AXI框架的微服务***的一个实施例示意图;
图2为本发明基于AXI框架的业务功能在线开发方法的一个实施例流程示意图;
图3为本发明基于AXI框架的业务功能在线开发方法中将业务功能插件附加到所述AXI框架的模块工程的一个实施例流程示意图;
图4为本发明基于AXI框架的业务功能在线开发方法中业务函数注册流程的一实施例示意图;
图5为本发明基于AXI框架的业务功能在线开发方法开发的业务功能的实现方法一实施例的流程示意图;
图6为本发明基于AXI框架的业务功能在线开发方法开发的业务功能的实现方法中业务函数调度的一个实施例流程示意图;
图7为本发明计算机设备一个实施例的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地说明,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本申请中术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而包括一系列要素的过程、方法、物品或***不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或***所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或***中还存在另外的相同要素。在本申请中,“至少一个(项)”是指一个或者多个,“多个”是指两个或两个以上,“至少两个(项)”是指两个或三个及三个以上,“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系,例如,“A和/或B”可以表示:只存在A,只存在B以及同时存在A和B三种情况,其中A,B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指这些项中的任意组合。例如,a,b或c中的至少一项(个),可以表示:a,b,c,“a和b”,“a和c”,“b和c”,或“a和b和c”。
基于C/C++等技术栈研发的软件***,模块或插件一般通过动态库的方式进行加载,业务函数通过标准接口进行导出,业务实现方式决定了接口参数的定义。在业务发生变化时,需要重新定义接口参数,甚至需要对整个软件***进行调整;模块间关系独立,代码重用难度较大。在传统的开发方法中,通过对技术框架进行沉淀形成动态库,业务模块引用动态库进行框架复用。但对于新建***,即使进行了框架复用,也需要从头进行开发,构建线程池,加载模块和插件,业务变化时,需要对整个应用进行重构。因此,为解决现有上述技术问题,本发明采用C++技术栈实现了一种基于AXI架构的业务功能开发与实现方法,通过标准化的业务功能开发与实现方法,实现了基础架构与业务的松耦合架构,将开发难度较高的部分在基础架构中实现,以配置化方式实现微服务架构的水平拆分与合并,将架构设计由开发阶段向部署阶段转移,由框架复用转变为业务功能插件的复用。
本发明的AXI框架包括多个AXI组件,AXI组件采用AXI接口(Advanced eXtensibleInterface,高性能可扩展接口)设计。AXI接口是一种总线协议,该协议是一种面向高性能、高带宽、低延迟的片内总线,其地址/控制和数据相位是分离的,并且支持不对齐的数据传输。各AXI组件之间通过内存或消息总线进行通信,AXI组件由若干模块组成,模块由若干插件组成。
如图1所示的基于AXI框架的微服务***。在该微服务***中,AXI组件的类型划分为:协议组件、业务组件和节点组件。协议组件用于实现协议转换,实现协议标准化,同时支持快速开发新的业务功能,比如protobuf协议,json-rpc协议,KCXP协议等。业务组件用于实现业务***中的业务功能,可以是通用业务功能,也可以是个性化的业务功能。节点组件分别与业务***、业务组件对接。
本发明的AXI组件为独立进程,模块为进程中的独立模块,插件为编译到模块中的独立业务代码。在部署业务功能过程中,一般通过对插件按业务类型进行分组形成模块,通过配置文件进行业务编排,经主程序加载模块形成独立的业务组件。通过组合不同的插件形成不同的业务组件,进而对业务***提供个性化功能。
请参阅图2,本发明提供一种基于AXI框架的业务功能在线开发方法,本发明方法的一个实施例包括:
201、主程序获取编写好的若干新的业务功能插件,并对所述业务功能插件中的若干业务函数进行初始化;
202、所述主程序将各所述业务功能插件附加到所述AXI框架的模块工程中进行编译,得到新的业务模块;
203、所述主程序中的主线程根据插件配置文件,加载所述业务模块,并将所述业务模块中的各所述业务功能插件中的业务函数注册到所述主线程的线程池中。
本实施例中,主程序是指一个计算机程序中的核心代码,通常是整个程序的最高层次,也即主函数或入口函数。进程启动后首先会运行主程序,在主程序中做一些初始化操作等,然后再根据需要调用其它模块、函数或子程序。主程序作为整个程序的核心,承担着对整个程序的掌控和调度任务。
业务功能插件是AXI框架最小的编码组织单元,由同一类的多个函数组合为一类,提供高内聚的标准化服务。如http监听插件、mysql插件等。业务功能插件一般表现为一个cpp文件,或一组h和cpp文件。业务功能插件可通过编译到dll或so模块中,由主程序动态加载,或直接编译到主程序中。
如图3所示,本实施例采用C++等技术的全局变量加载特性、外部函数声明方式、函数动态注册方案,实现业务功能插件与模块工程的解耦合。业务模块初始化后,插件代码中声明的全局函数将自动初始化;初始化后的全局变量通过插件构造函数调用插件注入函数。标准导出函数和插件注入函数在模块工程中实现,插件通过外部函数声明的方式实现插件注入函数副本,与模块工程在代码管理上解耦合,插件注入函数只有一个,通过外部函数声明的方式实现,插件注入函数副本可以有若干个。业务功能插件通过插件注入函数将当前插件的插件对象的初始化函数注入到业务模块的插件回调函数列表中,并由标准导出函数输出到主程序。其中,线程池调用插件回调函数列表中的初始化函数可以创建插件对象。
本实施例中的业务功能插件包括插件类和插件注册宏两个部分,插件类继承自插件基类,用于支持插件的多态性;插件注册宏通过全局变量声明的方式,通过构造函数向模块注册用于实例化插件类的回调函数。业务函数的注册函数在插件基类中实现,用于通过注册函数将业务函数注册到主程序的线程池中。本实施例采用C++等技术的全局变量加载特性、外部函数声明方式、函数动态注册方案,实现插件与模块工程的解耦合。通过插件代码与模块工程的解耦合,实现一种新的业务功能开发与实现方法,插件代码无需修改即可在任意的模块中编译运行,模块工程仅用于提供一种插件的组合管理方式。
本实施例中,业务功能插件用于实现某个具体的业务功能,其为代码形式并预先由开发人员编写得到。主程序获取编写好的若干新的业务功能插件后,需要先业务功能插件中的若干业务函数进行初始化,以对业务函数的入参出参进行定义。在完成业务功能插件中业务函数的定义后,主程序还需进一步将各业务功能插件附加到AXI框架的模块工程中进行编译,进而得到新的业务模块。主程序中的主线程再根据插件配置文件,加载业务模块,并将业务模块中的各业务功能插件中的业务函数注册到主线程的线程池中。注册完成后,外部***即可访问新开发的业务功能执行相应业务。
在一实施例中,插件配置文件包括插件资源名称、模块与插件配置、线程池配置、资源配置、业务功能配置。
其中,插件资源名称用于唯一标识插件,通过插件资源名称可以访问对应插件,插件资源包含插件对象;模块与插件配置用于指定创建插件对象需要的模块或插件;线程池配置用于创建运行插件资源所需的线程池,线程池中每个线程维护插件资源中的一个插件对象;资源配置用于管理资源别名与插件资源名称的映射关系,上游插件通过资源别名调度访问下游插件,资源别名的设计方式实现了下游插件的可替换性,提升了业务功能开发的灵活性。
本发明结合多线程多模块的AXI技术框架,采用基于AXI框架的业务功能开发方法,将框架复用转变为业务功能插件复用,无需从头开发,将业务功能插件与模块、框架解耦合,通过对业务功能插件的不同组合快速实现架构重构,通过业务函数的动态注册和数据调度实现业务功能的快速编排,促使开发人员由***开发向业务开发转变,提升了新业务功能的开发效率与部署效率。
请参阅图4,图4是本发明基于AXI框架的业务功能在线开发方法中业务函数注册流程的一实施例示意图。本实施例中,上述步骤203进一步包括:
401、所述主程序的主线程加载并解析所述插件配置文件;
402、所述主线程根据所述模块与插件配置,加载对应业务模块至内存中,其中,所述业务模块包括若干业务功能插件;
403、所述业务模块初始化一个全局变量以及一个全局的插件列表,通过所述全局变量的构造函数,将各所述业务功能插件的注册函数写入所述插件列表;
404、所述主线程获取所述业务模块的插件列表,根据所述线程池配置,创建新的线程池,并对所述线程池进行初始化;
本实施例中,通过插件配置文件以配置化方式实现微服务架构的水平和垂直方向的拆分与合并。主线程通过解析得到的插件配置文件的规则加载各个业务模块,业务模块加载到内存后,先在业务模块中初始化一个全局变量和一个全局的插件列表。同时,全局变量将自动进行初始化,通过全局变量的构造函数,向业务模块的插件列表写入插件的注册函数。
405、所述主线程通过所述插件列表中的注册函数,在所述线程池中初始化插件对象并以资源名进行命名,其中,所述线程池包括多个线程,每个线程对应初始化一个插件对象;
406、所述主线程通过所述业务功能插件的构造函数,将所述业务功能插件中的业务函数注册到所述线程池的线程对象中。
主线程在业务模块加载结束后,获取插件列表并保存。在初始化线程池后,通过插件列表中的注册函数,初始化插件对象,并将插件对象以资源名进行命名。业务功能插件的构造函数在插件对象初始化时,将业务函数注册到线程池的线程对象中,同时将函数名保存到用于跨线程调用的函数列表中,并且在线程池中创建资源和函数的映射关系,以便后续业务功能插件可以通过资源名+函数名的方式进行调用。
在一实施例中,在注册业务函数后,主线程在线程池创建映射关系表,并保存线程池中各线程分别与业务功能插件、业务函数之间的映射关系,各线程分别保存一份映射关系表的副本。
本实施例中,业务模块的接口仅提供注册接口,业务接口则是下沉到业务功能插件中。一个业务模块可以包括多个业务功能插件,各插件间关系保持独立,通过业务函数注册与资源映射的方式建立各插件间的关系,由线程池统一调度,本实施例通过统一所有模块或插件的注册方法,从而将业务与模块的管理解耦合。
本实施例中,根据业务功能插件的线程池配置,对线程池进行编排,在线程池中对业务功能插件进行初始化,并创建事件队列用于线程间或线程池间的数据传递。线程池一般在主程序实现,模块或插件中可无需实现。线程池编排与管理在设计上具有业务无关性,具体业务由业务模块或业务功能插件实现,一个进程可包含多个线程池,多个业务模块或业务功能插件可独占线程池,也可共享线程池。在共享线程池的情况下,线程池内只能含一个主插件,可以包含多个子插件,当主插件调用子插件时,通过子插件业务函数的函数地址直接调用,性能与传统的函数调方式无差异。
参照图5,图5是本发明基于AXI框架的业务功能在线开发方法开发的业务功能的实现方法一实施例的流程示意图。本实施例中,业务功能的实现方法包括:
501、主程序的主线程接收业务功能访问请求,并确定响应业务功能的业务功能插件,业务功能插件运行在第一线程池的线程下;
502、主线程通过第一线程池的线程,访问业务功能插件并执行业务功能插件的第一业务函数;
503、当第一业务函数需要调用第二业务函数时,主线程在第一线程池查找第二业务函数;
504、若第二业务函数已在第一线程池注册,则主线程通过第一业务函数调用并运行第二业务函数;
505、若第二业务函数未在第一线程池注册,则主线程根据全局映射关系表,查找第二业务函数注册的第二线程池;
506、当在第二线程池查找到第二业务函数时,主线程返回业务函数对应的线程间的数据转换函数;
507、主线程通过数据转换函数执行跨线程调用,并在第二线程池中调用并运行第二业务函数。
本实施例中,基于上述实施例中的AXI框架开发新的业务功能,并在基于AXI框架的微服务***实现该新的业务功能。通过对模块进行不同的组合,在无需改动代码的情况下,可实现单体应用架构与微服务架构间的快速拆分与合并。采用基于AXI架构的业务功能开发与实现方法,将框架复用转变为业务插件复用,无需从头开发,将插件与模块、框架解耦合,通过对业务插件的不同组合快速实现架构重构,通过业务函数的动态注册和数据调度实现业务功能的快速编排。
本实施例中,在进行业务函数注册时,构建全局映射关系表用于保存每一线程池中各线程分别与各业务功能插件、各业务函数之间的映射关系。此外,为便于不同类型业务函数之间的数据调度,主线程还创建不同线程池中线程之间的数据转换函数,数据转换函数用于实现不同线程间业务函数的数据转换,以将多个线程池关联,数据转换函数的接口实现方式与对应业务函数保持一致。
如图6所示的业务函数调度示意图。本实施例中,主线程创建线程间的数据转换函数,将多个线程池关联起来,线程间的数据转换函数是一种线程间的函数映射,其接口实现方式与插件业务函数保持一致。业务功能插件1和业务功能插件2分别运行在线程池1、2的线程下。当业务函数A需要调用业务函数B时,首先在当前业务功能插件1对应线程池1中查找业务函数B,如果找到则直接调用;如果未找到,则在全局映射关系表中查找,确定业务函数B注册的线程池,当在线程池2中查找到业务函数B时,返回业务函数B对应的线程间的数据转换函数,业务函数A调用数据转换函数,数据转换函数执行跨线程调用,再在线程池2中调用业务函数B并运行。通过线程间的数据转换函数,业务函数无需进行异步线程开发,仅需采用同步方式编写业务函数,即可通过配置实现多线程池的架构,简化开发复杂度。
图7是本发明实施例提供的一种计算机设备的结构示意图,该计算机设备500可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(centralprocessing units,CPU)510(例如,一个或一个以上处理器)和存储器520,一个或一个以上存储应用程序533或数据532的存储介质530(例如一个或一个以上海量存储设备)。其中,存储器520和存储介质530可以是短暂存储或持久存储。存储在存储介质530的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对计算机设备500中的一系列指令操作。更进一步地,处理器510可以设置为与存储介质530通信,在计算机设备500上执行存储介质530中的一系列指令操作。
计算机设备500还可以包括一个或一个以上电源540,一个或一个以上有线或无线网络接口550,一个或一个以上输入输出接口560,和/或,一个或一个以上操作***531,例如Windows Serve,Mac OS X,Unix,Linux,FreeBSD等等。本领域技术人员可以理解,图7示出的计算机设备结构并不构成对计算机设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
本发明还提供一种计算机设备,所述计算机设备包括存储器和处理器,存储器中存储有计算机可读指令,计算机可读指令被处理器执行时,使得处理器执行上述各实施例中的基于AXI框架的业务功能在线开发方法的步骤。本发明还提供一种计算机可读存储介质,该计算机可读存储介质可以为非易失性计算机可读存储介质,该计算机可读存储介质也可以为易失性计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令在计算机上运行时,使得计算机执行基于AXI框架的业务功能在线开发方法的步骤。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的***,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read-only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (5)
1.一种基于AXI框架的业务功能在线开发方法开发的业务功能的实现方法,其特征在于,所述业务功能的实现方法包括:
主程序的主线程接收业务功能访问请求,并确定响应所述业务功能的业务功能插件,所述业务功能插件运行在第一线程池的线程下;
所述主线程通过所述第一线程池的线程,访问所述业务功能插件并执行所述业务功能插件的第一业务函数;
当所述第一业务函数需要调用第二业务函数时,所述主线程在所述第一线程池查找所述第二业务函数;
若所述第二业务函数已在所述第一线程池注册,则所述主线程通过所述第一业务函数调用并运行所述第二业务函数;
若所述第二业务函数未在所述第一线程池注册,则所述主线程根据全局映射关系表,查找所述第二业务函数注册的第二线程池;
当在所述第二线程池查找到所述第二业务函数时,所述主线程返回所述第二业务函数对应的线程间的数据转换函数;
所述主线程通过所述数据转换函数执行跨线程调用,并在所述第二线程池中调用并运行所述第二业务函数;
其中,所述AXI框架包括多个AXI组件,各所述AXI组件之间通过内存或消息总线进行通信,所述AXI组件由若干模块组成,所述模块由若干插件组成,所述AXI组件为独立进程,所述模块为进程中的独立模块,所述插件为编译到所述模块中的独立业务代码;
其中,所述业务功能在线开发方法包括:
主程序获取编写好的若干新的业务功能插件,并对所述业务功能插件中的若干业务函数进行初始化,所述业务功能插件为所述AXI框架最小的编码组织单元且由同一类的多个函数组合为一类;
所述主程序将各所述业务功能插件附加到所述AXI框架的模块工程中进行编译,得到新的业务模块;
所述主程序的主线程加载并解析插件配置文件,所述插件配置文件包括插件资源名称、模块与插件配置、线程池配置、资源配置、业务功能配置,所述插件资源名称用于唯一标识插件,通过所述插件资源名称访问对应插件,插件资源包含插件对象;所述模块与插件配置用于指定创建插件对象需要的模块或插件;所述线程池配置用于创建运行插件资源所需的线程池,线程池中每个线程维护插件资源中的一个插件对象;所述资源配置用于管理资源别名与插件资源名称的映射关系,上游插件通过资源别名调度访问下游插件;所述业务功能配置用于设置插件对象的个性化配置;
所述主线程根据模块与插件配置,加载对应业务模块至内存中,其中,所述业务模块包括若干业务功能插件;
所述业务模块初始化一个全局变量以及一个全局的插件列表,通过所述全局变量的构造函数,将各所述业务功能插件的注册函数写入所述插件列表;
所述主线程获取所述业务模块的插件列表,根据线程池配置,创建新的线程池,并对所述线程池进行初始化;
所述主线程通过所述插件列表中的注册函数,在所述线程池中初始化插件对象并以资源名进行命名,其中,所述线程池包括多个线程,每个线程对应初始化一个插件对象;
所述主线程通过所述业务功能插件的构造函数,将所述业务功能插件中的业务函数注册到所述线程池的线程对象中;
所述主线程创建不同线程池中线程之间的数据转换函数,所述数据转换函数用于实现不同线程间业务函数的数据转换,以将多个线程池关联,所述数据转换函数的接口实现方式与对应业务函数保持一致。
2.根据权利要求1所述的业务功能的实现方法,其特征在于,所述业务功能的实现方法应用于基于AXI框架的微服务***,所述微服务***包括多个协议组件、多个业务组件以及多个节点组件,每一个业务组件对应一个微服务,所述协议组件、所述业务组件和所述节点组件均为可独立运行的进程,各组件之间通过内存或消息总线进行通信,所述业务组件包括多个独立的业务模块,所述业务模块包括多个业务功能插件。
3.根据权利要求1所述的业务功能的实现方法,其特征在于,所述业务功能在线开发方法还包括:
在注册所述业务函数后,所述主线程在所述线程池创建映射关系表,并保存所述线程池中各线程分别与所述业务功能插件、所述业务函数之间的映射关系,各所述线程分别保存一份所述映射关系表的副本。
4.一种计算机设备,其特征在于,所述计算机设备包括:存储器和至少一个处理器,所述存储器中存储有指令;
所述至少一个处理器调用所述存储器中的所述指令,以使得所述计算机设备执行如权利要求1-3中任意一项所述的基于AXI框架的业务功能在线开发方法开发的业务功能的实现方法。
5.一种计算机可读存储介质,所述计算机可读存储介质上存储有指令,其特征在于,所述指令被处理器执行时实现如权利要求1-3中任一项所述的基于AXI框架的业务功能在线开发方法开发的业务功能的实现方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311180561.XA CN116909547B (zh) | 2023-09-13 | 2023-09-13 | 基于axi框架的业务功能在线开发方法、实现方法及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311180561.XA CN116909547B (zh) | 2023-09-13 | 2023-09-13 | 基于axi框架的业务功能在线开发方法、实现方法及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116909547A CN116909547A (zh) | 2023-10-20 |
CN116909547B true CN116909547B (zh) | 2023-12-15 |
Family
ID=88368164
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311180561.XA Active CN116909547B (zh) | 2023-09-13 | 2023-09-13 | 基于axi框架的业务功能在线开发方法、实现方法及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116909547B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111596969A (zh) * | 2020-05-09 | 2020-08-28 | 中国电子科技集团公司第二十八研究所 | 一种基于微内核加插件式的软件架构方法 |
CN112199105A (zh) * | 2020-10-15 | 2021-01-08 | 舟山网脉科技有限公司 | 功能组合式软件开发的方法、***、介质及电子设备 |
WO2022068475A1 (zh) * | 2020-09-30 | 2022-04-07 | 华为技术有限公司 | 插件运行***、插件运行方法以及电子设备 |
CN114489585A (zh) * | 2022-01-24 | 2022-05-13 | 厦门点触科技股份有限公司 | 一种治理功能插件化的微服务开发框架及实现方法 |
CN116089036A (zh) * | 2022-12-30 | 2023-05-09 | 长城证券股份有限公司 | 多线程多模块的业务流编排处理方法、设备及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11630678B2 (en) * | 2020-06-07 | 2023-04-18 | Asaf Ben Natan | Method for componentization of enterprise applications using plugins |
-
2023
- 2023-09-13 CN CN202311180561.XA patent/CN116909547B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111596969A (zh) * | 2020-05-09 | 2020-08-28 | 中国电子科技集团公司第二十八研究所 | 一种基于微内核加插件式的软件架构方法 |
WO2022068475A1 (zh) * | 2020-09-30 | 2022-04-07 | 华为技术有限公司 | 插件运行***、插件运行方法以及电子设备 |
CN112199105A (zh) * | 2020-10-15 | 2021-01-08 | 舟山网脉科技有限公司 | 功能组合式软件开发的方法、***、介质及电子设备 |
CN114489585A (zh) * | 2022-01-24 | 2022-05-13 | 厦门点触科技股份有限公司 | 一种治理功能插件化的微服务开发框架及实现方法 |
CN116089036A (zh) * | 2022-12-30 | 2023-05-09 | 长城证券股份有限公司 | 多线程多模块的业务流编排处理方法、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN116909547A (zh) | 2023-10-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9244662B2 (en) | Optimizing just-in-time compiling for a java application executing on a compute node | |
US8281311B2 (en) | Executing a distributed software application on a plurality of compute nodes according to a compilation history | |
US20090125611A1 (en) | Sharing loaded java classes among a plurality of nodes | |
Kamal et al. | FG-MPI: Fine-grain MPI for multicore and clusters | |
CN116089036B (zh) | 多线程多模块的业务流编排处理方法、设备及存储介质 | |
CN111443919B (zh) | Dsp多核处理器上sca核心框架的实现方法 | |
WO2023124543A1 (zh) | 用于大数据的数据处理方法和数据处理装置 | |
Alsaadi et al. | Radical-pilot and parsl: Executing heterogeneous workflows on HPC platforms | |
CN114911586A (zh) | 任务调度方法、装置及*** | |
CN116909547B (zh) | 基于axi框架的业务功能在线开发方法、实现方法及设备 | |
Merzky et al. | Application level interoperability between clouds and grids | |
CN108647087B (zh) | 实现php内核可重入的方法、装置、服务器和存储介质 | |
CN112052035B (zh) | 基于银行后线***的版本组包方法及装置 | |
Singh | Communication Coroutines For Parallel Program Using DW26010 Many Core Processor | |
Zhang et al. | Cost-efficient and latency-aware workflow scheduling policy for container-based systems | |
Xu et al. | MANA-2.0: A future-proof design for transparent checkpointing of MPI at scale | |
Fagg et al. | HARNESS fault tolerant MPI design, usage and performance issues | |
Takaso et al. | Component Framework for Multiprocessor Real-Time Operating Systems | |
Peng et al. | Extending openMP for the optimization of parallel component applications | |
CN117170738B (zh) | Python与Fortran互调用的方法、***、设备及存储介质 | |
CN115712524A (zh) | 数据恢复方法及装置 | |
Gebrewahid et al. | Managing dynamic reconfiguration for fault-tolerance on a manycore architecture | |
Ajit | COMMUNICATION COROUTINES FOR PARALLEL PROGRAM USING DW26010 MANY CORE PROCESSOR | |
Lima et al. | Online mapping of mpi-2 dynamic tasks to processes and threads | |
CN116841554A (zh) | 一种gnss增强服务平台构建和发布的集成方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |