一种跨编程语言的分布式计算框架的制作方法

文档序号:21970639发布日期:2020-08-25 19:00阅读:397来源:国知局
一种跨编程语言的分布式计算框架的制作方法

本发明涉及分布式计算技术领域,尤其涉及一种跨编程语言的分布式计算框架。



背景技术:

目前的分布式计算技术及常用框架对编程语言依赖较为严重,虽然消息传递接口mpi在设计之初考虑到了跨编程语言、跨平台,但从目前已有的成熟框架来看,不同的框架均有自己特定的编程语言,以mpich为例,只可使用c/c++进行编程。因此,目前的分布式计算框架普遍依赖其特定的编程语言,无法真正做到跨编程语言和兼容绝大多数的编程语言。对于跨学科的研究人员来说,一旦选定了分布式计算框架即选定了编程语言,无形中增加了学习和科研的时间成本。



技术实现要素:

本发明所要解决的技术问题是针对现有技术的不足,提供一种跨编程语言的分布式计算框架,只需要用户按照指定的编程规范,即可将自己的程序集成入本发明,从而增强计算能力或缩短计算时间,有效降低时间成本。

本发明解决上述技术问题的技术方案如下:

一种跨编程语言的分布式计算框架,包括:一个控制节点和与其通过以太网连接的多个计算节点,其中,所述控制节点包括:控制核心、消息队列系统、容器引擎和页面集成开发环境webide;

所述控制核心用于在接收到所述webide转发的消息或请求后,根据多个所述计算节点的负载情况和计算任务量,将计算任务和原始计算数据通过所述消息队列系统进行下发至各个所述计算节点,并收集各个所述计算节点的计算结果传回给所述webide;

所述容器引擎用于封装和运行由所述控制核心下发的每个文件系统镜像,所述每个文件系统镜像为一个计算单元,包括计算任务和与计算任务对应的原始计算数据;

所述webide用于将用户通过终端输入的所述消息或请求转发至所述控制核心,并为用户提供所述控制核心收集的计算结果。

本发明的有益效果是:提供了一种跨编程语言的分布式计算框架主要解决在分布式计算中无法跨编程语言计算的问题,让几乎所有的编程语言均可进行分布式计算,大大降低了分布式计算对特定编程语言的依赖,让更多之前无法进行分布式计算的语言可以进行分布式计算。同时,也降低了计算机交叉学科科研人员的时间成本,使用任意一门自己擅长的编程语言即可立即进行分布式的高性能计算。

另外,通过在控制节点和计算节点之间采用以太网通信,保证了节点之间、用户终端与控制节点之间可以进行高速稳定的tcp和udp通信。

在上述技术方案的基础上,本发明还可以做如下改进。

进一步地,每个所述计算节点包括:分控制核心和容器运行引擎,

所述分控制核心用于将所述控制核心下发的计算任务和原始计算数据发给所述容器运行引擎,并收集所述容器运行引擎得到的计算结果返回给所述控制核心;

所述容器运行引擎用于运行和调度计算节点内部的各个计算任务。

采用上述进一步方案的有益效果是:解决计算任务在计算节点内的调度问题。

进一步地,所述分控制核心具体通过socket从所述消息队列系统获取计算任务和原始计算数据并返回计算结果。

采用上述进一步方案的有益效果是:分控制核心通过socket与消息队列系统连接,从而间接的受控制核心的控制,同时可以通过socket获取计算数据和返回计算结果,从而解决了计算任务在节点内部运行时的调度问题。

进一步地,所述容器运行引擎具体用于对文件系统镜像进行解包,以及基于cgroup技术及lxc技术对计算资源信息调度、对容器权限之间进行隔离、并对容器和其中的计算任务的进行启动或关闭。

采用上述进一步方案的有益效果是:解决在计算节点内可能存在的程序运行时环境冲突问题,保证节点内计算任务的独立、健康运行。

进一步地,所述容器运行引擎还以i/o流的形式与容器中的计算任务进行交互,以获取和返回计算结果。

采用上述进一步方案的有益效果是:使用绝大多数编程语言都支持的i/o流(input/outputstream)输入输出的形式,为不同的编程语言提供连接、通信的通道,从而将各类编程语言有机的联合起来进行消息传递式的分布式计算,并且使用容器技术在各个计算节点中快速、高效的部署及隔离计算环境。

进一步地,所述控制核心具体使用加权轮询算法,根据多个所述计算节点的负载情况和计算任务量,将计算任务和原始计算数据进行下发。

采用上述进一步方案的有益效果是:解决了计算任务的合理分配问题,并调度各个计算节点,保证节点的健康运行。

进一步地,所述控制核心还用于根据识别各个消息或请求的标识符,确定对其进行处理或转发。

进一步地,所述控制核心通过socket服务将计算结果实时传递给所述webide进行显示;

所述webide通过socket服务将用户通过终端输入的请求指令转发给控制核心。

采用上述进一步方案的有益效果是:webide与控制核心之间使用socket服务进行数据交互,将用户的请求转发给控制核心,也可以将计算结果实时传递给webide进行显示。解决了用户代码编写环境部署难、繁琐的问题,同时降低用户调用分布式集群计算资源的难度。

进一步地,所述控制核心和所述容器引擎通过函数调用-函数返回值的形式进行数据交互,以及文件系统镜像的打包、运行、停止操作。

采用上述进一步方案的有益效果是:控制核心通过函数调用,容器引擎通过函数返回值的形式进行数据的交互,以及文件系统镜像的打包、运行、停止操作。主要解决各个计算节点可能存在的资源冲突问题,同时方便计算节点的软件运行环境的部署。

进一步地,所述消息队列系统用于收集各个节点之间发出的消息,并按照要求转发至其他节点,其中,所述消息包括控制节点发出的控制消息,和各个计算节点发出的数据消息,所述消息队列系统是一个使用socket通信的信息收发、中转节点。

采用上述进一步方案的有益效果是:由消息队列系统对消息数据进行路由转发,改善计算节点之间的通讯能力,将各个节点进行解耦,降低瞬时网络压力,并保证各节点数据收发的正常。

本发明附加的方面的优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明实践了解到。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种跨编程语言的分布式计算框架的硬件拓扑示意图;

图2为本发明实施例提供的一种跨编程语言的分布式计算框架的应用服务拓扑示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都应属于本发明保护的范围。

随着信息技术的蓬勃发展,单个处理器的运算速度以及传统的串行算法已经难以满足人们对于大量数据处理的需求。在这种背景下,并行计算机及其并行计算技术逐渐成为人们关注的热点。

目前并行计算的设计体系架构主要是基于内存共享和消息传递两种。内存共享架构主要是以内存作为核心,基于共享存储器,将内存作为数据共享的纽带,共享相同的内存地址空间,即同一物理机的任意处理器均可以相同的带宽及延迟访问内存中的数据,最常见的是openmp编程框架,openmp是由一系列硬件及软件供应商支持的共享内存程序设计的工业标准,具有使用简单、支持增量化并行、自然映射到多核架构等特点,通过与标准c、c++、fortran语言结合起来,程序具有良好的可移植性,抽象程度高,支持并行的增量开发。消息传递架构主要以通信作为核心,各个计算节点之间多相互独立,拥有独立的内存地址空间,各个节点之前通过网络收发数据进行数据共享。最常见的是基于mpi的并发编程模型框架。由于内存共享架构采用以内存为核心、总线互联的模式,并行多集中于节点内部,很难做到大规模集群式的分布式计算。而消息传递结构依赖网络或进程通信,可联通大量的计算节点,非常适用于大规模集群式的并行计算。简单来说openmp主要用于共享式计算环境,而mpi则主要用于分布式计算环境。

针对一些专业性强的小众编程语言而言,以ncl(thencarcommandlanguage,是一种专门为科学数据处理以及数据可视化设计的高级语言,很适合用在气象数据的处理和可视化上)为例,在气象学和地理学中有着非凡的意义,但是其并不支持分布式计算也没有相关的分布式计算框架。因此想要加速一个ncl程序只有两种解决方案,一是使用其他支持分布式计算的语言重构代码,二是增强单台计算机的性能。一定程度上增加了科研人员改进的难度。因此需要一个跨编程语言的、普适性强的分布式计算框架,本发明的技术方案正是一个可以跨编程语言的分布式计算框架,只需要用户按照指定的编程规范,即可将自己的程序集成入本发明,从而增强计算能力或缩短计算时间。

本发明是一种基于消息传递的分布式计算框架,消息传递的能力和速度直接决定的本发明的实际工作效率,所以本发明设计了一个内置的分布式消息系统。分布式消息系统是分布式系统之间进行消息传递的重要组件,它利用高效、可靠的消息传递机制进行平台无关的数据交流,并基于数据通信进行分布式系统的集成。分布式消息系统中的消息传递主要有两种模式,分别是点对点模式和发布-订阅模式。目前,成熟的分布式消息系统都集成了较全的功能,更适合单独的商业使用,用于处理超大规模的请求等。本发明使用到的消息系统相对简单,主要用于节点间的消息传递和命令下发,而目前成熟的消息系统略显臃肿。因此,在本发明中发明人自主研发了一个基于内存的、非持久性的高速的、小巧的消息系统。

由于本发明实施例提供分布式计算框架是跨编程语言的,所以在实际运行的过程中可能会依赖非常多不同的环境,部分环境之间也有可能起冲突,在实际的计算环境中,可能会导致很多不可预知的、随机的错误,所以本发明中使用lxc(linuxcontainer)技术,将各个计算任务互相隔离,互不影响,从而达到快速稳定进行计算的效果。

lxc技术目前最成熟的便是docker技术,docker技术是一种基于linux操作系统内核的虚拟化技术,其主要在于借助对lxc的扩展而达到一种虚拟化的解决方案。其能够保障每一个容器中服务的运行环境是保持隔离的,这主要是通过内核命名空间的特性来完成。由于docker隔离机制的独特性,运行资源的开销较低,能够很好地保障虚拟化的密度。docker作为lxc最优秀的产品之一,其功能强大,但是在分布式计算中,像网络隔离、端口转发等功能实用价值较低。

因此,在本发明中,使用容器技术来隔离计算任务和方便用户个性化定制运行环境,因为计算任务的特殊性,所以要求供其使用的容器引擎必须快速且稳定,而像网络隔离、虚拟网络等功能均无用处。因此本发明中包含了一个自研的精简的容器引擎,仅提供稳定的、可靠的容器打包及运行服务。

本发明提供了一种普适型的、跨编程语言的、高性能的分布式计算框架。本发明使用绝大多数编程语言都支持的i/o流(input/outputstream)输入输出的形式,为不同的编程语言提供连接、通信的通道,从而将各类编程语言有机的联合起来进行消息传递式的分布式计算,并且使用容器技术在各个计算节点中快速、高效的部署及隔离计算环境。

具体的,如图1所示,本发明实施例提供的一种跨编程语言的分布式计算框架,包括:一个控制节点和若干个计算节点组成,为一对多的关系。用户直接连接控制节点,各个计算节点服从控制节点的调度。

图1主要用于显示用户与设备以及设备与设备之间的关系及交互方法。在用户侧,用户通过使用任意一台终端计算机的浏览器,通过web访问的形式访问控制节点所提供的webide,用户可以在webide中进行代码编写、调试等工作。当用户完成代码编写后,将代码及自己的运行环境交给控制节点。

在分布式计算框架中,控制节点通过以太网与各个计算节点连接,它们之间可以进行全双工的数据交互。当控制节点收到用户完成的代码后,进行封装后下发给计算节点进行分布式计算。

下面详细描述本发明实施例中的分布式控制节点及计算节点。

1、控制节点

控制节点是用户能直接访问的到的节点,控制节点主要解决节点之间通讯问题,节点间计算任务调度问题,并降低开发者与分布式集群交互的难度。控制节点包括:webide、容器引擎、消息队列系统以及控制核心。

(1)webide主要提供一个基于浏览器的代码编写、运行、调试为一体的基于web的集成开发环境,是用户最能直观看到和使用的服务。可以利用html、css、javascript、websocket技术实现一个可以与服务器进行实时交互的web代码编辑器,使用codemirror技术为代码编辑器添加关键字高亮、代码自动联想、代码自动补全功能。

webide与控制核心之间使用socket服务进行数据交互,将用户的请求转发给控制核心,也可以将计算结果实时传递给webide进行显示。解决用户代码编写环境部署难、繁琐的问题,同时降低用户调用分布式集群计算资源的难度。

(2)容器引擎是一个计算环境隔离、运行的集成程序。主要提供用户之间资源隔离、用户个性化计算环境的搭建以及最终文件系统镜像的打包。每个文件系统镜像是本发明的最基础计算单元,包括计算任务和与计算任务对应的原始计算数据。容器引擎负责每个计算单元的封装及运行。每个计算单元中封装和运行的计算任务可以是一个或者多个。用户无法直观的看到该服务,但用户的每一步操作都在该服务中进行。

容器引擎主要使用lxc技术,基于namespace、cgroup技术实现非虚拟机式的权限、硬件资源和文件系统隔离(即:将计算机资源进行系统级别的隔离),容器引擎将以库的形式集成入控制核心(即将容器引擎编写成可以由go语言调用的库(也可以称之为包)),控制核心通过函数调用,容器引擎通过函数返回值的形式进行数据的交互,以及文件系统镜像的打包、运行、停止操作。主要解决各个计算节点可能存在的资源冲突问题,同时方便计算节点的软件运行环境的部署。

(3)消息队列系统是各节点之间通信的枢纽。其主要原理为在内存中存储各类数据的键值对,通过socket与控制核心和计算节点建立连接,消息队列系统采用点对点模式,控制核心和各个计算节点,均可在其中向指定的目的地发布数据,将由消息队列系统对消息数据进行路由转发,最大程度的保证数据的准确性和整个系统网络的健康。

消息队列系统主要负责收集各个节点之间发出的消息,并按照要求转发至其他节点,其中包括控制节点发出的控制消息,也包括各个计算节点发出的数据消息,可进行一对一、一对多以及多对一的消息传递。用户无法直观看到该服务,但在计算过程中的所有数据、消息均由该服务发送、接收、管理。消息队列系统是一个使用可靠socket通信的信息收发、中转节点,主要使用计算机内存,将接收和发送的数据缓存在内存中,并按条件进行转发,主要用于改善计算节点之间的通讯能力,将各个节点进行解耦,降低瞬时网络压力,并保证各节点数据收发的正常。

(4)控制核心负责计算节点任务的分配及下发、数据下发和收集。当新的计算任务下达时,控制核心首先获取计算时使用的原始数据,推算出当前任务的计算总量,根据计算节点数量、计算节点计算能力、计算节点当前负载将携带数据的任务下发给各个节点。任务全部启动后,控制核心等待各个节点传回计算结果,整合完所有计算结果后,最后将数据传回给webide中供用户浏览。

用户无法直观看到该服务,但是该服务控制所有其他服务及webide,连接整个系统,可使整个系统正常工作,控制核心使用加权轮询算法,基于节点负载情况和计算任务量,将计算任务和数据进行下发,并收集计算结果,主要用于解决计算任务的合理分配问题,并调度各个计算节点,保证节点健康运行。

控制核心通过识别各个消息或请求的标识符,从而对其进行相应的处理或转发。主要通过使用go语言runtime的协程技术,增强控制核心的数据处理能力和稳定性。

2、计算节点

计算节点是本发明技术方案的主要计算场所,用户无法直接访问计算节点,所有的计算节点均有控制节点直接调度,计算节点主要用于解决计算任务在计算节点内的调度问题。计算节点包括分控制核心和容器运行引擎。

(1)分控制核心负责将控制核心下发的原始计算数据进行暂存,以供计算任务访问。同时负责调度各个计算任务,负责与计算任务的直接交互、监控任务计算状态。所有的计算任务均由分控制核心直接控制,分控制核心使用计算机多线程、多协程技术以及进程池技术,直接对接控制核心,具体实施控制核心下发的指令。

具体的,分控制核心通过socket与消息队列系统连接,从而间接的受控制核心的控制,同时可以通过socket获取计算数据和返回计算结果。主要用于解决计算任务在节点内部运行时的调度问题,保证节点内部健康运行。

(2)容器运行引擎主要用于运行由控制节点下发的文件系统镜像,给各个镜像分配系统资源,并将各个文件系统镜像进行隔离,使它们互不干扰。

容器运行引擎与控制核心中的容器引擎的原理一致,但是侧重点不一样,控制核心中的容器引擎侧重于容器及文件系统镜像的制作和简单运行。而容器运行引擎则侧重于容器的运行,包括文件系统的解包、基于cgroup技术及lxc技术计算资源调度、容器权限之间的隔离、容器和其中计算任务的启动与关闭。

容器运行引擎也是以包的形式集成入分控制核心(即将容器运行引擎编写成可以由go语言调用的库(也可以称之为包),再由其他模块调用),通过函数调用和函数返回值进行数据交互。容器运行引擎还有一个非常重要的功能,便是以i/o流(input/outputsteam)的形式与容器中的计算任务交互,从而间接的将各个计算任务连接到一起,方便其获取和返回数据。

容器运行引擎受分控制核心直接调度,容器运行引擎基于lxc技术,将节点内的计算机资源进行系统级隔离,主要解决在计算节点内可能存在的程序运行时环境冲突问题,保证节点内计算任务的独立、健康运行。

本发明上述实施例提供的一种跨编程语言的分布式计算框架主要解决了在分布式计算中无法跨编程语言计算的问题,让几乎所有的编程语言均可进行分布式计算,大大降低了分布式计算对特定编程语言的依赖,让更多之前无法进行分布式计算的语言(如ncl语言)可以进行分布式计算。同时,也降低了计算机交叉学科科研人员的学习和科研成本,使用任意一门自己擅长的编程语言即可立即进行分布式的高性能计算。

图2主要显示用户与应用服务之间的关系以及各应用服务之间的关系。用户能直观访问的服务只有webide服务,在控制节点中,以控制核心为核心,连接消息队列系统、容器引擎和webide。负责与用户交互、容器制作、消息及数据收发等操作。其中消息队列系统负责与各个计算节点之间的进行消息及数据收发。

在计算节点中,由分控制核心直接控制容器运行引擎,负责将控制核心发出的数据发给容器引擎,并收集容器引擎的数据返回给控制核心。容器运行引擎主要用于运行和调度各个计算任务,并与其进行数据交互,完成最终的计算。

本发明实施例提供的一种新型跨编程语言的分布式计算框架,主要部署在两台或两台以上的、通过以太网连接的、可以互相访问的服务器上。通过在控制节点和计算节点之间采用以太网通信,保证了节点之间、用户终端与控制节点之间可以进行高速稳定的tcp和udp通信。

另外,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口、装置或单元的间接耦合或通信连接,也可以是电的,机械的或其它的形式连接。

作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本发明实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

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