CN116391172A - 用于创建和执行高度扩展的云应用的系统和方法 - Google Patents
用于创建和执行高度扩展的云应用的系统和方法 Download PDFInfo
- Publication number
- CN116391172A CN116391172A CN202080107056.0A CN202080107056A CN116391172A CN 116391172 A CN116391172 A CN 116391172A CN 202080107056 A CN202080107056 A CN 202080107056A CN 116391172 A CN116391172 A CN 116391172A
- Authority
- CN
- China
- Prior art keywords
- service
- meta
- item
- metadata
- code
- 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
- 238000000034 method Methods 0.000 title claims abstract description 114
- 230000008569 process Effects 0.000 claims description 57
- 239000008186 active pharmaceutical agent Substances 0.000 claims description 16
- 238000012545 processing Methods 0.000 claims description 15
- 230000006399 behavior Effects 0.000 claims description 9
- 230000000007 visual effect Effects 0.000 claims description 7
- 230000007246 mechanism Effects 0.000 claims description 6
- 238000013475 authorization Methods 0.000 claims description 5
- 238000013519 translation Methods 0.000 claims description 3
- 230000003416 augmentation Effects 0.000 claims description 2
- 230000003190 augmentative effect Effects 0.000 claims description 2
- 238000011161 development Methods 0.000 abstract description 11
- 230000006870 function Effects 0.000 description 56
- 238000007726 management method Methods 0.000 description 32
- 230000014509 gene expression Effects 0.000 description 11
- 238000004891 communication Methods 0.000 description 5
- 238000012795 verification Methods 0.000 description 4
- 238000013500 data storage Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000006855 networking Effects 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 238000000638 solvent extraction Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 239000002131 composite material Substances 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000008570 general process Effects 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 230000000153 supplemental effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000012800 visualization Methods 0.000 description 1
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/51—Source to source
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及到开发和执行基于网络的软件应用程序领域。所要求保护的是一组发明,更特别要求的是一种开发和执行基于网络的软件应用的云系统和方法。云系统由通过软件接口相互交互的微服务组成。所述微服务包括:元模型服务;元数据管理服务;元语言交叉编译器服务,其能够将描述应用程序对象的业务逻辑对象的元语言源代码翻译为Erlang代码、将生成的Erlang代码编译为用于Erlang虚拟机的二进制代码,其可由应用程序执行服务加载并执行;会话管理服务;应用程序执行服务;外部数据接口服务,其能够与外部数据库和网络服务一起工作;以及外部API服务。元模型服务和会话管理服务的设计使得它们可以在主从基础上由至少一个服务补充,以分配与查询相关的负载。技术结果是提高效率,在应用程序的开发和执行过程中提供横向扩展,并通过使用元语言简化应用程序业务逻辑的描述。
Description
技术领域
本技术方案涉及基于web的软件应用程序的开发与实现。更具体地,本发明涉及创建使用软件平台开发的高度可扩展的云应用的方法。
现有技术
从2019年6月18日公布的US10,324,690B2中已知一种解决方案,该解决方案描述了一种用最少的手动编码自动生成企业软件应用程序的系统和方法。优选实施例提供了一种图形化设计工具,其使用统一模型语言(UML)对应用程序进行建模、验证UML模型、并自动生成可部署的应用程序。优选实施例还提供了可以从其构建目标应用程序的库的框架。
从2010年6月08日公布的US 7,735,062B2中已知一种解决方案,该解决方案描述了用于开发软件应用程序的系统和方法。所要求保护的系统和方法允许创建应用程序的可视化模型、将软件应用程序的版本存储在集中式存储库中、自动生成和部署软件应用程序、定义软件应用程序之间的依赖关系、以及由多个开发人员自动化和协助开发多个依赖的软件应用程序。
现有技术中已知的解决方案具有许多缺点,即,它们使用XML格式来存储模型描述,这可能导致对与其他模型和元素的关系的语义分析的额外挑战,因为它们可以存储在关系数据库中的单独的XML片段中。现有技术中已知的解决方案具有较差的可扩展性。此外,现有技术中已知的用于开发和实现应用程序的解决方案假定客户具有一定的现有IT基础设施来运行生成的应用程序,这与软件即服务(SaaS)模式的使用无关,而是适合于在“内部(on-premises)”(在客户的领土上)模式中的开发和使用。
发明内容
技术任务是创建快速开发可在SaaS模型中使用的高度可扩展的云应用的系统和方法。为了解决这个技术任务,创建了一种用于开发和实现基于web的软件应用程序的云系统和方法,其特征在以下独立权利要求所述。在从属权利要求中描述了本发明的其他实施例。
技术结果包括改进的性能和在应用程序的开发和实现中的横向扩展的实现,以及通过使用元语言实现的应用程序的业务逻辑的简化描述。此外,技术结果包含实现所要求的目的。
所要求保护的结果是通过构建用于开发和实现基于web的软件应用程序的云系统来实现的,所述云系统包括通过软件接口相互通信的微服务,所述微服务如下:
元模型服务,所述元模型服务包括元数据存储库和元模型界面服务,其中所述元模型服务可以用至少一个主从服务来扩充,用于请求的负载均衡;
元数据管理服务,所述元数据管理服务包括web界面,所述web界面用于处理元数据、并与所述元模型服务通信以接收和修改元数据、被设计为提供用于处理构成应用程序模块配置的元数据的用户友好工具;用于构建应用程序界面形式的可视化编辑器的实现;元语言源代码的可视化编辑器;用于处理元语言中描述的元数据版本的机制的实现,用于将元数据转换为其他语言以本地化应用程序的工具;
元语言交叉编译器服务,所述元语言交叉编译器服务被设计为允许将表示应用程序对象的业务逻辑描述的元语言源代码翻译为Erlang代码、将生成的Erlang代码编译为用于Erlang虚拟机的二进制代码,其可加载并由应用程序运行时服务执行;
会话管理服务,所述会话管理服务被设计为允许用户授权、会话创建、具有所需元数据的执行器服务搜索、具有所需元数据的执行器服务启动、执行器进程和web界面创建、和用至少一个主从服务来扩充,用于查询的负载均衡;
应用程序执行器服务,所述应用程序执行器服务被设计为允许加载和执行存储在系统存储库中的应用程序,作为一组复杂元对象,包括在特定用户会话内以编译二进制代码形式的业务逻辑描述,并且其可以通过至少一个服务来扩充,用于查询的负载均衡;
外部数据接口服务,所述外部数据接口服务被设计为允许使用外部数据库和web服务;
系统的外部API服务。
在所提出的系统的特定实施例中,所述元语言交叉编译器包含词法分析器(lexer)、语法分析器和Erlang代码生成器。
在所提出的系统的另一个特定实施例中,所述应用程序执行器服务包括执行器核心、元数据高速缓存、web界面和按需动态创建的运行时进程。
在所提出的系统的另一个具体实施例中,所述外部数据接口服务被设计为允许通过针对相关数据源的具体情况定制的连接器使用外部数据库。
在所提出的系统的另一个特定实施例中,所述外部数据接口服务被设计为允许统一的API来处理数据或网络服务。
要求保护的结果还通过实现用于开发和实现基于web的软件应用程序的方法来实现,该方法包括以下步骤:
通过元数据管理服务和元模型服务使用编译类型元语言,将应用程序对象描述为存储在元数据存储库中的元数据,其中所述应用程序对象是基于元模型类描述来描述的;
呈现为包含属性、嵌套对象的一组元对象的描述的元数据以及实现对象的事件和程序的元语言的源代码被转换为Erlang代码,其中,将元语言的源代码与语言文法进行比较、生成识别的语言中的词素列表、对获得的词素列表进行句法地语法分析、语法分析词素后构建语法树、并对语法分析词素后构建的语法树进行语义分析、通过转换元语言的源代码获得Erlang代码、将获得的Erlang代码编译为用于Erlang虚拟机的可执行的二进制代码;以及将生成的二进制代码写入系统存储库;
在运行生成的应用程序之后,使用会话管理服务创建会话并搜索具有所需元数据的执行器服务、启动具有所需元数据的执行器服务、并创建执行器进程和web界面;
使用执行器服务运行和执行来自系统存储库中的二进制代码,其中二进制代码直接在Erlang虚拟机上执行。
在所提出的系统的特定实施例中,元模型包含类、子类、属性、行为、类型和子类型。
在所提出的系统的另一个特定实施例中,对象类的描述包括附加类和现有类的继承。
附图说明
下面将根据附图描述本发明的实施例,这些附图是为了解释本发明的本质而呈现的,而决不是限制本发明的范围。本申请附有以下图:
图1展示了提出的云系统的一般架构。项目101-软件平台、项目102-应用程序开发平台、项目103-应用程序运行时平台、项目104-关系DBMS、项目105-元数据存储库、项目106-元信息、项目107-界面描述块、项目108-业务逻辑描述块、项目109-数据描述块。
图2展示了所提出的云系统的架构。项目110-系统用户、项目111-元数据管理服务、项目112-设计人员的web界面、项目113-交叉编译器服务、项目114-均衡器、项目115-会话管理服务、项目116-主会话管理器、项目117-主会话表、项目118-附加会话管理器、项目119-附加会话表、项目120-主元模型服务、项目121-附加元模型服务、项目122-主元模型、项目123-附加元模型、项目124-模型的主数据库、项目125-模型的附加数据库、项目126-数据提供商服务、项目127-数据提供商、项目128-数据库连接器、项目129-外部数据库、项目130-web提供商服务、项目131-web提供商、项目132-web连接器、项目133-外部web服务、项目134-执行器服务、项目135-执行器核心、项目136-元数据高速缓存、项目137-执行器的web界面进程、项目138-执行器的进程。
图3展示了一个执行器服务模式。项目139-执行器服务、项目140-执行器核心、项目141-主监督器、项目142-外部API、项目143-主执行器、项目144-执行器监督器、项目145-web界面监督器、项目146-元数据高速缓存、项目147-执行器进程、项目148-web界面进程。
图4展示了元数据的一般架构。项目149-元模型、项目150-元数据、项目151-配置、项目152-类描述、项目153-类属性描述、项目154-类行为描述、项目155-类型描述、项目156-子类型描述、项目157-模块描述、项目158-元对象描述、项目159-对象特性描述、项目160-对象业务逻辑描述、项目161-元对象版本、项目162-系统帐户、项目163-元数据模式,项目164-角色、项目165-用户、项目166-权限。
图5展示了描述元模型类的结构。项目167-主类、项目168-基主类、项目169-子主类、项目170-子类、项目171-类属性、项目172-值类型、项目173-属性子类型、项目174-值列表、项目175-类事件、项目176-类方法。
图6展示了描述元数据对象的结构。项目177-主类、项目178-元对象、项目179-类属性、项目180-类事件、项目181-类方法、项目182-子类1、项目183-子类2、项目184-A1类属性、项目185-E1类事件、项目186-类方法实现、项目187-A1属性的对象特性和值、项目189-E1对象事件实现、项目190-P1对象程序实现。
图7展示了元数据对象版本管理模式。项目191-元对象、项目192-对象的不可变属性、项目193-对象数据的版本1、项目194-对象数据的版本2、项目195-版本1对象特性值、项目196-版本1对象事件实现、项目197-版本1对象程序实现、项目198-版本2对象特性值、项目199-版本2对象事件实现、项目200-版本2对象程序实现。
图8展示了元信息模式。项目201-帐户、项目202-模式1、项目203-模式2、项目204-模块、项目205-对象、项目206-对象之间的链接、项目207-元模型、项目208-数据描述、项目209-子帐户、项目210-角色、项目211-用户、项目212-权限。
图9展示了系统元语言源代码的编译过程。项目213-元语言编译器、项目214-Erlang编译器、项目215-元语言源代码、项目216-Erlang源代码、项目217-BEAM格式的二进制模块。
图10展示了一种元语言编译器算法。项目218-元语言源代码、项目219-词法分析器、项目220-语法分析器、项目221-Erlang代码生成器、项目222-词素(词位)列表、项目223-语法树、项目224-Erlang源代码、项目225-词法分析错误、项目226-语法分析错误、项目227-编译错误。
图11展示了一个元语言语法分析器模式。项目228-语法分析器、项目229-词素列表、项目229-语法分析、项目230-重复变量检查、项目231-变量调用检查、项目232-内置函数调用检查、项目233-元数据调用检查、项目234-语法树、项目235-上下文无关文法、项目236-名称(变量)表、项目237-内置函数表、项目238-元数据存储库。
图12展示了语法树的示例。项目239-变量N、项目240-赋值运算符、项目241-减法运算符、项目242-sin()函数、项目243-编号100、项目244-乘法运算符、项目245-数10、项目246-加法运算符、项目247-abs()函数、项目248-编号-1、项目249-编号3。
图13展示了Erlang码生成器模式。项目250-代码生成器、项目251-语法树、项目252-语法树遍历、项目253-变量声明的编译、项目254-运算符和表达式的编译、项目255-函数参数检查、项目256-Erlang代码生成、项目257-Erlang源代码、项目258-语义验证、项目259-内置函数表、项目260-Erlang代码模式。
图14展示了Erlang模块结构。项目261-Erlang模块、项目262-初步声明、项目263-模块的主函数、项目264-模块声明、项目265-程序参数声明、项目266-变量处理函数、项目267-阵列处理函数、项目268-返回处理函数、项目269-参数的注册、项目270-参数的初始化、项目271-变量的注册、项目272-程序的主代码、项目273-返回函数调用。
图15展示了创建用户会话的算法。项目274-会话请求、项目275-会话管理器、项目276-对执行器的请求、项目277-检查是否存在具有模式的执行器、项目278-检查是否存在具有模块的执行器、项目279-检查是否达到用户数量的最大限制、项目281-检查是否达到最大缓存容量限制、项目280-新的执行器服务实例化、项目282-执行器服务、项目283-模式初始化、项目284-从元数据加载模块、项目285-创建执行器进程、项目286-创建web界面进程。
图16展示了用于执行业务逻辑程序的算法。项目287-web界面进程、项目288-程序执行启动、项目289-执行器进程、项目290-进程中的程序代码检查、项目291-程序提交执行、项目292-Erlang OTP、项目293-内核函数调用、项目294-主执行器、项目295-元语言内置函数调用、项目296-将代码加载到元数据高速缓存、项目297-高速缓存中的程序代码检查、项目298-代码从高速缓存加载到执行器进程、项目299-程序二进制代码、项目300-系统存储库、项目301-模型服务、项目302-程序二进制代码、项目303-元数据高速缓存。
图17展示了计算设备的概要图。
具体实施方式
下面对本发明实施例的详细描述提供了实施例的许多细节,以确保对本发明的清楚理解。然而,对于本领域的技术人员来说,无论是否有其实施例的这些细节,本发明如何使用都是显而易见的。在其他情况下,没有详细描述公知的方法、程序和组件,以免过度模糊本发明的特征。
此外,以上介绍将清楚地表明,本发明不限于所提出的实施例。对于本领域技术人员来说,保留本发明的本质和形式的许多潜在的修改、变化和替代将是显而易见的。
所提出的开发和实现基于web的软件应用程序的方法和云系统依赖于以元模型的形式存储在系统存储库中并在计算设备上执行的软件应用程序表示。
用于开发和实现基于web的软件应用程序的云系统由通过API相互通信的微服务组成。本文所提出的云系统提供了高性能和横向可扩展性,可供大量用户同时运行。
图1展示了所提出的用于开发和实现基于web的软件应用程序的系统的一般架构。
根据架构,软件应用程序被分为两个大的部分--软件内核(平台)101和存储在储存库105中的应用程序部分(元信息)106。元信息存储在以关系数据库管理系统(DBMS)104组织的系统存储库中。软件内核(平台)101由两个主要子系统组成,包括应用程序开发平台102和应用程序运行时平台103。
应用程序开发平台102负责为开发者提供工具,以平台格式描述应用程序模型。此类开发工具的示例包括系统元数据导航器、元对象属性编辑器、对象界面的表格编辑器和业务逻辑程序编辑器。
应用程序运行时平台103提供机制和资源以运行元数据中描述的应用程序。执行平台使用存储在元数据存储库中的应用程序元数据来加载和执行应用程序,包括生成应用程序界面、与用户的通信以及业务逻辑程序的执行。
在元信息106中,应用程序的描述由三个主要部分组成,包括业务对象界面描述107、对象业务逻辑描述108和数据描述109。应用程序业务对象的界面由一组属性和对象的可视化形式来描述。使用在二进制模块中编译以执行的内置系统元语言来描述对象的业务逻辑。应用程序数据描述由数据提供商定义,并由一组数据源来表征,其可以包括不同的DBMS或web服务。
图2展示了所提出的系统的详细架构。
所提出的系统的操作基于元模型服务120,其提供对系统存储库中的元数据的存储和访问。该服务包括关系数据库124和元模型122,关系数据库包括系统存储库,元模型122支持系统存储库的所有操作,并向存储库提供外部API,可以处理多个并发异步请求。API的使用允许忽略存储库中(关系数据库中)的数据结构,并确保独立于元数据存储的方法。
元模型服务在处理系统存储库方面的主要功能包括接收关于对存储库的随机请求的元信息;输入新元信息;修改现有元信息;以及删除元信息。
元模型确保所有具有元信息的操作中的元数据的完整性。
为了提高对存储库有许多请求时的系统性能并提高容错能力,系统具有基于“主从”模式的元模型配置,其中主服务(“主”)由几个“从”补充,并且当发出请求时,负载可以在所有这些服务之间分配。图2显示了元模型的“从”服务121,它也有自己的关系数据库125,其包含系统存储库的副本。主服务和“从”服务的数据库是自动同步(复制)的,而更改元信息的操作仅在主服务中可用,并且读取元信息的请求在所有服务中都可用。如果主元模型服务由于某种原因而失败,则其中一个“从”服务取代它,并成为主服务,所有其他服务开始与其同步。在此模式中,“从”元模型服务的数量几乎是无限的,并且由系统的扩展要求决定。
元数据管理服务111被设计为向系统用户提供用于应用程序开发的所有必要资源和工具。该服务基于应用程序设计人员的web界面,该界面为开发人员提供了一个用户友好的界面来处理元数据。设计人员web界面通过外部API直接与元模型服务通信,以获取元数据并对元数据进行更改。
该服务的主要功能包括业务帐户和子帐户的管理和访问控制;系统用户、用户角色、权限列表的管理;元数据模式的管理和访问控制;元信息(一组类及其描述,包括属性和行为)的管理;通过所选模式中的应用程序(模块)和元数据对象进行用户友好的导航;提供元数据对象编辑器。设计人员web界面还实现了用于构建对象的界面形式的可视化编辑器;以及程序源代码和业务逻辑事件的编辑器。
该服务实现了一种用于处理对象元数据版本的机制,并且元数据业务对象可以翻译成其他语言以本地化应用程序。设计人员的web界面还与交叉编译器服务113通信,以将元语言程序的源代码转换为可执行的二进制代码。
元数据管理服务通过为每个用户会话分配单独的进程,使大量用户能够同时使用系统。
元数据管理服务实现的方式也是通过启动附加的服务来实现横向扩展,负载均衡器114将在这些附加的服务之间分配会话。
交叉编译器服务113用于将应用程序业务逻辑(元语言)的程序和事件的源代码转换为可由应用程序执行器服务加载和执行的可执行二进制模块,它与元数据管理服务一起是应用程序开发系统的一部分,并且只能通过设计人员的web界面使用。交叉编译器服务提供了一个外部API来调用其方法,并且可以同时处理大量异步请求。当需要横向扩展来处理更多请求时,可以启动多个编译器服务,并且负载均衡器114会自动将请求分发到这些编译器服务。
交叉编译器服务113包含词法分析器(lexer)、语法分析器和Erlang代码生成器。编译器服务接收系统元语言程序的源文本,以及编译所需的附加信息,如模块、对象。编译器可确保对输入语言构造进行完整的文法语法分析和句法分析,并输出编译时错误。在编译期间,该服务与元模型服务120通信以获得关于在程序的源代码中使用的元数据对象的附加元信息,例如以验证所调用的应用程序程序或对象的参数的列表和类型。如果元模型服务无法从编译器请求,则编译过程无法完成。当编译成功后,编译器输出与Erlang虚拟机兼容的编译程序的二进制代码,该代码由元数据管理服务存储在系统存储库中。
会话管理服务115包含会话管理器116和本地会话表117。会话管理器的主要功能是提供系统用户的身份验证及其使用系统资源的授权。对将使用子系统开发和执行应用程序的任何用户执行身份验证和授权。换句话说,在用户可以运行例如设计人员的web界面之前,会话管理服务必须通过其凭据(例如登录名和密码)来识别用户。对于身份验证,会话管理服务向存储所有用户帐户的元模型服务发出请求。如果身份验证成功,则服务将授权用户利用用户请求的参数(例如业务帐户、模式元数据)启动设计人员的web界面。
如果授权成功,该服务将为用户创建一个会话,并将该会话传递给设计人员的web界面,然后由其处理所有传入的请求。如果用户从系统存储库运行业务应用程序,则会话管理服务将创建会话,分配应用程序执行器资源,然后将会话转发给执行器。执行器资源分配的过程包括以下步骤:使用必要的元数据搜索执行器服务、必要时启动附加的执行器服务、使用必要的元数据启动执行器服务、以及创建执行器过程和设计人员的web界面。一旦创建会话后,其信息将记录在会话管理器的本地会话表中。在用户使用完应用程序后,有关会话的信息将从服务的会话表中移除,并且分配的执行器和设计人员的web界面进程将停止。
为了提高会话管理服务在请求较多时的性能,并提高容错能力,系统具有基于“主从”模式的服务配置,其中主服务(“主”)由几个“从”补充,并且当请求发出时,负载可以在所有这些服务之间分配。该图示出了“从”会话管理器118,其还具有其自己的本地会话表119,其包括主会话管理器的会话表的副本。“主”会话管理器和“从”会话管理器的会话表自动同步。如果“主”会话管理器由于某种原因而失败,则其中一个“从”服务取代它,并成为主服务,所有其他管理器开始与它同步。负载均衡器114用于提供会话管理服务之间以及元模型服务之间的自动负载均衡。
执行器服务134提供应用程序执行子系统的主干执行器服务134是应用程序执行子系统的基础,并确保其描述存储在系统存储库中的业务应用程序的启动和执行。
执行器服务的主要组件包括执行器核心135、元数据高速缓存136、web界面进程137和执行器进程138。
该执行器核心(140图3)由主监督器141(图3)、外部API模块142、主执行器143以及内置元语言函数、执行器进程监督器144以及web界面进程监督器145组成。外部API 142提供了一组用于管理和使用运行时服务的方法,包括用于初始化服务、加载元数据、获取关于服务及其状态的信息以及执行业务逻辑程序的方法。主执行器模块143实现服务操作的主要方法,并包含系统元语言的内置功能的实现。执行器监督器144负责实例化和管理执行器进程147。web界面监督器145负责实例化和管理web界面进程148。
元数据高速缓存146(图3)是在运行时服务进程的存储器中的软件控制结构,并且其被设计为在本地存储用于运行和执行运行时服务的业务应用程序所需的元信息在本地存储执行服务启动和执行业务应用程序所需的元信息。执行器核心140实现服务的外部API,并且还负责与元模型服务和会话管理服务通信。此外,执行器核心控制服务器的内部进程。
元数据高速缓存146(图3)存储与元数据模式相关的元信息(例如,提供者和数据源的描述),以及包括在该模式中的应用程序(模块)的业务对象的完整信息。高速缓存可以存储仅属于一个元数据模式的元信息。在运行执行器时使用本地高速缓存可以避免与元模型服务进行通信以获取元数据,这显着提高了性能并降低了系统中的通信强度。
web界面服务137(图2)和执行器进程138被设计成支持使用系统中的业务应用程序的用户的单独会话。
执行器进程147(图3)由执行器监督器144响应于来自会话管理服务的对执行器服务的请求而生成。当在启动业务应用程序时创建新的用户会话时,web界面服务148由web界面监督器145创建。总是为每个会话创建单独的一对运行时进程和web界面,这允许完全隔离不同会话的业务应用程序的执行。Web界面服务148在操作期间与其配对的执行器服务147进行通信,例如,当应用程序用户采取某些步骤时,web界面服务可以通过使用执行器进程来启动业务逻辑程序的执行。此外,执行器进程147与元数据高速缓存密切通信,例如,当必须在业务程序的执行期间提取关于元对象的信息时。在这种情况下,如果这些是同一个应用程序的会话,不同的执行器进程可能会同时使用执行器服务缓存中的同一个数据集。因此,如果它们与同一组元数据模式应用程序有关的话,单个执行器服务可以支持大量的用户会话。
执行器服务是完全自主的,并且一旦初始化,它实际上独立于系统中的其他服务,从而允许应用程序运行时系统的几乎无限制的横向扩展,以支持非常多的并发用户会话。根据当前的系统负载,通过自动实例化支持新用户所需的附加执行器服务来实现扩展。
外部数据提供商126(图2)和网络服务提供商130的服务旨在支持应用程序对外部数据的使用。提供商服务的核心是相应的提供商(数据提供商127或web提供商131)、以及数据源连接器128或web服务连接器132。每个连接器针对相关数据源129或web服务133进行定制,并提供低级别数据协议或服务API以向数据源或web服务传输数据或命令,以及从数据源或web服务传输数据或命令。数据或web服务提供商为业务应用程序提供统一的数据或服务API,而不考虑与特定数据源或网络服务相关的具体细节。使用元数据管理服务来配置web服务数据提供商,并且提供商的配置数据存储在系统存储库中的元数据中、并且可以由应用程序开发人员随时修改。提供商与应用程序执行器服务的执行器进程进行通信,接受来自它们的命令以接收或修改数据,或者传输接收到的数据。
下面描述开发和实现基于web的软件应用程序的方法。
使用所提出的方法的第一阶段将是在关系数据库内系统存储库(元模型)中存储的元数据中描述应用程序的随机业务对象。该描述由元数据管理服务和元模型服务使用程序编译类型元语言提供,该元语言支持对象实现应用程序的复杂业务逻辑,其中应用程序对象是基于元模型类描述来描述的。
存储库数据的结构旨在提供最大的灵活性,在如何描述业务对象方面几乎没有限制,包括其特性(属性)、行为(方法和事件)、结构和关系的组。为了解决此任务,以对象类(原型对象)的形式引入了模型抽象层,它定义了描述实际业务对象的所有必要结构和数据。
图4描述了所提出的系统中元数据存储库的一般结构。存储库的主要部分包括元模型149、元数据150和配置151。
元模型149用于描述原型对象(proto-objects)元数据的组成和结构。这种方法提供了最大的灵活性,对如何描述业务对象方面几乎没有限制,这允许根据需要扩展元模型类的基本组。类描述152包括一组属性153及其类型155(以及子类型156,如果需要);行为154-类的一组方法和事件;类结构-如果类很复杂并且包含嵌套类。
元数据150包含作为应用程序(模块)157的一部分的业务对象158的描述。每个对象158的描述都建立在元模型150中对其类152的描述上。一组特性159及其对象类型由一组对象类属性明确定义。对象特性的值可以是简单类型的标量值,也可以是对其他对象或其特性的引用。对象的业务逻辑程序160的组是在类中描述的行为(方法和事件)的基础上定义的。对象数据可以版本化,即可以存储在不同时间点创建的对象特性值的不同变体。
配置151包含组织整个系统并为系统用户提供对其的访问所需的结构。整个元信息,尤其是配置,被划分为账户162。帐户是基于访问的信息分组,它结合了角色、用户及其帐户、并包括具有所有元数据的模式。模式163是基于元数据的语义属性来分离元数据的又一个级别。模式定义了在该模式中使用哪个元模型,并因此定义了如何描述在该模式中的元对象。
图5展示了描述元模型类的结构。类可以属于两种类型之一:主类167或子类170。主类可用于描述元数据中的业务对象。子类用于构建复杂(复合或嵌套)类的结构,并且只能作为主类的一部分,不能单独使用来描述业务对象。
任何类都由一组属性171描述,每个属性具有特定类型172,并且可能具有子类型173。属性值类型可以是简单标量类型(例如,数字或文本值),或者它可以是对值列表元素174、另一个主类168或主类的属性的引用。一组属性明确定义了给定类中的业务对象的哪些属性应被描述和存储在元数据中。
除了属性之外,类还可以具有方法176和事件175的描述。类的方法和事件的总和决定了该类的行为。类方法是一个命名的预定义程序,它定义了该类的对象所允许的操作。类方法的示例包括创建新元素、写入数据或删除元素。方法的实现是分配给类的,这意味着每个类的方法程序必须是预定义的。由于用户与应用程序的通信或通过软件(使用其他业务逻辑程序),方法程序被调用。类事件是为在元数据中的业务对象定义的命名类程序。每个类都有自己的事件组,它明确地确定可以为该类的业务对象定义哪些事件,即事件程序是在业务对象中而不是在类中实现的。当某个条件发生时(例如,双击鼠标左键),由于用户与应用程序的通信,对象事件程序被调用。
类结构是对组成特定类的子类引用的分层组(分层集合),用于描述复杂的(嵌套的)类。在这种情况下,层次结构意味着结构中使用的每个子类也可以具有嵌套子类。在类结构中,不能使用主类,只能使用子类。类结构决定了哪些组件构成业务对象,以及该对象将如何在元数据中表示。例如,主类“文档”可能包含子类“表格”。这种结构允许将“文档”类的业务对象表示为一组定义该对象的可视化表示的表格对象。
元模型可以通过两种方式扩展:通过添加新类或通过继承现有类。对于新创建的类,有必要定义一组属性、事件和方法以及结构。一旦描述了新类,就可以创建此类的业务对象。当新类在很大程度上复制现有类并进行较小修改时,将使用继承。在继承的情况下,子类获取父类的所有属性、方法和事件、以及结构,并且可以添加自己的属性、方法、事件和补充类结构。在子类中,不允许重新定义父类的属性和方法以及结构。
图6介绍了一种基于元模型类定义来描述元数据的元对象的方法。在这个例子中,类177具有两个定义的属性(179):属性A1(184)和属性A2。根据该定义,当创建属于给定类的元对象178的描述时,有必要输入对应于属性A1和A2的对象特性187的值。在这种情况下,值类型(例如,对于对象特性A1(187))必须对应于类属性A1(184)的类型和子类型。在元对象中,可以(但不是必需的)定义类事件(180)的程序的实现。对象程序的签名(程序名称、返回类型、参数的列表和类型)必须与类中事件的描述完全匹配。例如,对象事件E1的实现(189)必须满足类事件E1(185)的描述。只有那些已经在类中描述的事件才能在对象中定义。对象事件程序通过使用在类结构中定义的子类“对象事件”182中的对象来实现。如上所述,类方法181必须直接在类中实现。在这个例子中,类具有两个描述的方法186:方法1和方法2。最后,根据本例中的类定义,可以(但不需要)在元对象中定义无限数量的业务逻辑程序。这些程序没有在类中提前描述。对象程序通过使用在类结构中定义的子类“对象程序”183中的对象来实现。
在元数据存储库中存储对象的机制允许进行版本管理(可选)。图7描述了元对象数据的版本管理模式。在这种情况下,元对象191中的所有数据被划分为非版本化部分和版本化部分。
对象的非版本化部分包含不可变的属性192,例如类、父对象的引用,它被用来实现对对象的引用和建立对象之间的链接。可能由于开发(修改)对象而改变的对象数据被放置在版本化部分(193、194)中。
版本化部分包含对象特性值195、对象程序实现196和对象程序实现197。对象版本是存储在元数据存储库中的一组版本化对象数据,具有该版本的唯一标识符(编号)。
如果系统以非版本化模式运行,则对对象数据的所有更改都将以版本编号0记录(并且不保留旧数据)。如果启用版本管理,修改后的对象数据194被记录为新的版本编号,而旧的对象数据193也被存储为以前的版本编号。
要在版本管理模式下开始修改对象,需要执行签出操作(取对象进行编辑),其中对象的当前(最新)版本被锁定以供其他用户修改,并创建新的对象版本,在那里可以引入更改。一旦更改完成,就会执行签入程序,结果是新的对象版本成为当前版本,而以前的版本被解锁。
元对象的每个版本都可以属于特定分支。在一个分支内,所有对象版本都是按顺序保存的,但是不同的分支可能会并行保存不同的对象版本。分支中只有一个版本可以是当前的(这是分支中的最新版本)。除了当前版本属性外,还可以使用“工作”版本属性标记版本。工作版本是对象的稳定且经过测试的版本,可用于在应用程序中运行。只能安装对象的一个工作版本(它不一定必须与当前版本相同)。
所提出的云系统和方法可以在SaaS模式下运行。为了使用于开发和实现应用程序的系统能够以允许许多用户同时使用其的模式运行,有必要提供一种用于将元信息划分为元模型、元数据和配置等元素的可靠方法。图8解释了用于划分系统中的元信息的方法。
划分的基础是被称为“账户”201的实体。在这种情况下,账户是指系统的注册企业用户的非个人账户。在主账户内,子账户209可以作为主账户的下级被创建。帐户必须包含至少一个个人用户配置文件211,并且用户配置文件的数量不受限制。可以为每个用户配置文件分配特定的角色210和一组权限212。这种划分方法的一个重要特征是,在一个帐户中,用户、他们的角色和权限是隔离定义的,即他们独立于另一个帐户的用户、角色和权限。
划分元信息的下一级是指定为“模式”(202,203)的实体。模式结合了元模型和元数据的相关信息,例如类描述、数据和元对象。通过这种方法,每个模式都包含自己的元模型(类或原始对象的描述),这确保了即使在同一帐户中与其他模式的独立性,也可以安全地扩展或更改元模型,而不会有其他模式中的业务对象的描述发生意外更改的风险。该模式还用作在平台上开发和执行的应用程序的“容器”,并且它由术语“模块”204指定。应用程序(模块)是业务对象205的集合,每个业务对象只能属于一个模块。为了确保在其他模块中重复使用一个模块的业务对象的能力,通过创建对对象的引用来激活模块之间的链接机制206。链接(对对象的引用)只能在一个模式中的模块之间创建。模式还包含运行应用程序所需的外部数据源的描述208。数据源可以由同一模式内的任何应用程序(模块)使用。因此,根据功能属性(链接的业务对象)和使用共享数据的原理,模块被分组为模式。
如上所述,基于web的软件应用程序的开发依赖于通过使用程序编译类型元语言描述元数据中的应用程序的随机业务对象,并支持对象来实现应用程序的复杂业务逻辑。该语言的文法构建方式允许直接使用来自应用程序元数据的对象,以及有效使用来自外部源的数据。将应用程序的业务逻辑的整个代码分为单独的程序或事件处理程序,并链接到元数据中的业务对象。这允许在程序中使用元对象上下文,例如,对对象数据的当前形式的引用,并获得对该形式中的数据的直接访问。因此,该语言可以在运行时模式下使用,以操纵应用程序的用户处理的数据,甚至可以干预数据处理或元对象的行为。
元语言文法的一般结构由三个主要块表示:语言的句法元素、数据组织和数据处理。
语言的句法元素包括句法构造,例如注释(//,/**/)、文字(1,“s”,“s”)、括号([],(),{})、以及在元语言中编写代码时使用的关键字。
数据组织包括数据类型(任意、整数、字符串等)、数据存储结构和对象的信息。元语言是一种严格类型的语言。这意味着在不指定类型的情况下不能在表达式中使用不同类型的值,并且只能将与类型函数的定义相对应的值作为参数传递给函数。
使用算术运算(+,++,-,--,*,/,∧)、赋值运算符(=,+=,-=,*=,/=)、分支运算符(IF,THEN,ELSE,CHOOSE,CASE,RETURN)、逻辑运算(=,<>,>,<,>=,<=,NOT,AND,OR,ANDALSO,ORELSE)、循环运算符(FOR-NEXT,DO–LOOP,CONTINUE,EXIT)、错误处理运算符(THROW,TRY-CATCH,FINALLY)、对象处理运算符(CREATE,DESTROY,FUNCTION,EVENT,CALL)、SQL运算符(连接、断开、选择、插入、更新、删除、提交、回滚、打开、关闭、获取、执行)、以及内置函数(内置函数、转换函数、字符串函数、数字函数、日期时间函数、数组函数、杂项函数)处理数据。
该语言支持对其他元模型程序的调用以及递归调用。
所提出方法的第二阶段是将描述的元数据(表示为包含特性、嵌套对象以及实现对象事件和程序的元语言的源代码的一组元对象)转换成Erlang代码,随后通过交叉编译器服务将其编译成Erlang虚拟机(BEAM)的可执行二进制代码。
图9展示了将系统的元语言过程的源代码编译为BEAM二进制文件一般过程。在输入时,编译器接收元语言源代码215。元语言编译器213对其进行分析,并将其转换为完全满足Erlang语法要求并实现相同逻辑的文本。元语言编译器将语法构造和函数调用转换为相应的Erlang构造和函数调用,以产生结果Erlang代码216。然后,使用标准Erlang编译器214将Erlang源代码转换为BEAM格式的二进制模块217。
元语言交叉编译器的操作将在下面参考图10进行描述。
如上所述,交叉编译器由3个主要模块组成:词法分析器219、语法分析器220和Erlang代码生成器221。
在输入时,词法分析器219接收元语言源代码218的文本,词法分析器219对照语言文法检查输入,并且在分析之后,输出识别的语言的词素列表222。
词法分析器219根据文法规则分析元语言源代码的输入流。每种类型的词素都被描述为正则表达式模式。词法分析器219区分被忽略的字符(空格、行终止符、注释)、字符串和数字文字、日期和时间值、标识符、比较运算符、逻辑运算符、算术运算符、括号和关键字。由词法分析器产生的词素表示为元组。词法分析器返回的词素格式如下:
{令牌、行号、字符}。
如果在源代码分析期间,词法分析器不能识别词素,则它返回指示源代码行号的错误225,并且编译过程停止。
如果输入流的所有词素都被正确语法分析,则词法分析器输出经解析的词素列表,并且编译过程继续。词素列表被发送到语法分析器220的输入,语法分析器通过对照语言语法定义检查词素及其顺序来语法分析词素。
语法分析器(228,图11)从输入流通过根据文法规则的定义将词素列表转换为语法树234并对其进行语法分析229。使用上下文无关文法235或BNF(Backus-Naur形式)表示法以文法推理规则(产物)的形式指定元语言构造的语法。除了检查词素的顺序是否与文法推理(语法)规则相匹配之外,语法分析器还执行其他几个重要步骤,例如:
1.维护变量表236;
2.在声明变量时检查重复项230;
3.检查变量在使用前是否被声明;
4.在初始化期间声明数组时检查数组的维数;
5.检查变量和数组元素是否被正确调用231;
6.验证对内置函数的调用,包括参数的数量232;
7.验证对应用程序元数据对象的调用233。
如果在语法分析过程中发现错误的语法构造,则语法分析器220输出指示源代码行号的错误消息226,并且编译过程停止。如果成功语法分析词素列表,则语法分析器输出经语法分析的词素的语法树223,该语法树223被传递到Erlang代码生成器221的输入。
图12提出了一种在元语言被语法分析器处理后将以下算术表达式表示为语法树的方法:
n=(abs(-1)3)*10-sin(100),
词法分析和句法解析的结果是以下元组语法树:
代码生成器221通过进行语义分析和各种附加检查(例如,在表达式中类型是否匹配)来执行语法树223的自顶向下的遍历。对于每个语法构造,代码生成器执行到目标语言(Erlang)的转换。
代码生成器250(图13)接收元组语法树251作为输入并且生成Erlang的源代码257作为输出。代码生成器通过在每个步骤执行的语义验证258来执行语法树的自顶向下的遍历252。在语法树遍历的过程中,生成器编译变量声明253或编译运算符和表达式254。变量声明和数组编译期间的语义验证包括检查表达式的初始化。编译运算符和表达式期间的语义验证包括语法的附加检查、以及表达式类型的检查、以及表达式操作数中类型是否匹配的检查。在编译函数调用285期间,还根据内置函数表259对照相关函数的参数类型检查要传递的所有实际参数。Erlang代码生成256基于预定义的Erlang代码模式260。
如果在遍历语法树223期间,代码生成器221检测到错误(例如,表达式中的类型不匹配),则它输出指示源代码行号的编译错误227,并且该过程停止。
如果语法树223的遍历成功,则代码生成器221将输出Erlang源代码224,该Erlang源代码可以用于编译为二进制格式。
生成的Erlang代码的模块261显示在图14中。该模块的整个代码由两个主要部分组成:初步声明262和模块的主函数263。初步声明包括模块声明264、程序参数声明265、变量处理函数266、数组处理函数267、返回处理函数268。模块声明包含元语言程序名称,其被翻译为Erlang模块。参数声明包含元语言程序的标识符和参数类型的列表,其被翻译为Erlang模块。变量处理函数是辅助函数,用于获取或设置模块中局部程序变量的值。数组处理函数是辅助函数,用于获取或设置模块中本地程序数组的值,包括通过调用数组的元素。需要返回处理函数来正确终止模块的主函数并传递程序的返回值,以及设置通过引用传递的参数的值。
模块的主函数从在模块的变量表中注册程序的参数269开始。下一步包括调用参数的初始化函数270。初始化函数270被调用时负责根据传递给程序(在这种情况下,传递给主Erlang函数)的实际参数来设置参数值。下一步是用于在模块的变量表中注册程序的局部变量271的部分。在注册期间,总是使用变量声明中指定的值或特定类型变量的默认值来初始化变量(例如,对于字符串变量,它是空字符串、对于数字变量,它是0)。下一步是主代码272的部分,它是在编译元语言程序的源代码时生成的。返回处理函数273在模块函数的末尾被调用。始终调用此函数,无论它是否在元语言程序的源代码中指定,并且即使元语言程序不返回任何值。返回处理函数268设置通过引用传递的输入参数的值、删除模块的变量表、并将程序的返回值(如果有的话)传递给调用函数。
获得的可执行二进制代码记录在系统存储库中。
所提出的方法的第三阶段是,在运行生成的应用程序之后,使用会话管理服务创建会话并搜索使用必要的元数据搜索执行器服务、并使用必要的元数据启动执行器服务、并创建执行器进程和web界面。
当接收到新的会话请求274(图15)时,会话管理服务275尝试根据下面描述的算法基于模式标识符和模块(应用程序)标识符参数为该会话分配执行器。使用这种模式对正在运行的执行器服务进行搜索(276)。当不存在具有所需模式的执行器服务时,将实例化新的执行器服务(280、282),然后该服务初始化所需模式(283)。如果找到了具有所需模式的服务,则对是否将所需模块加载到该服务的元数据高速缓存中进行检查(278)。如果模块已加载,则下一次检查确定服务中是否未超过对并发用户数量的限制(279)。如果达到限制,则将实例化新的执行器服务并启动模式。如果未达到最大用户数,则在该服务中为会话创建新的执行器进程和web界面,因为该模块已加载到服务中。但是,如果在上一步中模块检查显示模块未加载,则有必要检查服务是否超过其最大高速缓存容量(281)。如果达到限制,则有必要实例化新的执行器服务。如果未达到限制,则将模块加载到服务的元数据高速缓存中,然后为会话创建执行器进程和web界面就足够了。这将完成创建会话的程序。
所提出的方法的最后一步是使用执行器服务运行和执行来自系统存储库中的二进制代码,其中二进制代码直接在Erlang虚拟机上执行。
在图16上,web界面进程287启动程序执行288,之后它发出对执行器进程289的请求。执行器进程检查程序的二进制模块(二进制代码)是否被加载到执行器进程(290)中。如果二进制代码未被加载,则执行器进程调用本地元数据高速缓存303,其检查程序的二进制代码是否被加载到高速缓存(297)。如果二进制代码没有被加载到高速缓存,则执行器服务请求模型服务301从系统存储库300加载它,之后元数据高速缓存可以将所需的代码返回到执行器进程。一旦程序的二进制代码(二进制模块)被加载到执行器进程,它就将其传递给Erlang虚拟机以执行(291)。从那一刻起,二进制模块的执行完整和完全由Erlang OTP 292和二进制模块代码299控制。然而,二进制模块代码可以具有由服务的主执行器294处理的内核函数调用293或元语言内置函数调用295。
图17展示了计算设备(1700)的概要图,其确保数据处理并且是实现所要求的解决方案所必需的。
通常,设备(1700)包括这样的组件:一个或多个处理器(1701)、至少一个存储器(1702)、数据存储装置(1703)、输入/输出接口(1704)、输入/输出装置(1705)、联网装置(1706)。
设备处理器(1701)执行设备的功能(1700)或其组件中的一个或多个的功能所需的主要计算操作。处理器(1701)运行包含在随机存取存储器(1702)中的所需机器可读命令。
存储器(1702)通常以RAM的形式提供并且包括必要的程序逻辑,其确保所需的功能。
数据存储装置(1703)可以以HDD、SSD、RAID、联网存储、闪存、光驱(CD、DVD、MD、蓝光盘)等的形式制造。装置(1703)能够长期保持不同的信息,例如具有用户数据集的上述文件、包含针对每个用户测量的时间间隔的记录的数据库、用户ID等。
接口(1704)是用于连接和使用服务器端的标准手段,例如USB、RS232、RJ45、LPT、COM、HDMI、PS/2、Lightning、FireWire等。
接口(1704)的选择取决于设备(N00)的特定实施例,它可以是PC、主机、服务器集群、瘦客户端、智能手机、笔记本电脑等。
用于所述方法的系统的任何实施例必须使用键盘作为其输入/输出装置(1705)。键盘可以具有任何已知的硬件设计:它可以是笔记本电脑或上网本上使用的内置键盘、也可以是连接到台式机、服务器或其他计算机设备的独立设备。在这种情况下,连接可以是有线的,其中键盘的连接电缆连接到位于台式计算机的系统单元上的PS/2或USB端口,或者它可以是无线的,其中键盘通过无线信道(例如无线电信道)与基站交换数据,基站又(例如通过USB端口)直接连接到系统单元。除键盘外,以下还可以用作输入/输出手段:操纵杆、显示器(触摸屏显示器)、投影仪、触摸板、鼠标、轨迹球、光笔、扬声器、麦克风等。
联网装置(1706)选自能够通过网络接收和发送数据的设备,诸如以太网卡、WLAN/wi-fi模块、蓝牙模块、BLE模块、NFC模块、IrDa、RFID模块、GSM调制解调器等。所述装置(1705)使得能够经由有线或无线数据信道(诸如WAN、PAN、LAN、内联网、因特网、WLAN、WMAN或GSM)进行数据交换。
设备(1700)的部件经由公共数据总线(1710)接口。
这些申请材料公开了所要求保护的技术方案的优选实施例,不应用于限制其在所要求保护的范围内并且对于相关领域的技术人员来说是显而易见的其他特定实施例。
Claims (8)
1.一种用于开发和实现基于web的软件应用程序的云系统,所述云系统由通过API相互通信的微服务组成,其特征在于,所述微服务是:
元模型服务,所述元模型服务包括元数据存储库和元模型界面服务,其中所述元模型服务可以用至少一个主从服务来扩充,用于请求的负载均衡;
元数据管理服务,所述元数据管理服务包括web界面,所述web界面用于处理元数据、并与所述元模型服务通信以接收和修改元数据、被设计为提供用于处理构成应用程序模块配置的元数据的用户友好工具;用于构建应用程序界面形式的可视化编辑器的实现;元语言源代码的可视化编辑器;用于处理元语言中描述的元数据版本的机制的实现,用于将元数据转换为其他语言以本地化应用程序的工具;
元语言交叉编译器服务,所述元语言交叉编译器服务被设计为允许将表示应用程序对象的业务逻辑描述的元语言源代码翻译为Erlang代码,将生成的Erlang代码编译为用于Erlang虚拟机的二进制代码,其可加载并由应用程序运行时服务执行;
会话管理服务,所述会话管理服务被设计为允许用户授权、会话创建、具有所需元数据的执行器服务搜索、具有所需元数据的执行器服务启动、执行器进程和web界面创建、和用至少一个主从服务来扩充,用于请求的负载均衡;
应用程序执行器服务,所述应用程序执行器服务被设计为允许加载和执行存储在系统存储库中的应用程序,作为一组复杂元对象,包括在特定用户会话内以编译二进制代码形式的业务逻辑描述,并且其可以通过至少一个服务来扩充,用于请求的负载均衡;
外部数据接口服务,所述外部数据接口服务被设计为允许使用外部数据库和web服务;
系统的外部API服务。
2.根据权利要求1所述的系统,其特征在于,所述元语言交叉编译器包含词法分析器、语法分析器和Erlang代码生成器。
3.根据权利要求1所述的系统,其特征在于,所述应用程序执行器服务包括执行器核心、元数据高速缓存、web界面和按需动态创建的运行时进程。
4.根据权利要求1所述的系统,其特征在于,所述外部数据接口服务被设计为允许通过针对相关数据源的具体情况定制的连接器使用外部数据库。
5.根据权利要求1所述的系统,其特征在于,所述外部数据接口服务被设计为允许统一的API来处理数据或网络服务。
6.一种用于开发和实现基于web的软件应用程序的方法,其特征在于,所述方法包括以下阶段:
通过元数据管理服务和元模型服务使用编译类型元语言,将应用程序对象描述为存储在元数据存储库中的元数据,其中所述应用程序对象是基于元模型类描述来描述的;
呈现为包含属性、嵌套对象的一组元对象的描述的元数据以及实现对象的事件和程序的元语言的源代码被转换为Erlang代码,其中,将元语言的源代码与语言文法进行比较、生成识别的语言中的词素列表、对获得的词素列表进行句法地语法分析、语法分析词素后构建语法树、并对语法分析词素后构建的语法树进行语义分析、通过转换元语言的源代码获得Erlang代码、将获得的Erlang代码编译为用于Erlang虚拟机的可执行的二进制代码;以及将生成的可执行二进制代码写入系统存储库;
在运行生成的应用程序之后,使用会话管理服务创建会话并使用必要的元数据搜索执行器服务、使用必要的元数据启动执行器服务、并创建执行器进程和web界面;
使用执行器服务运行和执行来自系统存储库的二进制代码,其中二进制代码直接在Erlang虚拟机上执行。
7.根据权利要求6所述的方法,其特征在于,元模型包括类、子类、属性、行为、类型和子类型。
8.根据权利要求6所述的方法,其特征在于,对象类的描述包括附加类和现有类的继承。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
RU2020136739A RU2020136739A (ru) | 2020-11-09 | Система и способ создания и исполнения высоко масштабируемых облачных приложений | |
RU2020136739 | 2020-11-09 | ||
PCT/RU2020/000595 WO2022098253A1 (ru) | 2020-11-09 | 2020-11-10 | Система и способ создания и исполнения высоко масштабируемых облачных приложений |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116391172A true CN116391172A (zh) | 2023-07-04 |
Family
ID=81458123
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080107056.0A Pending CN116391172A (zh) | 2020-11-09 | 2020-11-10 | 用于创建和执行高度扩展的云应用的系统和方法 |
Country Status (3)
Country | Link |
---|---|
EP (1) | EP4242830A1 (zh) |
CN (1) | CN116391172A (zh) |
WO (1) | WO2022098253A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115640045B (zh) * | 2022-12-26 | 2023-04-07 | 卓望数码技术(深圳)有限公司 | 基于领域驱动设计的低代码开发平台及业务系统创建方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102063324A (zh) * | 2010-12-31 | 2011-05-18 | 杭州依赛通信有限公司 | 一种实现自动化编程的方法及系统 |
US20130159981A1 (en) * | 2011-12-15 | 2013-06-20 | Sap Ag | Extension mechanism for scripting language compiler |
CN106445494A (zh) * | 2009-10-14 | 2017-02-22 | 韦尔迈格服务有限公司 | 自动化企业软件开发 |
US20180196899A1 (en) * | 2015-10-28 | 2018-07-12 | Fractal Industries, Inc. | System and methods for multi-language abstract model creation for digital environment simulations |
CN108885545A (zh) * | 2016-03-23 | 2018-11-23 | 雾角系统公司 | 用于实时数据流编程语言的工具和方法 |
US20190261433A1 (en) * | 2017-06-22 | 2019-08-22 | William Jason Turner | Software architecture for iot device collector |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7735062B2 (en) | 2005-01-21 | 2010-06-08 | Outsystems—Software Em Rede, S.A. | Software development system and method |
US8959477B2 (en) * | 2011-10-21 | 2015-02-17 | Sap Se | Scripting language for business applications |
-
2020
- 2020-11-10 WO PCT/RU2020/000595 patent/WO2022098253A1/ru active Application Filing
- 2020-11-10 EP EP20960940.3A patent/EP4242830A1/en active Pending
- 2020-11-10 CN CN202080107056.0A patent/CN116391172A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106445494A (zh) * | 2009-10-14 | 2017-02-22 | 韦尔迈格服务有限公司 | 自动化企业软件开发 |
CN102063324A (zh) * | 2010-12-31 | 2011-05-18 | 杭州依赛通信有限公司 | 一种实现自动化编程的方法及系统 |
US20130159981A1 (en) * | 2011-12-15 | 2013-06-20 | Sap Ag | Extension mechanism for scripting language compiler |
US20180196899A1 (en) * | 2015-10-28 | 2018-07-12 | Fractal Industries, Inc. | System and methods for multi-language abstract model creation for digital environment simulations |
CN108885545A (zh) * | 2016-03-23 | 2018-11-23 | 雾角系统公司 | 用于实时数据流编程语言的工具和方法 |
US20190261433A1 (en) * | 2017-06-22 | 2019-08-22 | William Jason Turner | Software architecture for iot device collector |
Non-Patent Citations (2)
Title |
---|
腾讯云 开发者社区: "3.交叉编译Erlang / OTP | 3. Cross Compiling Erlang/OTP", pages 1 - 5, Retrieved from the Internet <URL:《https://cloud.tencent.com/developer/section/1122645》> * |
陈伟杰: "面向传统媒体企业的ERP系统研究与实现", 《中国优秀硕士学位论文全文数据库 信息科技辑》, no. 2, 15 February 2020 (2020-02-15), pages 138 - 423 * |
Also Published As
Publication number | Publication date |
---|---|
WO2022098253A1 (ru) | 2022-05-12 |
EP4242830A1 (en) | 2023-09-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Smith et al. | MapReduce program synthesis | |
US10698682B1 (en) | Computerized software development environment with a software database containing atomic expressions | |
US8296744B2 (en) | Tree-based directed graph programming structures for a declarative programming language | |
Varró et al. | The model transformation language of the VIATRA2 framework | |
US8321833B2 (en) | Compact syntax for data scripting language | |
Yi | POET: a scripting language for applying parameterized source‐to‐source program transformations | |
US20100088686A1 (en) | Programming language with extensible syntax | |
JP2005018776A (ja) | クエリ中間言語の方法およびシステム | |
US10019243B2 (en) | Packaging system to facilitate declarative model-driven development | |
JP6046346B2 (ja) | 宣言データのスクリプト言語のための型システム | |
US20080263063A1 (en) | Translating late bound linq expressions into database queries | |
US9292586B2 (en) | System and method for synchronizing a repository with a declarative defintion | |
US11294665B1 (en) | Computerized software version control with a software database and a human database | |
Yang et al. | Powerstation: Automatically detecting and fixing inefficiencies of database-backed web applications in ide | |
Hegedüs et al. | Query-driven soft traceability links for models | |
EP4242830A1 (en) | System and method for creating and executing highly scaled cloud applications | |
US20100088283A1 (en) | System and method for managing database applications | |
Kalinichenko et al. | Constructing of Mappings of Heterogeneous Information Models into the Canonical Models of Integrated Information Systems. | |
Adamus et al. | Overview of the Project ODRA. | |
Dyer | Bringing ultra-large-scale software repository mining to the masses with Boa | |
EA046340B1 (ru) | Система и способ создания и исполнения высокомасштабируемых облачных приложений | |
Armonas et al. | Using attributes and merging algorithms for transforming OCL expressions to code | |
WO2008130769A2 (en) | Runtime translation from late-bound to early-bound expression | |
Haase et al. | D3. 1.1 Ontology Management and Evolution–Survey, Methods and Prototypes | |
Uwimbabazi | Automated Replication of Tuple Spaces via Static Analysis and Transformation of Go Programs |
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 |