一种适用于LINUX操作系统的云函数执行系统及方法与流程

文档序号:17535819发布日期:2019-04-29 13:58阅读:295来源:国知局
一种适用于LINUX操作系统的云函数执行系统及方法与流程

本发明涉及云计算领域,具体涉及一种适用于linux操作系统的云函数执行系统及方法。



背景技术:

云函数服务是一项计算服务,可使用户无需预配置或管理服务器,直接上传云函数即可运行代码。借助云函数服务,用户几乎可以为任何类型的应用程序或后端服务运行代码,而且无需执行任何管理。云函数服务在可用性高的计算基础设施上运行用户的代码,执行计算资源的所有管理工作,其中包括服务器和操作系统维护、容量预置和自动扩展、代码监控和记录。用户只需要以云函数服务支持的任何一种编程语言提供代码。

云函数计算是最近两年发展起来的概念,是云计算中的新模式。在没有云函数之前,现有技术中,用户想要托管运行程序代码,需要编译好可执行程序,然后上传到服务器里,按需或定时运行可执行程序。如果程序代码有变更,那么需要重新编译代码进行部署。这种方式缺乏方便性、灵活性和可靠性,且现有技术没对不同程序的进程进行隔离,不能很好地单独控制托管程序的行为和资源使用。



技术实现要素:

为了克服上述技术缺陷,本发明提供一种适用于linux操作系统的云函数执行系统及方法,可实现高效的轻量级云函数沙箱执行环境,并有效地控制云函数的运行,具有方便部署管理、执行灵活高效和可靠控制的特点。

为了解决上述问题,本发明按以下技术方案予以实现的:

一种适用于linux操作系统的云函数执行系统,包括:

函数接收模块,用于接收用户输入的云函数,并在接收到所述云函数时发送沙盒构建指令至沙盒构建模块;所述云函数包括函数代码和函数类型;

所述沙盒构建模块,用于在接到所述沙盒构建指令时,调用linux系统函数,在操作系统中为所述云函数建立单独的执行进程;所述执行进程与所述操作系统中的其他进程相互隔离;

执行模块,用于在所述单独的执行进程中,选取所述函数类型对应的编译器执行所述函数代码并得到执行结果;

结果输出模块,用于输出所述执行结果。

进一步的,所述沙盒构建模块包括:

进程建立模块,用于调用linux操作系统的namespace机制建立所述执行进程;

文件隔离模块,用于调用linux操作系统的chroot()函数,更改所述执行进程的根目录到目标文件夹;所述目标文件夹的目录结构与所述操作系统linux系统文件的目录结构一致;

物理资源分配模块,用于调用linux操作系统的controlgroups机制为所述执行进程分配物理资源;所述物理资源包括cpu、内存、磁盘i/o和网络带宽。

进一步的,所述进程建立模块包括:

id隔离模块,用于创建pidnamespace隔离所述执行进程的进程id;

网络隔离模块,用于创建networknamespace隔离所述执行进程的网络功能;

通信隔离模块,用于创建ipcnamespace隔离所述执行进程与其他进程的通信交互;

挂载点隔离模块,用于创建mountnamespace隔离所述执行进程的挂载点。

进一步的,所述执行模块包括:

代码执行模块,用于执行所述函数代码;

执行参数设定模块,用于设定所述函数代码的执行参数;所述执行参数包括最大执行时间、最大可用内存、执行请求id、云函数id、执行日志id、日志输出编号、结果输出编号。

进一步的,所述执行模块还包括执行监控模块,用于在所述代码执行模块执行的时间超过所述最大执行时间时,或所述代码执行模块执行的内存超过所述最大可用内存时,结束所述执行进程。

本发明同时还对应公开了一种适用于linux操作系统的云函数执行方法,其步骤包括:

s1、函数接收模块接收用户输入的云函数,并在接收到所述云函数时发送沙盒构建指令至沙盒构建模块;所述云函数包括函数代码和函数类型;

s2、所述沙盒构建模块在接到所述沙盒构建指令时,调用linux系统函数,在操作系统中为所述云函数建立单独的执行进程;所述执行进程与所述操作系统中的其他进程相互隔离;

s3、执行模块在所述单独的执行进程中,选取所述函数类型对应的编译器执行所述函数代码并得到执行结果;

s4、结果输出模块输出所述执行结果。

进一步的,所述沙盒构建模块包括:

进程建立模块,用于调用linux操作系统的namespace机制建立所述执行进程;

文件隔离模块,用于调用linux操作系统的chroot()函数,更改所述执行进程的根目录到目标文件夹;所述目标文件夹的目录结构与所述操作系统linux系统文件的目录结构一致;

物理资源分配模块,用于调用linux操作系统的controlgroups机制为所述执行进程分配物理资源;所述物理资源包括cpu、内存、磁盘i/o和网络带宽。

进一步的,所述进程建立模块包括:

id隔离模块,用于创建pidnamespace隔离所述执行进程的进程id;

网络隔离模块,用于创建networknamespace隔离所述执行进程的网络功能;

通信隔离模块,用于创建ipcnamespace隔离所述执行进程与其他进程的通信交互;

挂载点隔离模块,用于创建mountnamespace隔离所述执行进程的挂载点。

进一步的,所述执行模块包括:

代码执行模块,用于执行所述函数代码;

执行参数设定模块,用于设定所述函数代码的执行参数;所述执行参数包括最大执行时间、最大可用内存、执行请求id、云函数id、执行日志id、日志输出编号、结果输出编号。

进一步的,所述执行模块还包括执行监控模块,用于在所述代码执行模块执行的时间超过所述最大执行时间时,或所述代码执行模块执行的内存超过所述最大可用内存时,结束所述执行进程。

相对于现有技术,本发明的有益效果为:

本发明公开了一种适用于linux操作系统的云函数执行系统及方法,用户只需将欲执行的云函数输入函数接收模块,沙盒构建模块便可以自动为云函数创建执行进程并由执行模块进行执行,最后用户只需通过结果输出模块即可获取函数的执行结果,上述系统可实现高效的轻量级云函数沙箱执行环境,并有效地控制云函数的运行,具有方便部署管理、执行灵活高效和可靠控制的特点。

附图说明

图1是本发明所述的云函数执行系统的结构示意图;

图2是本发明所述的云函数执行方法的步骤示意图;

图3是本发明实施例1所述的云函数执行方法的步骤示意图;

图4是本发明实施例1所述的云函数沙箱结构示意图;

图5是本发明实施例1所述的结果输出模块返回的执行结果的示意图。

具体实施方式

以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。

如图1所示,本发明公开了一种适用于linux操作系统的云函数执行系统,包括:

函数接收模块1,用于接收用户输入的云函数,并在接收到云函数时发送沙盒构建指令至沙盒构建模块2;云函数包括函数代码和函数类型;

沙盒构建模块2,用于在接到沙盒构建指令时,调用linux系统函数,在操作系统中为云函数建立单独的执行进程;执行进程与操作系统中的其他进程相互隔离;

执行模块3,用于在单独的执行进程中,选取函数类型对应的编译器执行函数代码并得到执行结果;具体的,编译器可以包括,但不限于,python、node.js、java、c#或go语言的编译器;

结果输出模块4,用于输出执行结果。

通过上述公开的云函数执行系统,用户只需将欲执行的云函数输入函数接收模块,沙盒构建模块便可以自动为云函数创建执行进程并由执行模块进行执行,最后用户只需通过结果输出模块即可获取函数的执行结果,上述系统可实现高效的轻量级云函数沙箱执行环境,并有效地控制云函数的运行,具有方便部署管理、执行灵活高效和可靠控制的特点。

如图2所示,本发明还对应公开了一种适用于linux操作系统的云函数执行方法,其步骤包括:

s1、函数接收模块接收用户输入的云函数,并在接收到云函数时发送沙盒构建指令至沙盒构建模块;云函数包括函数代码和函数类型;

s2、沙盒构建模块在接到沙盒构建指令时,调用linux系统函数,在操作系统中为云函数建立单独的执行进程;执行进程与操作系统中的其他进程相互隔离;

s3、执行模块在单独的执行进程中,选取函数类型对应的编译器执行函数代码并得到执行结果;具体的,编译器可以包括,但不限于,python、node.js、java、c#或go语言的编译器;

s4、结果输出模块输出执行结果。

实施例1

云函数程序是任意计算机编程语言编写的一个方法(function),当然,此方法也可能会调用许多外部方法或第三方程序库。云函数程序执行时可以附带传入参数,执行过程中可以输出进度等信息,执行完毕后可以返回结果。

当使用一个以linux为操作系统的服务器作为云函数的运行环境时,服务器中可能会同时运行多个不同的云函数,不同的云函数可能归属不同的用户,为了通讯安全和数据安全,各个云函数进程之间需要做到网络隔离,进程id隔离,进程信号隔离,挂载点隔离等等,不能让云函数进程互相探测彼此。

具体的,本实施方式中所提及的模块均可以为某一部分代码函数实现的功能,未必指定一硬件结构。

据此,如图3所示,本实施例公开了一种云函数执行方法,首先,操作人员对云函数执行系统发起调用;此调用可以为通过指令符使能云函数执行系统;

接着,函数接收模块接收用户输入的云函数,并在接收到云函数时发送沙盒构建指令至沙盒构建模块;云函数包括函数代码和函数类型;云函数被执行时,可以传入约定格式(比如json、xml等)的函数类型参数到程序的执行入口。同时也会通过配置或环境变量等方式告知云函数进程一些上下文,比如云函数最大执行时间,最大可用内存,可反馈日志的管道(pipe),可接收结果的管道等等,

接着,沙盒构建模块在接到沙盒构建指令时,调用linux系统函数,准备云函数沙箱,即在操作系统中为云函数建立单独的执行进程;执行进程与操作系统中的其他进程相互隔离;具体的,沙盒构建模块使用linux系统调用(systemcall)clone()和setns()构建内核提供的namespaces,实现云函数环境的隔离。namespaces允许一个进程以及它的子进程从共享的宿主机内核资源(网络栈、进程列表、挂载点等)里获得一个仅自己可见的隔离区域,让同一个namespace下的所有进程感知彼此变化,对外界进程一无所知,仿佛运行在一个独占的操作系统中。创建pidnamespace隔离进程id,创建networknamespace隔离网络相关功能,创建ipcnamespace隔离进程信号量、消息队列和共享内存,创建mountnamespace隔离挂载点(文件系统)。这样处理后,云函数进程就能逻辑上运行在一个隔离的环境中,内部程序跟运行在一个独立操作系统中没有区别,但是无法感知宿主机上的其它进程。

云函数进程运行过程中可能需要读写文件系统里的文件,那么就需要隔离进程所读写的目录。通过预先准备好的linux系统文件目录结构一致的文件夹,再使用linux系统调用chroot()更改云函数进程的根目录到这个文件夹,那么就可以让云函数进程读写文件和调用系统命令隔离在这个文件夹下。

虽然云函数进程的运行环境已经隔离了,但是云函数进程使用的物理资源还没有隔离,比如cpu、内存、磁盘i/o和网络带宽。不能让某个用户的云函数占用过多资源而影响其他用户运行云函数。那么我们可以利用linux内核提供的controlgroups(简称cgroups)机制来实现云函数进程的资源隔离。创建cgroup为云函数进程组分配cpu、内存、磁盘i/o和网络带宽等资源,限制资源使用,控制优先级,控制任务调度。

建立的沙箱结构如图4所示,每一沙箱分别通过linuxkernel也即linux系统中的通道调用cpu(中央处理器)、ram(运行内存)、disk(磁盘)、network(网络)的资源。

接着,执行模块调用云函数入口,并在单独的沙箱中,选取函数类型对应的编译器以执行云函数代码,并得到执行结果;具体的,执行模块在执行时,可以根据执行设定模块所设定的执行参数进行执行,具体的,可以通过配置或环境变量等方式告知云函数进程一些上下文,比如云函数最大执行时间,最大可用内存,可反馈日志的管道(pipe),可接收结果的管道等执行参数。

最后,结果输出模块返回执行结果,执行结果如图5所示。

由图5可知,执行结果为云函数的输出结果,同时也可以包括云函数的执行日志。

经过测试,实际根据本实施例所示出的云函数执行方法所搭建的系统,设计的调用值可以达到8000次/秒(单机情况下)。

以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,故凡是未脱离本发明技术方案内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1