一种在API请求管道中调用WebAssembly插件的方法和系统与流程

本发明涉及一种电数字数据处理,尤其涉及软件工程设计的,具体为一种在api请求管道中调用webassembly插件的方法和系统。
背景技术:
1、tob软件提供的定制机制包括了对前端交互界面的定制,和对服务端逻辑的定制;前端交互界面定制即在前端界面中注入租户定制的脚本来影响前端的交互行为,或允许租户嵌入自定义的前端组件及页面;服务端逻辑定制有几种方式,一是允许租户自己编写新的业务api,提供给前端或外部接口调用;二是利用aop(aspect oriented programming,面向方面编程)机制,在不修改原有逻辑的情况,对现有的api逻辑进行增补,这种方式称为插件(plugin)或者触发器。
2、随着tob(to business)软件市场的不断发展,多租户saas软件架构已成为主流,这类架构允许软件提供商使用一套软件的一个实例为多个租户提供服务,有效降低了运维成本和提高了资源利用率。然而,不同租户之间的需求差异带来了定制化需求,尤其是在服务端逻辑的定制方面。目前,服务端逻辑定制主要通过提供高级语言sdk、允许上传源代码至服务端编译、或集成脚本解释器等方式实现。尽管这些方法在一定程度上满足了定制需求,但它们各自存在明显的缺陷,限制了tob软件的灵活性、安全性和性能。
3、因此,有必要对现有技术中的在api请求管道中调用webassembly插件的方法和系统进行改进,以解决上述问题。
技术实现思路
1、本发明克服了现有技术的不足,提供一种在api请求管道中调用webassembly插件的方法和系统,旨在解决现有技术中定制化方案的安全性、稳定性和扩展性不足的问题。
2、为达到上述目的,本发明采用的技术方案为:一种在api请求管道中调用webassembly插件的方法,包括:
3、s1、调用者初始化webassembly实例,为webassembly实例分配第一内存,并记录第一内存的第一起始地址;
4、s2、准备具有输入数据结构的对象,将对象序列化后的数据存储在第二内存中,记录第二内存的第二起始地址以及第二内存大小;
5、s3、调用webassembly的内存分配函数,申请第三内存,返回第三内存的内存地址;
6、s4、将对象序列化后的数据复制到webassembly的第三内存中;
7、s5、调用执行函数,获得并解析返回值;
8、s6、将返回值反序列化为具有输出数据结构的对象,并根据具有输出数据结构的对象构造实际的响应值。
9、本发明一个较佳实施例中,步骤s2中,序列化方法为json、protobuf和xml中的一种;当采用json和xml对具有输入数据结构的对象进行序列化时,序列化结果转换成utf-8编码的二进制内容。
10、本发明一个较佳实施例中,步骤s3中,内存分配函数用于调用者向webassembly申请内存,入参为需要申请的内存长度,返回值为所申请的内存地址;所申请的内存地址是webassembly有权限访问的内存块中的相对地址。
11、本发明一个较佳实施例中,步骤s3中,第三内存的大小与第二内存大小一致。
12、本发明一个较佳实施例中,执行函数为webassembly中用于处理业务逻辑的函数;执行函数的第一参数和第二参数共同定义了一个输入内存块;其中第一参数为传入数据的内存地址,第一参数来自于调用内存分配函数的返回值,第二参数为传入数据占用的内存长度。
13、本发明一个较佳实施例中,步骤s5中,执行函数输入第一参数为第三内存地址,第二参数为第三内存的大小;
14、webassembly在执行函数内部,根据第一参数和第二参数反序列化出调用者传入的输入数据;
15、webassembly在执行函数返回前,准备具有输出数据结构的对象,并序列化到webassembly内存中。
16、本发明一个较佳实施例中,一个webassembly导出多个用于处理业务逻辑的函数,函数名称不同,参数类型、参数个数及返回值类型均相同。
17、本发明提供一种在api请求管道中调用webassembly插件的系统,包括:webassembly存储模块,插件定义存储模块,插件匹配模块,插件执行模块;
18、webassembly存储模块,用于存储webassembly的文件内容,为每一个webassembly文件指定唯一的id,并存储webassembly的二进制内容;
19、插件定义存储模块,用于存储webassembly插件的定义;
20、插件匹配模块,用于从api的请求信息中提取插件运行需要的上下文信息,包括:当前用户信息,路由关键信息、请求方法,请求头,请求体;组装成匹配需要的上下文;从插件存储模块和对应的缓存中加载所有的插件定义,将上下文信息带入到每一个插件的匹配规则中进行运算,查找出匹配本次请求的所有有效插件,并按插件的执行位置分组,在同一组内按执行序号排序,在指定的执行位置,按序依次调用插件执行模块,逐个执行插件;
21、插件执行模块,从插件定义模块中找到webassembly的id,在webassembly存储中找到对应的webassembly,加载webassembly的二进制代码,实例化webassembly,并调用在插件定义中指定的webassembly中执行的方法。
22、本发明一个较佳实施例中,插件定义中包含:
23、插件的匹配规则模块,用于判断一个特定api请求是否需要调用此插件;
24、插件调用位置模块,用于指示该插件是在api动作执行之前或者之后被调用;
25、插件调用的排序模块,当同一个api请求,在同一个位置需要调用多个插件,按排序顺序调用;
26、webassembly id模块:通过webassembly的id在webassembly存储中找到对应的webassembly的二进制内容;
27、webassembly函数名称模块:当一个webassembly中包含多个可以调用的方法,定义多个插件,以重用webassembly,减少webassembly的个数
28、本发明解决了背景技术中存在的缺陷,本发明具备以下有益效果:
29、(1)本发明在tob软件服务端的api请求管道中加载webassembly插件,以克服现有定制化方案在安全性、稳定性和扩展性方面的不足。通过webassembly提供的沙箱隔离特性和近乎原生的执行速度,有效限制代码执行的上下文,防止恶意或错误代码影响系统稳定性,同时提高性能和扩展性。
30、(2)本发明通过webassembly的沙箱隔离机制与调用webassembly的方法结合,确保了webassembly插件在一个受限的环境中执行,从而避免了因租户代码引发的安全问题,webassembly的内存管理和执行控制机制使得即便有恶意或错误代码也无法影响到系统的核心部分,实现了更高的安全性保障,与现有技术相比,进一步达到了防止代码越权访问和资源滥用的效果。
31、(3)本发明为webassembly分配了独立的内存空间,并记录起始地址。这一步骤与webassembly的二进制执行特性结合,确保了webassembly代码在独立的沙箱环境中运行,从而提高了系统的安全性;通过步骤s3和步骤s4的结合,实现了对webassembly内存的管理和数据的传递;步骤s3中调用者通过webassembly的内存分配函数申请第三内存,而步骤s4则将序列化后的数据复制到webassembly的第三内存中;这种结合有效地限制了代码执行的上下文,防止恶意或错误代码影响到系统的整体稳定性,实现了资源的安全管理和数据的准确传递,与现有技术相比,进一步达到了增强系统安全性的效果。
32、(4)本发明通过插件匹配模块和插件执行模块的结合,实现了对api请求的动态处理。插件匹配模块根据api请求信息提取上下文信息,并匹配相应的插件,而插件执行模块则负责加载webassembly并执行指定的方法。这种结合使得api请求可以根据不同的上下文信息动态地调用不同的插件,实现了对api请求的灵活处理,与现有技术相比,进一步达到了提高系统适应性和个性化服务能力的效果。
33、(5)本发明实施例二中的webassembly存储模块和插件定义存储模块的设计,允许轻松添加新的webassembly插件,并且可以通过调整插件定义来改变插件的行为而不需更改核心代码,增强了系统的灵活性和可扩展性,与传统方法相比,能够更快速地适应业务需求的变化。
技术研发人员:汪忠田,刘标勇,李文静
技术所有人:苏州瑞云智服信息科技有限公司
备 注:该技术已申请专利,仅供学习研究,如用于商业用途,请联系技术所有人。
声 明 :此信息收集于网络,如果你是此专利的发明人不想本网站收录此信息请联系我们,我们会在第一时间删除
