CN115202668A - 一种面向服务编排的基于ast生成工作流服务的方法 - Google Patents
一种面向服务编排的基于ast生成工作流服务的方法 Download PDFInfo
- Publication number
- CN115202668A CN115202668A CN202210933203.0A CN202210933203A CN115202668A CN 115202668 A CN115202668 A CN 115202668A CN 202210933203 A CN202210933203 A CN 202210933203A CN 115202668 A CN115202668 A CN 115202668A
- Authority
- CN
- China
- Prior art keywords
- analysis
- service
- ast
- branch
- nodes
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- 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/34—Graphical or visual programming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本申请公开了一种面向服务编排的基于AST生成工作流服务的方法。本发明具体实现包括:管理人员通过系统中台以拖拽的方式组合原子服务,形成业务流程的状态语言节点;后端分析所述状态语言节点中的数据和逻辑,合并形成所需语言的AST树;添加固定的输入、输出逻辑;将AST树转化为对应语言的可读代码,通过该语言的通用编辑器/解释器将可读代码生成或执行流程服务;以HTTP服务的形式对外提供服务。本发明的可执行程序不依赖其他独立运行的组件,方便扩展;相较于传统方式,职责明确,占用资源少,冷启动速度快,云原生化。
Description
技术领域
本发明涉及计算机后端开发技术领域,特别提供一种面向服务编排、基于AST的、职责明确的工作流生成方法。
背景技术
随着计算机技术的不断发展,其在各个领域的应用范围越来越广。因此,技术人员需要根据不同的业务需求编写不同的业务代码。
传统的模式中,服务上线的流程繁琐,周期长,代码复用性差。在服务编排模式中,相关服务被分解成为单一功能的原子服务,每个服务都可以单独部署使用,通过不同的组织编排方式完成所需功能,以达到业务快速上线的目的。
目前市面上大多数服务编排的方案只能将流程转换为状态机节点集合并解释执行,对服务器配置要求高,花费时间长。如何实现资源占用小,适用场景广泛等问题是本领域技术人员关注的重点问题。
发明内容
本发明的目的在于提供一种面向服务编排的基于AST生成工作流服务的方法。
本发明技术方案如下:
管理人员通过系统中台以拖拽的方式组合原子服务,形成业务流程的状态语言节点;
后端分析所述状态语言节点中的数据和逻辑,合并形成所需语言的AST树;
向AST树中添加固定的输入、输出逻辑;
将AST树转化为对应语言的可读代码,通过该语言的通用编辑解释器将可读代码生成可执行流程服务;
以HTTP服务的形式对外提供服务。
进一步的,所述系统中台以拖拽的方式组合原子服务,原子服务可根据需求进行组合,该组合过程可视化,且业务流程的状态语言节点在拖拽完成后实时显示,管理人员可直接查看。
进一步的,所述原子服务是整套业务流程中最小的服务单位,其不可继续拆分,所述原子服务可独立完成某一项特定功能。
进一步的,所述状态语言节点包含顺序节点和分支节点,顺序节点能够调用相应的原子服务;所述的顺序节点是标记与任务顺序的任务节点。
进一步的,所述分析数据和逻辑的实现包含:资源管理、依赖分析、变量分析、代码填充。
所述资源管理表示每个资源ID对应标识一个原子服务,能与现有的已标识和管理的原子服务资源对接。
所述依赖分析包括:导入分析、初始化工作。
所述变量分析包括:路径分析、类型分析、分支分析。
所述代码填充通过遍历所述导入分析和所述初始化工作中生成的树,并添加至相关字段中以完成函数定义和数据定义,并通过所述分支分析中的分支进行遍历构建handler函数的主体。
进一步的,所述导入分析根据所述资源和资源内部的类型信息,遍历所有任务节点,并根据字段和类型名称生成对应的节点,最终构建成Import树;Import树的是导入分析的结果,作用是明确引入的语言模块或包。
所述初始化工作通过资源ID获知对应的原子服务调用类型和地址信息,并根据调用的信息生成对应的访问端对象实例的初始化语句节点,所有用到的初始化语句节点的集合形成Init树;所述的对象实例包括连接和编码解码能力;
进一步的,所述路径分析针对节点集合进行操作,对输入的节点集合进行深度优先遍历,保留树的原有结构,并在类型服务的支持下分析提取其中的变量路径信息和类型信息。所述类型服务存储有资源ID对应的原子服务输入输出的类型信息,并能够通过资源ID获取类型服务中存储的相关类型信息。
所述类型分析对强类型任务节点进行判断,通过类型服务,得到类型中包含的字段和类型信息,确认输入输出类型。
所述分支分析通过各状态语言节点之间的关系,递归分析得出分支内部的顺序关系和分支间的先后和嵌套关系,构建控制流。
进一步的,所述AST抽象语法树是编程语言源代码的抽象语法结构的树状表现形式,树上的每个节点都表示源代码中的一种结构。按照权利要求1所述,其特征在于,所述添加固定的输入、输出逻辑解析HTTP Body,写入JSON响应。
本发明的有益效果为:
1.本方法所得可执行程序本身无状态,只需能够访问日志等其他需要调用的服务,不依赖其他独立运行的组件,方便扩展;
2.相较于传统方式统一调度器的职责更明确,占用资源少,冷启动速度快,更加云原生,可以无缝接入serverless;
3.所述可执行程序是原子服务的工作,无需考虑数据库等问题,其组合的是逻辑,而非数据。
附图说明
图1为系统总体架构。
图2为工作流生成流程图。
图3为数据分析流程图。
具体实施方式
为使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,下面结合附图对本发明作进一步的说明。
本发明架构内容如图1所示,本发明的总体架构有系统中台、系统后端、客户端,其中,管理人员可操作系统中台,用户可操作客户端,以下为各部分具体功能:
(1)系统中台:系统中台提供可供管理人员可视化操作的服务组件,管理人员可在中台进行服务编排,查看并管理已有工作流。
工作流生成流程图如图2所示,具体包括以下步骤:
步骤1、管理人员根据本次业务流程通过拖拽组件的方式组合相关服务组件。
步骤2、系统根据编排内容,给出相应流程图与状态语言节点,其可根据需要进行调整
步骤3、管理人员确认该业务流程无误后将状态语言节点传入系统后端,在系统后端对状态语言节点完成处理后得到返回。
步骤4、管理人员在系统中台查看并管理目前存在的工作流。
(2)系统后端:系统后端分析状态语言节点中的数据和逻辑,合并形成所需语言的AST树,得到可执行代码进行编译后形成工作流以提供服务。
下面将结合具体实施事例和附图对本发明作进一步描述,以系统后端接收到前端传入的状态语言节点为例,后端创建工作流有以下步骤:
数据分析流程如图3所示,具体包括以下步骤:
步骤一:根据状态语言节点中所包含的信息名称集合到节点集合的映射关系Name→Node(以下说明将简称I),遍历所有任务节点下的Resource对象,进行依赖分析FDep-Analysis,并按照DepPkgPath字段和需要的类型名称DepTypeName生成对应节点InitNodes(公式1),完成依赖分析,最终得到Import树DepInfo,其中包含InitNodes和ImportSpecs(公式2)。
DepInfo=DepPkgPath+DepTypeName (1)
DepInfo=FDep-Analysis(I)→<DepID,<InitNodes,ImportSpecs>>
(2)
步骤二、根据映射关系I,对每个状态节点按路径深入遍历,提取指示输入输出状态的路径字符串,按“.”字符进行分割,形成层次并按照层次合并,完成路径分析FPath-Analysis,得到路径信息PathInfo,完成路径分析(公式3)。
PathInfo=FPath-Analysis(I) (3)
步骤三、根据映射关系I,对任务节点进行类型判断,从类型服务根据资源ID得到类型中包含的字段和类型信息,完成对每个路径字符串所指示的路径的类型分析操作FType-Analysis,确认输入输出类型TypeInfo,完成类型分析(公式4)。
TypeInfo=FType-Analysis(I) (4)
步骤四、根据步骤一和步骤二所得的路径信息PathInfo与类型信息TypeInfo,进行树合并操作FTree-Merge,得到所需数据VarInfo,完成数据分析(公式5)。
VarInfo=FTree-Merge(PathInfo,TypeInfo) (5)
步骤五、根据映射关系I,按深度优先方法遍历状态节点树,判断状态节点与状态节点所构成的分支间的顺序和嵌套关系,每当遇到分支就记录分支名称并创建检点数组[]Nodes,分支内部的状态节点不断追加到该状态节点数组中,递归形成控制流,完成分支分析FBranch-Analysis,最终得到分支信息BranchInfo,形成分支名称BranchName和节点数组[]Nodes的对应关系(公式6)。
BranchInfo=FBranch-Analysis(I)→<BranchName,[]Nodes>
步骤六、根据步骤五所得到的分支信息BranchInfo,对其进行分支填充操作FFill-Branch,得到AST的节点集合HandlerNodes(公式7),对节点Node使用语言标准库自带的Parse方法,得到AST节点集合(公式8),AST节点集合HandlerNodes中包含了固定的解析输入逻辑InputNodes和解析输出逻辑OutputNodes。
HandlerNodes=FFill-Branch(BranchInfo) (7)
FParse(Node)→NodesHandler Stats (8)
HandlerNodes=InputNodes+HandlerNodes+OutputNodes (9)
步骤七、根据步骤一所得依赖分析DepInfo、步骤六所得HandlerNodes以及提供服务化代码的固定绑定端口MainNodes,得到抽象语法树ASTFile(公式10)。
ASTFile=ImportSpecs+InitNodes+HandlerNodes+MainNodes (10)
步骤八、根据步骤七所得抽象语法树ASTFile,进行编译操作,得到可读代码Code(公式11);(公式12)
Code=FTransform(AstFile) (11)
DepFiles=ResService.FgetDepFile(DepID) (12)
步骤九、将可读代码Code和依赖文件DepFiles放入内有文件系统VFS中,得到本次服务所需工作流项目Project(公式13)。
Project==VFS(Code+DepFiles) (13)
步骤十、通过通用编译器Builder或解释器Interpreter生成或执行流程服务,最终以HTTP服务形式对外提供服务Service公式14),通过区块链执行引擎ChainBuilder,将项目写入合约(公式15)。
Service=[<Builder/Interpreter>](Project) (14)
Contract=<ChainBuilder>(Project) (15)
(3)客户端:客户端调用系统后端提供的HTTP服务,展示本次业务的产品信息,用户可在客户端对系统提供的服务进行直接操作。
本发明未尽事宜为公知技术。
上述实施例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人士能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明精神实质所作的等效变化或修饰,都应涵盖在本发明的保护范围之内。
Claims (10)
1.一种面向服务编排的基于AST生成工作流服务的方法,其特征在于,包括:
管理人员通过系统中台以拖拽的方式组合原子服务,形成业务流程的状态语言节点;
后端分析所述状态语言节点中的数据和逻辑,合并形成所需语言的AST树;
向AST树中添加固定的输入、输出逻辑;
将AST树转化为对应语言的可读代码,通过该语言的通用编辑解释器将可读代码生成可执行流程服务;
以HTTP服务的形式对外提供服务。
2.根据权利要求1所述的一种面向服务编排的基于AST生成工作流服务的方法,其特征在于系统中台以拖拽的方式组合原子服务,原子服务可根据需求进行组合,该组合过程可视化,且业务流程的状态语言节点在拖拽完成后实时显示,管理人员可直接查看。
3.根据权利要求1或2所述的一种面向服务编排的基于AST生成工作流服务的方法,其特征在于原子服务是整套业务流程中最小的服务单位,其不可继续拆分,所述原子服务可独立完成某一项特定功能。
4.根据权利要求3所述的一种面向服务编排的基于AST生成工作流服务的方法,其特征在于状态语言节点包含顺序节点和分支节点,顺序节点能够调用相应的原子服务;所述的顺序节点是标记与任务顺序的任务节点。
5.根据权利要求4所述的一种面向服务编排的基于AST生成工作流服务的方法,其特征在于分析数据和逻辑的实现包含:资源管理、依赖分析、变量分析、代码填充;
所述资源管理表示每个资源ID对应标识一个原子服务,能与现有的已标识和管理的原子服务资源对接;
所述依赖分析包括:导入分析、初始化工作;
所述变量分析包括:路径分析、类型分析、分支分析;
所述代码填充通过遍历所述导入分析和所述初始化工作中生成的树,并添加至相关字段中以完成函数定义和数据定义,并通过所述分支分析中的分支进行遍历构建handler函数的主体。
6.根据权利要求5所述的一种面向服务编排的基于AST生成工作流服务的方法,其特征在于所述依赖分析:
根据状态语言节点中所包含的信息名称集合到节点集合的映射关系Name→Node,即映射关系I,遍历所有任务节点下的Resource对象,进行依赖分析FDep-Analysis,并按照DepPkgPath字段和需要的类型名称DepTypeName生成对应节点InitNodes(公式1),完成依赖分析,最终得到Import树DepInfo,其中包含InitNodes和ImportSpecs(公式2);
DepInfo=DepPkgPath+DepTypeName (1)
DepInfo=FDep-Analysis(I)→<DepID,<InitNodes,ImportSpecs>> (2)。
7.根据权利要求5或6所述的一种面向服务编排的基于AST生成工作流服务的方法,其特征在于所述的路径分析:
根据映射关系I,对每个状态节点按路径深入遍历,提取指示输入输出状态的路径字符串,按“.”字符进行分割,形成层次并按照层次合并,完成路径分析FPath-Analysis,得到路径信息PathInfo,完成路径分析(公式3);
PathInfo=FPath-Analysis(I) (3)
根据映射关系I,对任务节点进行类型判断,从类型服务根据资源ID得到类型中包含的字段和类型信息,完成对每个路径字符串所指示的路径的类型分析操作FType-Analysis,确认输入输出类型TypeInfo,完成类型分析:
TypeInfo=FType-Analysis(I) (4)
根据得到的路径信息PathInfo与类型信息TypeInfo,进行树合并操作FTree-Merge,得到所需数据VarInfo,完成数据分析(公式5);
VarInfo=FTree-Merge(PathInfo,TypeInfo) (5)。
8.根据权利要求6所述的一种面向服务编排的基于AST生成工作流服务的方法,其特征在于所述的分支分析实现如下:
所述分支分析通过各状态语言节点之间的关系,递归分析得出分支内部的顺序关系和分支间的先后和嵌套关系,构建控制流;具体根据映射关系I,按深度优先方法遍历状态节点树,判断状态节点与状态节点所构成的分支间的顺序和嵌套关系,每当遇到分支就记录分支名称并创建检点数组[]Nodes,分支内部的状态节点不断追加到该状态节点数组中,递归形成控制流,完成分支分析FBranch-Analysis,最终得到分支信息BranchInfo,形成分支名称BranchName和节点数组[]Nodes的对应关系(公式6);
BranchInfo=FBranch-Analysis(I)→<BranchName,[]Nodes>。
9.根据权利要求8所述的一种面向服务编排的基于AST生成工作流服务的方法,其特征在于根据得到的分支信息BranchInfo,对其进行分支填充操作FFill-Branch,得到AST的节点集合HandlerNodes,对节点Node使用语言标准库自带的Parse方法,得到AST节点集合,AST节点集合HandlerNodes中包含了固定的解析输入逻辑InputNodes和解析输出逻辑OutputNodes;
HandlerNodes=FFill-Branch(BranchInfo) (7)
FParse(Node)→NodesHandler Stats (8)
HandlerNodes=InputNodes+HandlerNodes+OutputNodes (9)。
10.根据权利要求9所述的一种面向服务编排的基于AST生成工作流服务的方法,其特征在于根据依赖分析DepInfo、AST节点集合HandlerNodes以及提供服务化代码的固定绑定端口MainNodes,得到抽象语法树ASTFile(公式10);
ASTFile=ImportSpecs+InitNodes+HandlerNodes+MainNodes (10)
根据所得抽象语法树ASTFile进行编译操作,得到可读代码Code
Code=FTransform(AstFile) (11)
DepFiles=ResService.FgetDepFile(DepID) (12)
将可读代码Code和依赖文件DepFiles放入内有文件系统VFS中,得到本次服务所需工作流项目Project(公式13);
Project==VFS(Code+DepFiles) (13)
最后通过通用编译器Builder或解释器Interpreter生成或执行流程服务,最终以HTTP服务形式对外提供服务Service(公式14),通过区块链执行引擎ChainBuilder,将项目写入合约(公式15);
Service=[<Builder/Interpreter>](Project) (14)
Contract=<ChainBuilder>(Project) (15)。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210933203.0A CN115202668A (zh) | 2022-08-04 | 2022-08-04 | 一种面向服务编排的基于ast生成工作流服务的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210933203.0A CN115202668A (zh) | 2022-08-04 | 2022-08-04 | 一种面向服务编排的基于ast生成工作流服务的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115202668A true CN115202668A (zh) | 2022-10-18 |
Family
ID=83586448
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210933203.0A Pending CN115202668A (zh) | 2022-08-04 | 2022-08-04 | 一种面向服务编排的基于ast生成工作流服务的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115202668A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116028101A (zh) * | 2022-12-26 | 2023-04-28 | 郑州云智信安安全技术有限公司 | 基于组件特征类别编排调取的方法 |
CN117389569A (zh) * | 2023-10-26 | 2024-01-12 | 重庆猪哥亮科技有限责任公司 | 一种程序解释执行方法 |
-
2022
- 2022-08-04 CN CN202210933203.0A patent/CN115202668A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116028101A (zh) * | 2022-12-26 | 2023-04-28 | 郑州云智信安安全技术有限公司 | 基于组件特征类别编排调取的方法 |
CN117389569A (zh) * | 2023-10-26 | 2024-01-12 | 重庆猪哥亮科技有限责任公司 | 一种程序解释执行方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107273117B (zh) | 一种编程友好型的敏捷代码自动生成系统 | |
CN103164249B (zh) | 用于脚本语言编译器的扩展机制 | |
US9569288B2 (en) | Application pattern discovery | |
CN107291450B (zh) | 一种编程友好型的敏捷代码自动生成方法 | |
CN115202668A (zh) | 一种面向服务编排的基于ast生成工作流服务的方法 | |
CN114625353A (zh) | 模型框架代码生成系统及方法 | |
Foster | A rigorous approach to engineering web service compositions | |
CN111104106A (zh) | 集成业务流程与通讯报文的可视化开发方法、系统及介质 | |
CN115639980A (zh) | 一种低代码平台可拖拽的前端逻辑编排方法及装置 | |
US20050137839A1 (en) | Methods, apparatus and programs for system development | |
CN111666072A (zh) | 一种软件代码及文档机器人方法 | |
CN111309317A (zh) | 一种实现数据可视化的代码自动化方法和装置 | |
CN115686467A (zh) | 动态语言中的类型推断 | |
CN113326030A (zh) | 一种业务请求的处理方法和装置 | |
CN116755669A (zh) | 一种基于dsl语言操作模型的低代码开发方法和工具 | |
US11334475B1 (en) | Graph based event-driven computing | |
Kienle et al. | Evolution of web systems | |
Eslamichalandar et al. | Service composition adaptation: An overview | |
Biehl | GraphQL API Design | |
Aubert et al. | pymwp: A Static Analyzer Determining Polynomial Growth Bounds | |
Yang et al. | Single-state state machines in model-driven software engineering: an exploratory study | |
Efendioglu et al. | Modelling method design: An adoxx realisation | |
CN110502483A (zh) | 数据处理方法、装置、计算机设备和存储介质 | |
Mansurov et al. | Using Message Sequence Charts to accelerate maintenance of existing systems | |
Pereira et al. | Development of self-diagnosis tests system using a DSL for creating new test suites for integration in a cyber-physical system |
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 |