掌桥专利:专业的专利平台
掌桥专利
首页

一种基于Serverless技术的数值计算方法

文献发布时间:2023-06-29 06:30:04


一种基于Serverless技术的数值计算方法

技术领域

本发明涉及云计算技术领域,具体为一种基于Serverless技术的数值计算方法。

背景技术

科学计算是指利用计算机来进行数学建模和数值计算,从而得到预测、分析、优化等方面的结果。它通常涉及到数值方法、数据分析、统计学、机器学习等多个学科领域。科学计算的几个特点如下:

1)大规模数据处理:科学计算通常需要处理大规模的数据集,这些数据集可能包含数百万或数十亿个数据点。因此,科学计算需要使用高效的算法和数据结构来加速数据处理和分析,以提高计算效率和精度。

2)多维数据分析:科学计算通常涉及到多维数据分析,例如图像处理、信号处理、三维建模等。这些问题需要使用高维数据结构和算法来处理,并且需要使用高效的数据可视化技术来展示结果。

3)高精度计算:科学计算通常需要高精度计算,以获得更准确的结果。例如,在数值模拟中,误差可能会随着时间的推移而累积,因此需要使用高精度算法和数据类型来确保计算的精度和稳定性。

4)大规模并行计算:科学计算通常需要使用大规模并行计算技术,以充分利用高性能计算资源和多核处理器的优势。这些技术可以将计算任务分解成多个子任务,并将其分配给多个计算节点或处理器来同时处理。

5)软件生态系统:科学计算需要使用各种软件工具和库,例如数值库、模拟工具、数据分析工具等。这些工具和库需要互相配合,以实现复杂的计算任务。因此,科学计算通常需要使用成熟的软件生态系统来提供支持和便利。

总之,科学计算的这些特点要求其需要使用高效的算法和数据结构、高性能计算技术、丰富的软件工具和库,以满足各种复杂的计算任务。基于科学计算技术,科学计算软件便应运而生。

科学计算软件是一种专门用于科学计算、工程计算、数据分析、统计学分析等领域的计算机软件。这些软件通常提供了一系列的数值算法、数学函数、统计分析工具、可视化工具等,以便用户能够进行各种复杂的数学计算和数据分析。目前较流行的科学计算软件有:

1)MATLAB[4]:由MathWorks公司开发的一款数学计算软件,它主要用于科学计算、数据分析、控制设计、信号处理、图像处理、机器学习等领域。

2)Mathematica[5]:由Wolfram Research公司开发的一款综合性科学计算软件,它提供了符号计算、数值计算、图形绘制、数据分析、模拟建模等功能。

3)Maple[6]:由加拿大Waterloo Maple公司开发的一款符号计算软件,它支持代数、微积分、线性代数、微分方程、图形绘制等功能。

在众多数值计算软件中,MATLAB是最具代表性的软件之一,它在数值计算方面首屈一指,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案。但是MATLAB在某些方面的缺点也是较为明显的:

1)昂贵的许可证:MATLAB的许可证价格相对较高,这对于个人用户和小型企业可能是一个负担。此外,MATLAB的许可证也限制了用户在多台计算机上使用。

2)硬件依赖性:MATLAB通常需要高性能的计算机和显卡来实现较高的计算性能。这对于低端计算机和移动设备来说是一个限制。

3)缺乏可扩展性:MATLAB是一个基于单机的软件,可扩展性有限,不利于分布式计算和集群计算。这会限制MATLAB在大规模数据处理和计算方面的能力。

4)闭源:MATLAB是一个闭源软件,其源代码不公开,因此用户不能直接修改和定制其功能。这在一定程度上会限制用户在特定应用领域中的灵活性。

Serverless是一种应用的部署和执行模型,旨在让开发者无需关注底层的服务器和软件栈等计算资源,轻松部署和运行自己的应用。Serverless服务提供商接管了几乎所有的管理工作,使得该服务对用户来说更容易使用。函数即服务(FaaS,Function as aService)是Serverless计算的核心,具体表现为云函数的形式。2014年11月13日,AWS发布了产品AWS Lambda。AWS Lambda是一个事件驱动的Serverless计算平台,提供了云函数形式的计算服务。在接下来的几年内,各大云厂商相继推出了自己的FaaS产品。如MicrosoftAzure Functions,Google Cloud Functions,IBM Cloud Functions和阿里云函数计算等。得益于其易用性和弹性执行的特性,FaaS产品近几年在工业界逐渐流行起来。

FaaS与传统的基础设施即服务(Infrastructure-as-a-Service,IaaS)和平台即服务(Platform-as-a-Service,PaaS)有着明显的不同,在许多方面具备更大的优势:

1)易用性:用户只需要上传函数代码,无需关心底层的服务器和基础设施。这极大地简化了应用程序的开发和部署,使开发人员能够更专注于业务逻辑和代码编写。

2)事件驱动的编程模型:FaaS采用事件驱动的编程模型,当有事件触发时,FaaS会自动调用相应的函数执行任务。这种编程模型有助于减少资源浪费和成本,只有在需要时才会使用计算资源。

3)高度可扩展性:FaaS具有高度可扩展性,可以根据需要自动缩放,动态分配计算资源。这意味着应用程序可以快速响应高峰期的需求,而不必为了应对预计的负载而过度投资。

4)服务的可组合性:FaaS允许开发人员将不同的函数组合成更复杂的服务,以满足特定的业务需求,使得应用程序更加灵活。

基于上述内容,本发明提出一种基于Serverless技术的数值计算方法以解决现有科学计算软件使用繁琐,计算性能受制于单机硬件条件以及使用代价昂贵的问题。

发明内容

1、本发明要解决的技术问题

本发明的目的在于提出一种基于Serverless技术的数值计算方法以解决现有科学计算软件使用繁琐,计算性能受制于单机硬件条件以及使用代价昂贵的问题,利用Serverless技术,提供一个易用和高效的科学计算平台,简化科学计算的使用过程,降低用户的使用成本。

2、技术方案

为实现上述目的,本发明提供如下技术方案:

一种基于Serverless技术的数值计算方法,基于Serverless技术,使用python开发一个科学计算平台,完成在线数值计算工作;所述平台具体包括如下功能模块:

①用户文件管理及代码上云模块:实现用户在不需要本地储存的情况下创建计算项目,通过线上编辑界面进行在线代码编辑、上传、保存和运行;

②分布式函数调用模块:实现在主程序内对其他云函数的调用工作,使用平台预设SDK,并根据说明文档传入函数所需参数,完成一次分布式函数的调用;

③参数传递与解析模块:远程过程调用的参数传递过程中,将用户调用云函数的伪代码根据模板代码转换成真实有效的调用云函数的代码;

④自定义云函数模块:用户针对主函数的需求编写自定义的云函数,在自己的项目中使用平台提供的SDK完成调用自己实现的自定义云函数;将用户自定义的云函数作为独立的云上运行模块,经过用户部署实现随时调用;

所述方法具体包括以下内容:

S1、用户在平台上编写好代码后,选择需要运行的代码文件,将选择的代码文件作为调用运行的主程序,代码文件所在的项目作为这一次运行使用的项目,开始计算过程;

S2、平台根据用户选定文件的属性判断用户的代码是否有改动,如果代码文件没有改动,则转至S6,否则进入S3;

S3、平台将用户的主程序当作一个云函数,对用户主程序的代码进行解释,以实现云函数的部署和调用;

S4、借助云存储对用户的代码和数据进行存储,平台将S3中修改后的用户代码上传至云存储;

S5、平台依据云储存上的代码对应部署用户的程序;

S6、运行用户程序,所述用户程序运行在一个安全容器中,所述安全容器的搭建依赖于S3平台代码插入中加入的自定义库;

S7、返回用户程序的数值运算结果和程序运行产生的变量信息,在平台上展示程序执行的变量以及输出结果,运算结束。

优选地,所述用户文件管理及代码上云模块具体包括以下内容:

A1、用户选择需要运行的程序,将其作为主程序,点击运行后,对用户的主程序代码进行解释,添加或修改相应的代码片段;

A2、在主程序的开头插入云函数的入口函数定义,将主程序转换为一个云函数;

A3、在用户代码的末尾加上变量以及日志信息的获取与解析的代码,得到输出日志信息以及显示变量信息,并将其加入到云函数的返回值里;

A4、将解释后的程序上传至云存储,并根据云存储上的响应代码部署程序,然后触发程序运行;

A5、获取到主程序的运行结果。

优选地,所述参数传递与解析模块具体包括以下内容:对于接收用户的不定长度参数,利用python的参数传递机制,将用户的参数放入一个python元组和python字典中,然后使用cloudpickle将所述元组和字典统一序列化成一个字节序列;

对于被调用方,使用cloudpickle解析字节序列,然后将参数传递给实际执行运算逻辑的函数。

优选地,S3中所述对用户主程序的代码进行解释包括代码翻译及代码片段插入,具体包括以下内容:

B1、平台获取到用户代码,对用户代码进行修改;

B2、平台按行读取用户代码文件,对获取到的代码行进行处理;

B3、判断当前代码行是否为空行,如果是空行,直接跳转到B7,否则进入B4;

B4、用户利用平台预置的科学计算函数在语句中简单调用函数的SDK,对所述SDK的使用进行操作以实现代码翻译,判断语句内是否是云函数调用,如果不是,跳转到B7,否则进入B5;

B5、基于B4,平台将该行代码翻译为调用云函数的模板代码;

B6、对主函数的代码行进行缩进处理,将主函数作为一个云函数迁移到云函数文件中;

B7、判断代码文件是否读取结束,如果没有结束,跳转到B2,否则进入B8;

B8、设置代码运行时的文件搜索路径,所述路径与需要运行的项目对应;

B9、添加云函数声明以及变量处理代码片段,代码解释工作结束。

3、有益效果

(1)本发明借助Serverless架构的优点,简化了科学计算过程中,具体体现为:

①提高了计算效率:使用Serverless技术可以使科学计算任务分解成多个小任务,每个子任务可以在云上独立运行,或实现并行计算,提高计算效率;有效利用计算资源,避免了单机性能的瓶颈;

②提高了可伸缩性:Serverless科学计算可以根据用户的需要自动扩展计算资源,从而实现可伸缩性,可以满足不同规模的科学计算需求;

③简化了部署和管理:使用Serverless技术,用户可以将计算任务直接上传到云平台,并且无需管理计算资源和运维工作,大大简化了部署和管理的过程。

(2)本发明为用户提供了代码运行后展示运行时变量的功能,具体具有如下优点:

①能够了解计算过程:变量展示使得用户更清晰地了解计算过程中每个变量的取值和变化,从而更好地理解算法的本质和计算机实现的细节;这对于开发新的数值算法或者分析现有算法的性能非常重要;

②能够诊断错误:变量展示帮助用户诊断错误,找到代码中可能存在的逻辑和语法错误;当用户发现某个变量的取值与预期不符时,就可以排查问题所在,并且优化算法和程序;

③能够记录实验结果:变量展示可记录数值计算结果,有利于后续将实验过程和结果可视化。

综上所述,本发明所提出的一种基于Serverless技术的数值计算方法,基于Serverless技术,构建了在线科学计算平台以及与平台相匹配的科学计算方法,结合云计算能力和丰富的函数库,使用户可以更简单、更快速的编写和运行数值计算。用户将使用python进行代码开发。用户可以使用完全线上的平台服务,编写自己的主程序,调用丰富的函数库,定义自己的函数库,进行更简单,方便的在线数值计算。

附图说明

图1为本发明提出的一种基于Serverless技术的数值计算方法的流程图;

图2为本发明实施例1中用户代码解释流程图;

图3为本发明实施例1中编写程序并运行示意图;

图4为本发明实施例1中程序运行结果示意图。

具体实施方式

为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合说明书附图对本发明的具体实施方式做详细的说明。

在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是本发明还可以采用其他不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广,因此本发明不受下面公开的具体实施例的限制。

其次,此处所称的“一个实施例”或“实施例”是指可包含于本发明至少一个实现方式中的特定特征、结构或特性。在本说明书中不同地方出现的“在一个实施例中”并非均指同一个实施例,也不是单独的或选择性的与其他实施例互相排斥的实施例。

本发明针对现有科学计算软件使用繁琐,计算性能受制于单机硬件条件以及使用代价昂贵等问题,基于Serverless技术,构建一个在线科学计算平台以及与平台相匹配的科学计算方法,有效简化了科学计算的使用过程,降低了用户的使用成本。具体包括:

1)简化数值计算流程,用户可以获得更为简单快捷的代码编写体验,利用该平台用户可直接在线进行代码编写,不必担心基础环境的搭建。

2)发挥serverless的特点,为用户提供更简易的接口,用户可以直接调用丰富的科学计算函数(云函数),而不需要关注调用的过程以及调用需要的环境。

3)构建更为科学,丰富的公开函数库。利用用户贡献的函数代码,经过审核与部署,构建一个覆盖面广泛、可以用于科学领域的公开函数库,建立起自己的代码生态。

下面结合附图及具体实例进行说明,内容如下。

实施例1:

一种基于Serverless技术的数值计算方法,基于Serverless技术,使用python开发一个科学计算平台,完成在线数值计算工作;利用科学计算平台完成如下工作:

(1)用户的文件管理及代码上云

作为一个在线数值计算平台,用户的代码编写、保存和执行全部都是在线完成。用户可以实现在不需要本地存储的情况下创建计算项目,通过线上编辑界面进行在线代码的编辑,上传,保存和运行。

与用户在单机上进行开发一致,用户开始计算过程前需要选定一个主程序。在本发明提供的服务中,用户只需要关注自己的主程序的编辑,点击运行后,服务会将用户的主程序视作一个云函数,将其放到安全容器里面执行。平台为用户提供了丰富的运行结果观测方式,例如显示运行时产生的变量,输出运行时产生的日志信息等。

实现上述需求的核心技术是代码解释。用户选择需要运行的程序并点击运行后,平台会对用户的主程序代码进行解释,添加或修改相应的代码片段。对于将主程序本身转换为一个云函数这个需求,平台会在主程序的开头插入云函数的入口函数定义。对于输出日志信息以及显示变量信息这一需求,平台会在用户代码的末尾加上变量以及日志信息的获取与解析的代码,并将其加入到云函数的返回值里。得到解释后的程序,平台将其上传至云存储,并根据云存储上的响应代码部署程序,然后触发它的运行,最后,用户就可以获取到主程序的运行结果。

(2)分布式函数调用

本发明不仅提供普通数值计算程序的运行,还提供了运行分布式程序的相关接口。用户的主程序本身被视为一个云函数,而在主程序内也可以调用其它云函数,使得程序能够分布式运行。

用户如果需要使用平台的分布式接口——云函数,只需引入平台提供的SDK,并根据说明文档传入函数所需的参数,即可完成一次分布式函数的调用。用户无需知道云函数的调用过程,无需关注云函数依赖的第三方库,无需关心分布式函数调用的参数传递、函数的运行环境以及计算资源等问题。平台为用户提供的云函数调用过程对用户来说是透明的。

云函数调用的透明性也需要代码解释技术的支撑。用户调用云函数的代码片段实际上是一段伪代码,给用户一种调用本地函数的体验,在代码运行前,平台会根据准备好的模板代码,将这段伪代码转换成有效的调用云函数的代码,而这一过程对用户来说是透明的。

(3)远程过程调用的参数传递与解析

将用户调用云函数的伪代码根据模板代码转换成真实有效的调用云函数的代码,这一过程主要涉及到远程过程调用的参数传递问题,具体来说就是调用方如何传递参数以及被调用方如何解析参数的问题。

在Serverless架构下,云函数接收的请求负载是一个字节序列。而对于一个普通的本地函数,它的参数个数和类型是由用户自己设计和决定的。为了对用户提供透明性,就需要解决如何接收用户的不定长度参数并序列化为一个字节序列的问题。

对于接收用户的不定长度参数,本发明利用python的参数传递机制,最终将用户的参数放入一个python元组和python字典中。对于将参数转换为字节序列的问题,本发明使用cloudpickle[7]将上述的元组和字典统一序列化成一个字节序列。

相应的,在被调用方,云函数需要使用cloudpickle解析字节序列,然后将参数传递给实际执行运算逻辑的函数。

在远程过程调用场景下,不可避免地会遇到参数过大,从而超过请求报文负载限制的问题。本发明利用了云存储来解决这个问题。在参数数据过大时,平台将参数暂存在云存储上,并指示被调用方从云存储上读取参数信息。被调用方读取参数获知该信息后,就会去读取云存储获取参数信息,进而解析参数然后将其传递给实际执行运算逻辑的函数。

(4)自定义云函数

平台丰富的科学计算云函数为用户的使用和开发提供了更为便捷和高效的支持。与(2)中提到的用户调用公共云函数一致,用户可以针对主函数的需求编写自定义的云函数,在自己的项目中只需要使用平台提供的SDK就可以调用自己实现的自定义云函数,这将带来更便捷的开发过程。用户自定义的云函数将作为独立的云上运行模块,经过用户部署后可以随时被用户调用。用户也可以将自己的自定义库作为贡献进行开放,为所有用户的开发提供支持。

基于上述平台设计,本发明所提出的数值计算方法具体包括如下内容:

请参阅图1,具体计算流程如图1所示。

步骤1:用户在平台上编写好代码后,选择需要运行的代码文件,这个被选择的代码文件就是这一次调用运行的主程序,代码文件所在的项目作为这一次运行使用的项目,开始计算过程,平台界面如图3所示,工具栏中可以点击运行来运行当前文件,左侧是文件管理栏与变量展示栏,右侧为编辑器和运行窗口。

步骤2:由于改动与否将影响用户项目的部署,平台根据用户此时选定文件的属性判断用户的代码是否有改动,如果代码文件没有改动,则转至步骤6,否则进入下一步。

步骤3:平台会将用户的主程序当作一个云函数,为了实现这个云函数的部署和调用,需要修改用户主程序的代码,这一流程包括必要的代码翻译和代码片段的插入。具体的步骤如图2所示。

步骤4:借助云存储对用户的代码和数据实现安全可靠的存储,平台将步骤3修改后的用户代码上传至云存储。

步骤5:在云存储已经同步用户可以部署的主函数以及用户需要运行的项目文件后,平台依据云存储上的对应代码部署用户的程序,此时用户的程序就是一个云函数。

步骤6:运行用户程序,此时用户程序运行在一个安全容器中,这一个安全容器的搭建依赖于步骤3平台代码插入中加入的自定义库。

步骤7:返回用户程序的数值运算结果和程序运行产生的变量信息,用户可以在平台看到程序执行的变量以及输出结果,如图4所示,变量可以在左下角显示,程序的输出则展示在了右下方的运行窗口。

步骤8:结束。

上述计算流程中,步骤3中提到的代码修改具体包括如下内容:

步骤3.1:平台获取到用户代码,由于要进行代码翻译和代码片段的插入,所以对用户代码进行修改。

步骤3.2:平台按行读取用户代码文件,处理这一次获取到的代码行。

步骤3.3:判断当前行是否为空行,如果是空行,直接跳转到步骤3.7,否则进入下一步。

步骤3.4:由于平台为用户提供了丰富的科学计算函数,用户在语句中简单调用函数的SDK就可以使用这一函数,代码翻译需要对这些SDK的使用进行操作,判断这一语句内是否是云函数调用,如果不是,跳转到步骤3.7,否则进入下一步。

步骤3.5:平台将该行代码翻译为调用云函数的模板代码。

步骤3.6:针对主函数的代码行处理缩进,这样可以将主函数作为一个云函数迁移到云函数文件中。

步骤3.7:判断是否读取结束,如果没有结束,跳转到步骤3.2,否则进入下一步。

步骤3.8:设置代码运行时的文件搜索路径,这一路径要和需要运行的项目对应。

步骤3.9:添加云函数声明以及变量处理代码片段。

步骤3.10:结束。

以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,根据本发明的技术方案及其改进构思加以等同替换或改变,都应涵盖在本发明的保护范围内。

相关技术
  • 基于遥感技术的铁路危岩落石三维数值模拟计算方法
  • 一种基于Serverless技术的互联网借贷系统及其方法
技术分类

06120116024009