一种适用于微服务应用的运行时脚本管理和执行的方法
文献发布时间:2024-01-17 01:15:20
技术领域
本申请涉及SaaS系统二次开发技术领域,具体涉及一种适用于微服务应用的运行时脚本管理和执行的方法。
背景技术
在企业软件应用市场上,SaaS(Software-as-a-Service)企业应用的发展较为迅速,市场占有率不断提高,大量的企业客户开始接受并购买SaaS企业软件。这种SaaS应用普遍有着云端部署,开箱即用,按订阅收费的特点,属于一种不同于传统企业应用的新型企业应用。
随着SaaS的发展,越来越多的企业使用在SaaS的同时,也为SaaS软件的开发商提出了新的挑战:要如何解决企业客户日渐变化的需求?要如何解决不同企业之间的不同逻辑?传统的解决方案是在开发人员针对特定企业修改代码后,经过各种环境的测试以及层层审批,把最终的版本提交到相应分支并发布,虽然近些年k8s技术带来了高可用的部署方式,但是这样的一套传统流程耗时久,涉及人员众多,在细节性的把控上很难掌握,更要考虑不能影响到其他租户。
在传统的SaaS软件开发中,部署应用是一个非常严肃的事情,某些服务由于其特殊性,即使有滚动部署这类的新型应用部署方式也不适合经常去部署,这也就导致了一旦客户有需求只能有两种选择,要么是等待特定的时间点统一部署,要么是冒着一定的风险进行部署,但是无论哪种方式都可能会对自己或其他租户造成影响,同样也增大了许多时间成本。
同样对于软件开发商来说,做SaaS软件最难解决的一个点在于不同的企业租户之间会有各式各样的不同需求,随着租户的增加,若通过传统方式解决,就需要增加大量的开发成本。
发明内容
基于此,本发明提供一种适用于微服务应用的运行时脚本管理和执行的方法,旨在解决传统二次开发方式带来的负面影响的同时,提升开发效率,降低开发门槛,节约开发成本。
第一方面,一种适用于微服务应用的运行时脚本执行的方法,包括:
执行标准应用程序;所述标准应用程序在标准执行流程的不同位置分别设置有各类不同的挂载点,使得这些位置的原有功能能够被改变或增加;
当所述标准应用程序执行到某一挂载点时,检查中心缓存中是否存在当前挂载点对应的当前租户所需执行的脚本;
若不存在,则继续执行标准应用程序;
若存在,则获得该脚本的编码内容并执行;若执行成功,则当前挂载点处获得并携带脚本执行结果继续执行后续的标准应用程序;若执行失败,则终止本次标准执行流程,并将错误返回给用户。
可选地,所述中心缓存存储有分别对应于不同挂载点的多个脚本,每个脚本文件除脚本代码本身外,还包含该脚本文件所属租户和所属挂载点的信息。
可选地,所述中心缓存存储的脚本均提取自预先建立的脚本库。
可选地,所述获得该脚本的编码内容并执行,具体包括:
获得该脚本的编码内容后,将当前线程视为监控线程,启动另一线程作为执行线程,当前线程不做休眠,而是以设定的频率不断获取所述执行线程的资源消耗量;
在监控过程中,监控线程若判断执行线程的资源消耗量大于设定值,则强行中止执行线程,执行线程的脚本会被中断,并将错误返回给用户;
若所述执行线程执行完毕后,资源消耗量未超出设定值,则监控线程收集执行结果,并将执行结果返回给用户。
第二方面,一种适用于微服务应用的运行时脚本管理的方法,包括:
接收用户编写的脚本,并存入脚本库;每个脚本在提交时需包含脚本代码本身、以及所属租户和所属挂载点,其中,所属挂载点的信息用以标识该脚本应在何处被执行,所属租户的信息用以标识该脚本应在哪一个租户进行业务操作时被执行;
当接收到脚本上线指令时,从脚本库中获取需要上线的目标脚本,并将其传输至中心缓存;
当接收到脚本下线指令时,将需要下线的目标脚本从中心缓存中删除。
可选地,所述脚本库中存储的多个脚本分别实现的功能包括:
(1)高精度数字计算;
(2)日期处理;
(3)密码学处理;
(4)值集查询;
(5)消息发送;
(6)集群内API调用;
(7)对外API调用;
(8)业务规则定义,配置表,编码规则调用;
(9)保证事务的数据库读写。
可选地,所述脚本的编写基于ECMAScript实现。
可选地,所述脚本库允许每个挂载点、每个租户上传一份脚本。
第三方面,一种计算机设备,包括存储器和处理器,所述存储器存储有第一计算机程序和第二计算机程序,其特殊之处在于,所述第一计算机程序被处理器执行时实现上述的适用于微服务应用的运行时脚本执行的方法,所述第二计算机程序被处理器执行时实现上述的适用于微服务应用的运行时脚本管理的方法。
第四方面,一种计算机可读存储介质,其上存储有第一计算机程序和第二计算机程序,其特殊之处在于,所述第一计算机程序被处理器执行时实现上述的适用于微服务应用的运行时脚本执行的方法,所述第二计算机程序被处理器执行时实现上述的适用于微服务应用的运行时脚本管理的方法。
本发明至少具有以下有益效果:
本发明可以实现在线修改代码并立刻生效,开发人员只需要在标准代码中的合适位置添加一个埋点(挂载点),即可通过在页面上编码Javascript代码的方式针对不同租户的不同逻辑进行不同的逻辑处理,并且保存即生效;从而提升了开发效率,实现高效部署,且降低开发门槛,甚至让租户自身可以参与自身需求的开发,以达到更灵活的实现需求,节约开发成本。
附图说明
图1为本发明一个实施例提供的脚本提交的流程示意图;
图2为本发明一个实施例提供的脚本执行的流程示意图;
图3为本发明一个实施例提供的脚本引擎的功能图;
图4为本发明一个实施例提供的脚本执行器内部资源沙盒流程示意图;
图5为本发明一个实施例提供的脚本管理及执行的应用示例。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本发明是一种服务于在多租户SaaS系统中,为不同租户进行二次开发的整体方案。本发明提供的标准服务允许在一些挂载点新增逻辑,这些逻辑的载体是脚本,对于不同的租户,每个挂载点可挂在一个脚本,脚本由开发人员编写。
在一个实施例中,如图1所示,脚本的提交包括以下步骤:
a)脚本提交:开发人员在编写完一份脚本后,可存入脚本库中,脚本库帮助开发人员管理和存储现有脚本。每个脚本在提交时需包含脚本代码本身,以及所属租户和所属挂载点,后者用以标识该脚本应在何处被执行,在哪一个租户进行业务操作时被执行。
b)脚本启用与禁用:脚本所代表的的功能在需要上线时,可进行启用动作,该动作从脚本库中获取脚本,并将内容传输至中心缓存。脚本所代表的功能在需要下线时(一般是需修正或废弃),可进行禁用动作,该动作从中心缓存删除脚本。中心缓存具有快速和即时的特点,是标准服务运行过程中判断与获得脚本的依据。
c)脚本的提交可由开发人员自行在脚本管理与编写页完成,该编写页提供脚本编写,脚本试运行,执行日志与结果展示,启用与禁用等功能。
在一个实施例中,如图2所示,脚本的执行涉及标准功能逻辑与脚本逻辑的耦合,包括以下步骤:
1)挂载点检查:标准应用功能中包含多个挂载点,当执行到某一挂载点时,检查中心缓存中是否有本挂载点本租户所需执行的脚本(本实施例允许每个挂载点,每个租户上传一份脚本),若存在,则获得该脚本的编码内容,提交至脚本引擎服务进行执行,并获得结果;若不存在,则继续执行标准逻辑
2)脚本执行:挂载点判断脚本存在的情况下,标准程序将从中心缓存获得脚本,提交至脚本执行器服务执行。若执行成功,该挂载点处获得脚本执行结果,并携带这些结果继续执行标准应用逻辑;若执行失败,则终止本次标准程序执行,将错误抛出。
挂载点是标准应用程序与脚本逻辑的衔接点,在整个标准应用中,有各类不同的挂载点分别位于标准应用流程不同的位置,使得这些位置的原有功能可以被改变或增加。当脚本存在且脚本有返回值时,挂载点将使用脚本的返回值替换原本的标准应用流程本挂载点的结果变量(具体的变量因挂载点不同而不同,由标准程序自行决定并给出说明,例如订单提交前挂载点,可更改订单提交的具体数据,进而控制标准功能的后续执行),从而使得脚本获得对标准应用后续流程的控制权;当脚本存在但脚本无返回值时,脚本一般用于扩充新的功能,这些功能则直接在脚本内容中编写,在脚本引擎执行该脚本的过程中实现。
挂载点执行设计,目的在于使标准应用程序执行中,可附加某些脚本逻辑,这些脚本是为每个租户自身开发的,可满足租户的各类功能定制需求。
ECMAScript是信息行业内常用的前端页面编码语言,如图3所示,本发明实施例的脚本引擎基于ECMAScript基础上设计,用于后端逻辑的编写,并添加用于支持后端逻辑编写的特性;该设计主要是考虑到ECMAScript受众广泛,可降低开发的学习难度,从而使得开发成本下降。
该脚本引擎支持运行的脚本语言是ECMAScript与特定功能的混合体,这些功能提供给脚本开发者使用,使其可以通过这些功能完成开发者的任务,即语言的能力决定了脚本的能力,也最终决定了脚本引擎整体可以为标准功能所带来的扩展能力,具体包括:
(1)数字、日期处理、密码学处理:高精度数字计算,使用Java语言中BigDecimal开发实现;支持更多格式的日期处理功能;RSA、AES等业务常用密码学支持,使用Java语言扩充实现。这使得开发人员编写的脚本可以具备这些能力。
(2)集群内,集群外API调用:使用Java语言扩充实现脚本用Http客户端,支持使用Http协议与集群内外的其他服务进行数据交换,使得开发人员编写的脚本具备远程调用能力。
(3)其他:脚本引擎需满足各类与SaaS应用相关的需求,例如数据库读写,站内信,站外信发送等等,故开发一些列工具予以支持,使得开发人员编写的脚本可以实现这些功能.
充足的扩展功能为开发者提供了足够大的开发空间,使其能够完成功能开发,充分地满足开发需求。
具体负责执行某个脚本的服务为脚本执行器,它是一个Java编写的微服务应用,包含ECMAScript引擎与各类能力扩展,对外仅提供脚本执行功能;脚本执行器服务具有无状态的特点,使其可根据负载情况进行扩容;脚本执行器内设计有资源沙盒逻辑,可确保在资源层面防止恶意脚本;脚本引擎内设计有权限控制逻辑,可确保每个租户仅可通过脚本访问自身的数据,使用自身的资源,这个控制逻辑是由各个扩展功能实现的,并不是集中的。
图4是本发明技术方案的脚本执行器内部资源沙盒流程图,脚本执行器所执行的脚本内容是不特定的,多种多样的,需进行资源沙盒控制来确保恶意脚本即时被终止。资源沙盒运行流程如下:
(1)脚本引擎收到脚本,将当前线程视为监控线程,启动另一线程作为执行线程,当前线程不做休眠,而是以一定频率不断获取执行线程的资源消耗量。
(2)在监控过程中,监控线程若判断执行线程的资源消耗量大于设定值,则强行中止执行线程,执行线程的脚本会被中断,脚本引擎将错误返回给请求者。
(3)若在脚本执行完毕后,资源消耗量未超出,则监控线程收集执行结果,将执行结果返回给请求者。
本发明整体性的实现流程如图5所示。本发明通过扩展ECMAScript的语言能力,使其具备编写复杂后端逻辑的能力,并在执行端与标准应用结合,形成脚本引擎体系,使开发者可以通过脚本编写完成大多数标准应用二次功能开发;再通过提供脚本库与脚本管理功能,使开发人员可以在页面提交脚本到系统,并随时启用与禁用,从而实现了开发人员所开发功能的随时上线与下线(热部署)。相比于传统的开发模式,该开发模式在开发成本上更低,在发布流程上更简便,同时对于嵌入本发明的SaaS系统来说,可将整个功能向租户开放,使得租户可以自行进行功能的开发。
本发明的直接效果便是提升开发人员的工作效率,以专门面对不同租户需求的开发小组为例,该开发小组使用本发明后,人均月解决需求数量由人均8个提升为人均25+,所带来的开发效率的提升明显。得益于脚本引擎提供能众多扩展功能,避免了许多需求的二开项目创建,大大降低了侵入式二次开发带来的风险。得益于脚本便捷上下线所带来的快速发布能力,功能发布风险明显降低。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。上述计算机程序至少分为两方面,一方面涉及脚本管理的方法,另一方面涉及脚本执行的方法。其中:
A、脚本管理的方法,包括以下步骤:
接收用户(可以是开发人员,也可以是租户)编写的脚本,并存入脚本库;每个脚本在提交时需包含脚本代码本身、以及所属租户和所属挂载点,其中,所属挂载点的信息用以标识该脚本应在何处被执行,所属租户的信息用以标识该脚本应在哪一个租户进行业务操作时被执行;
当接收到脚本上线指令时,从脚本库中获取需要上线的目标脚本,并将其传输至中心缓存;
当接收到脚本下线指令时,将需要下线的目标脚本从中心缓存中删除。
B、脚本执行的方法,包括以下步骤:
执行标准应用程序;所述标准应用程序在标准执行流程的不同位置分别设置有各类不同的挂载点,使得这些位置的原有功能能够被改变或增加;
当所述标准应用程序执行到某一挂载点时,检查中心缓存中是否存在当前挂载点对应的当前租户所需执行的脚本;
若不存在,则继续执行标准应用程序;
若存在,则获得该脚本的编码内容并执行;若执行成功,则当前挂载点处获得并携带脚本执行结果继续执行后续的标准应用程序;若执行失败,则终止本次标准执行流程,并将错误返回给用户。
在一个实施例中,还提供了一种计算机可读存储介质,其上存储有计算机程序,涉及上述实施例方法中的全部或部分流程。
驱动上述实施例方法流程的脚本引擎是基于ECMAScript脚本语言与特定功能基组成的的执行引擎。该引擎提供脚本管理,脚本执行能力,允许多租户应用中,每个租户上传包含各自不同逻辑的脚本,并在标准应用的基础上生效,从而改变或新增逻辑或功能。
本发明实施例可以实现在线修改代码并立刻生效,开发人员只需要在标准代码中的合适位置添加一个埋点,即可通过在页面上编码Javascript代码的方式针对不同租户的不同逻辑进行不同的逻辑处理,并且保存即生效。这样既能为客户提供低门槛的二次开发方式,又能高效部署。
在传统的开发模式中,修改逻辑代码需要经历一系列发布流程,耗费较多开发资源,而通过该引擎可以开发成果实现修改即生效,从而为SaaS系统提供了一种高效的二次开发解决方案。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
- 一种脚本执行过程中图像匹配的方法及装置
- 一种脚本执行方法及装置
- 用于在运行时将移动应用程序分解为微服务(MS)以进行分布式执行的方法、装置和系统
- 微服务运行时智能预测调度的方法及应用