首页> 中国专利> 调度服务器、编译服务器及分布式编译方法

调度服务器、编译服务器及分布式编译方法

摘要

本发明提供一种调度服务器、编译服务器及分布式编译方法,调度服务器与多个编译服务器通信,调度服务器包括:主编译机选择模块,用于根据多个编译服务器的工作情况选取主编译机,向该主编译机下发编译任务;协助请求接收模块,用于接收主编译机的协助请求;任务分配模块,用于根据所述多个编译服务器的工作情况从编译机,并在为从编译机分配待编译工程模块后下发协助编译通知。通过调度服务器根据编译服务器的工作情况动态决定主编译机及从编译机,并分配编译任务,使得编译服务器可以作为不同编译任务的主编译机或从编译机被多个编译任务复用。如此,大大提高的编译服务器的利用率,减少了编译中的空闲等待时间,提高了分布式编译的效率。

著录项

  • 公开/公告号CN107391221A

    专利类型发明专利

  • 公开/公告日2017-11-24

    原文格式PDF

  • 申请/专利权人 迈普通信技术股份有限公司;

    申请/专利号CN201710630023.4

  • 发明设计人 张世伟;

    申请日2017-07-28

  • 分类号G06F9/45(20060101);G06F9/50(20060101);

  • 代理机构11371 北京超凡志成知识产权代理事务所(普通合伙);

  • 代理人苏胜

  • 地址 610000 四川省成都市高新区九兴大道16号

  • 入库时间 2023-06-19 03:51:20

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-08-07

    授权

    授权

  • 2017-12-19

    实质审查的生效 IPC(主分类):G06F9/45 申请日:20170728

    实质审查的生效

  • 2017-11-24

    公开

    公开

说明书

技术领域

本发明涉及分布式数据处理技术领域,具体而言,涉及一种调度服务器、编译服务器及分布式编译方法。

背景技术

软件编译是将源代码编译成机器代码的一种转换计算过程,为了加快编译速度,可以采用分布式的编译方法,由多台编译机同时进行一个任务不同部分的编译。

传统的分布式编译方法中,由一台确定的主编译机下载代码并分配编译任务,多台从编译机独立完成各自的编译任务后,由主编译机完成编译链接的任务。但是,主编译机在执行源代码下载和模块编译工作准备时所有从编译机都是空闲状态,因此编译机资源没有充分利用。另外每台编译机都是串行编译工程模块,没有充分利用每台编译机的多核优势。

发明内容

为了克服现有技术中的上述不足,本发明的目的在于提供一种调度服务器,所述调度服务器与多个编译服务器通信,所述调度服务器包括:

主编译机选择模块,用于接收编译任务,根据所述多个编译服务器的工作情况,选取其中一个编译服务器作为该编译任务的主编译机,向该主编译机下发编译任务;

协助请求接收模块,用于接收所述主编译机根据所述编译任务生成的协助请求,所述协助请求中包括待编译工程模块的数量;

任务分配模块,用于根据所述待编译工程模块的数量及所有编译服务器的工作情况选取至少一个编译服务器作为该编译任务的从编译机,并在为所述从编译机分配待编译工程模块后下发协助编译通知。

本发明的另一目的在于提供一种编译服务器,所述编译服务器与本发明提供的所述调度服务器通信,所述编译服务器包括:

编译任务接收模块,用于接收所述调度服务器下发的编译任务,根据所述编译任务获取相应的源代码;

协助请求生成模块,用于根据所述源代码进行编译准备后,获得所述源代码对应的待编译工程模块的数量,并向所述调度服务器发送该编译任务的协助请求,以使所述调度服务器将所述待编译工程模块分配给至少一个所述编译服务器进行编译;

编译链接模块,用于接收所述调度服务器发送的编译链接通知,对所述至少一个编译服务器编译完成的工程模块进行编译链接。

本发明的另一目的在于提供一种编译服务器,所述编译服务器与本发明提供的所述调度服务器通信,所述编译服务器包括:

协助通知接收模块,用于接收所述调度服务器下发的协助编译通知,所述协助编译通知中包括待编译工程模块的名称、数量及代码路径;

协助编译模块,用于根据所述协助编译通知获取所述待编译工程模块的代码并进行编译;

完成通知模块,用于在编译完成后向所述调度服务器发送协助完成通知。

本发明的另一目的在于提供一种分布式编译方法,应用于包括调度服务器及多个编译服务器的分布式系统,所述方法包括:

所述调度服务器接收编译任务,根据所述多个编译服务器的工作情况,选取其中一个编译服务器作为该编译任务的主编译机,向该主编译机下发编译任务;

被选中主编译机接收所述调度服务器下发的编译任务,根据所述编译任务获取相应的源代码;

根据所述源代码进行编译准备后,获得所述源代码对应的待编译工程模块的数量,并向所述调度服务器发送该编译任务的协助请求;

所述调度服务器接收所述主编译机根据所述编译任务生成的协助请求,根据所述待编译工程模块的数量及所有编译服务器的工作情况选取至少一个编译服务器作为该编译任务的从编译机,并在为所述从编译机分配待编译工程模块后下发协助编译通知;

所述从编译机根据所述协助编译通知获取所述待编译工程模块的代码并进行编译;

所述主编译机对所述从编译机编译完成的工程模块进行编译链接。

相对于现有技术而言,本发明具有以下有益效果:

本发明提供的调度服务器、编译服务器及分布式编译方法,通过所述调度服务器根据编译服务器的工作情况动态决定主编译机及从编译机,并分配编译任务,使得编译服务器可以作为不同编译任务的主编译机或从编译机被多个编译任务复用。如此,大大提高的编译服务器的利用率,减少了编译中的空闲等待时间,提高了分布式编译的效率。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本发明第一实施例提供的分布式编译系统的示意图;

图2为本发明第一实施例提供的调度服务器的功能模块示意图之一;

图3为本发明第一实施例提供的调度服务器的功能模块示意图之二;

图4为本发明第一实施例提供的编译服务器的编译任务复用示意图;

图5为本发明第二实施例提供的编译服务器的功能模块示意图之一;

图6为本发明第二实施例提供的分布式编译系统的示意图;

图7为本发明第二实施例提供的编译服务器的功能模块示意图之二;

图8为本发明第三实施例提供的编译服务器的功能模块示意图之一;

图9为本发明第三实施例提供的编译服务器的功能模块示意图之二;

图10为本发明第四实施例提供的分布式编译方法的步骤流程示意图。

图标:10-分布式编译系统;100-调度服务器;111-主编译机选择模块;1111-第一参数获取子模块;1112-第一选取子模块;112-协助请求接收模块;113-任务分配模块;1131-第二参数获取子模块;1132-第二选取子模块;1133-编译分配子模块;114-链接通知下发模块;200-编译服务器;211-编译任务接收模块;2111-第一挂载子模块;2112-任务下载子模块;212-协助请求生成模块;2121-编译准备子模块;2122-请求发送子模块;213-编译链接模块;221-协助通知接收模块;222-协助编译模块;2221-第二挂载子模块;2222-代码编译子模块;223-完成通知模块;300-代码服务器;400-数据服务器;500-网络。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。

因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

第一实施例

请参照图1,图1是本实施例提供的一种分布式编译系统10的示意图,所述分布式编译系统10包括调度服务器100及多个编译服务器200。所述调度服务器100用于分配和调度编译任务,所述编译服务器200用于对分配到的编译任务中源代码进行编译。

本实施例提供一种应用于图1所示分布式编译系统10的调度服务器100,以下对所述调度服务器100的功能进行详细阐述,请参照图2,所述调度服务器100包括主编译机选择模块111、协助请求接收模块112及任务分配模块113。

所述主编译机选择模块111,用于接收编译任务,根据所述多个编译服务器200的工作情况,选取其中一个编译服务器200作为该编译任务的主编译机,向该主编译机下发编译任务。

在本实施例中,所述调度服务器100在接收到编译任务后,需要通过所述主编译机选择模块111在所述多个编译服务器200中选取一个作为该编译任务的主编译机。可选地,请参照图3,在本实施例中,所述主编译机选择模块111可以包括所述第一参数获取子模块1111及第一选取子模块1112。

所述第一参数获取子模块1111,用于接收编译任务,获取所述多个编译服务器200的CPU核数及正在执行的编译任务数。

可选地,在本实施例中,所述编译服务器200可以预先向所述调度服务器100发送注册请求,所述注册请求可以包括编译服务器200配置,例如,操作系统、CPU核数、内存大小等。

由于编译服务器200的CPU核数可以表征该编译服务器200可以同时进行的最大编译任务的数量,故在本实施例中,所述第一参数获取子模块1111在接收到编译任务后,遍历每台编译服务器200,获取各个编译服务器200的CPU核数及正在执行的编译任务数以作为选取主编译机的判断参数。

所述第一选取子模块1112,用于根据所述多个编译服务器200的CPU核数及正在执行的编译任务数,计算获得各个编译服务器200的可新增任务数;选取可新增任务数最多的编译服务器200作为所述主编译机。

在本实施例中,所述第一选取子模块1112先根据各个编译服务器200的CPU核数及正在执行的编译任务数,计算获得各个编译服务器200的可新增任务数。若记编译服务器200的CPU核数为T,该编译服务器200正在执行的编译任务数为X,则该服务器可新增任务数R=T-X。

然后,所述第一选取子模块1112选取可新增任务数最多的编译服务器200作为所述主编译机。

在本实施例中,由于所述主编译机需要占用的硬件资源较大,故所述第一选取子模块1112选取当前所述可新增任务数最大的编译服务器200作为所述主编译机。

进一步地,在本实施例中,若所有编译服务器200的可新增任务数都为0时,判定为所有编译服务器200的编译任务均已满载,则所述调度服务器100需要等待一段时间后重新遍历所有编译服务器200。

所述协助请求接收模块112,用于接收所述主编译机根据所述编译任务生成的协助请求,所述协助请求中包括待编译工程模块的数量。

在本实施例中,被选中的主编译机在收到所述调度服务器100下发的编译任务后,进行相应的编译前准备后,根据待编译工程模块的数量发送协助请求给所述调度服务器100,所述调度服务器100的协助请求接收模块112接收所述协助请求。

所述任务分配模块113,用于根据所述待编译工程模块的数量及所有编译服务器200的工作情况选取至少一个编译服务器200作为该编译任务的从编译机,并在为所述从编译机分配待编译工程模块后下发协助编译通知。

在本实施例中,所述调度服务器100在接收到所述协助请求后,需要通所述任务分配模块113在所有编译服务器200中选取至少一个编译服务器200作为该编译任务的从编译机。可选地,请再次参照图3,在本实施例中,所述任务分配模块113可以包括第二参数获取子模块1131、第二选取子模块1132及编译分配子模块1133。

所述第二参数获取子模块1131,用于获取包括所述主编译机在内的所有编译服务器200的CPU核数及正在执行的编译任务数。

为了有效利用所述编译服务器200的编译资源,在本实施例中,所述第二参数获取子模块1131在接收到所述协助请求后,遍历所有编译服务器200,获取包括所述主编译机在内的所有编译服务器200的CPU核数及正在执行的编译任务数以作为选取从编译机的判断参数。

所述第二选取子模块1132,用于根据所述所有编译服务器200的CPU核数及正在执行的编译任务数,计算各个编译服务器200的可新增任务数;选取可新增任务数不为0的至少一个编译服务器200作为所述从编译机。

在本实施例中,所述第二选取子模块1132先根据所有编译服务器200的CPU核数及正在执行的编译任务数,计算各个编译服务器200的可新增任务数。

然后,所述第二选取子模块1132选取所述可新增任务数不为0的编译服务器200作为所述从编译机。

在本实施例中,若编译服务器200的可新增任务数不为0则表示该编译服务器200有能力承担新的编译任务,所述第二选取子模块1132选取所有可新增任务数不为0的编译服务器200作为所述从编译机。

所述编译分配子模块1133,用于根据所述从编译机的CPU核数及正在执行的编译任务数为所述从编译机分配待编译工程模块后下发协助编译通知。

所述编译分配子模块1133根据每个从编译机的可新增任务数及所有从编译机的可新增任务数的总和,计算得到每个从编译机的分配比例。

例如,若某从编译机的可新增任务数为r,所有从编译机的可新增任务数的总和为R,则该从编译机的分配比例为r/R。

所述编译分配子模块1133基于所述从编译机的分配比例及所述待编译工程模块的总数量为所述从编译机分配待编译工程模块后下发协助编译通知。

例如,所述待编译工程模块的总数量为N,某从编译机的分配比例为r/R,则该从编译机分配到的待编译工程模块的数量为N*r/R。所述编译分配子模块1133向该从编译机下发对应数量的协助编译通知。如此,实现从编译机的负载均衡。

基于上述设计,所述调度服务器100在接收到编译任务时,根据当前所述多个编译服务器200的工作情况动态的选取主编译机或从编译机,同一台编译服务器200可以同时参与多个不同的编译任务。

例如,请参照图4,编译服务器200A即可以作为编译任务X的主编译机,在满足条件的情况下也可以作为编译任务X的从机,同时还可以作为另一个编译任务Y的从编译机。

编译服务器200A作为编译任务X的主编译机,在完成编译准备后,也可以作为编译任务X的从机进行待编译模块的编译工作做。同时,还可以作为编译任务Y的从编译机,进行编译任务Y的待编译工程模块的编译工作。

如此,大大提高了各个编译服务器200的利用率,减少的了空闲等待时间,通过动态分配任务的方式,提高了分布式编译的效率。

进一步地,请再次参照图2,在本实施例中,所述调度服务器100还可以包括链接通知下发模块114。

所述链接通知下发模块114,用于接收所述从编译机在对分配的工程模块编译完成后发送的协助完成通知,并在接收到所有从编译机发送的协助完成通知后,向所述主编译机发送编译链接通知,使所述主编译机对所述从编译机编译完成的工程模块进行编译链接。

在本实施例中,所述从编译机在完成分配到的待编译工程模块的编译工作后,向所述调度服务器100发送协助完成通知。所述调度服务器100在接收到编译任务的所有从编译机发送的协助完成通知后,向该编译任务的主编译机发送编译链接通知,使所述主编译机对所述从编译机编译完成的工程模块进行编译链接,完成编译任务。

第二实施例

本实施例提供一种应用于图1所示分布式编译系统10的编译服务器200,以下对所述编译服务器200的功能进行详细阐述,请参照图5,所述编译服务器200包括编译任务接收模块211、协助请求生成模块212及编译链接模块213。

所述编译任务接收模块211,用于接收所述调度服务器100下发的编译任务,根据所述编译任务获取相应的源代码。

在本实施例中,编译服务器200在接收所述调度服务器100下发的编译任务时,即编译服务器200作为第一实施例中该编译任务的主编译机。所述主编译机根据接收到的编译任务获取相应的源代码。

可选地,请参照图6,在本实施例中,所述分布式编译系统10还包括代码服务器300及数据服务器400,所述编译服务器200还与所述代码服务器300及数据服务器400通信。所述代码服务器300用于提供所述编译任务的源代码,所述数据服务器400用于为多个编译服务器200提供共享存储空间。请参照图7,所述编译任务接收模块211包括第一挂载子模块2111及任务下载子模块2112。

所述第一挂载子模块2111,用于在所述数据服务器400中挂载一个共享存储区域。

在本实施例中,所述共享存储区域用于集中存放所述编译任务的源代码及编译结果,对所有编译服务器200开放。可选的,所述第一挂载子模块2111可以通过NFS(NetworkFile System,网络文件系统)协议在所述数据服务器400中挂载一个共享存储区域。类似在Windows系统中在本机操作另外一台机器上的存储数据的磁盘映射方式,。

所述任务下载子模块2112,用于根据接收到的所述编译任务从所述代码服务器300下载对应的源代码至所述共享存储区域。

可选地,所述任务下载子模块2112根据所述编译任务中的源代码路径(如URL路径)从所述数据服务器400下载源代码。

在本实施例中,所述任务下载子模块2112在将所述源代码下载至共享存储区域前,先根据所述编译任务检测所述数据服务器400中是否存在该编译任务历史版本的代码。

当不存在时,即表示该编译任务之前尚未被编译过,则从所述代码服务器300下载该编译任务的所有源代码至所述共享存储区域。

当存在时,即表示该编译任务之前有较早的版本已经执行过编译,则从所述代码服务器300下载该编译任务的更新部分的源代码至所述共享存储区域。如此,可以减少源代码的下载量,节约了下载时间。

不同的编译任务在所述数据服务器400上拥有不同的共享存储区域。

所述协助请求生成模块212,用于根据所述源代码进行编译准备后,获得所述源代码对应的待编译工程模块的数量,并向所述调度服务器100发送该编译任务的协助请求,以使所述调度服务器100将所述待编译工程模块分配给至少一个编译服务器200进行编译。

请再次参照图7,在本实施例中,所述协助请求生成模块212可以包括编译准备子模块2121及请求发送子模块2122。

所述编译准备子模块2121,用于根据下载的所述源代码进行编译准备后,获得所述源代码中待编译工程模块的名称、数量及代码路径,所述代码路径为该工程模块的代码在所述数据服务器400中的存储路径。

可选地,在本实施例中,所述编译准备子模块2121针对更新下载的源代码部分进行编译准备,例如,编译生成动态的公共头文件。然后获得下载更新部分源代码中待编译工程模块名称、数量及代码路径。如此,仅针对有更新的部分进行编译准备,使从编译机只编译更新的代码部分,缩短了编译时间,提高了编译效率。

所述请求发送子模块2122,用于向所述调度服务器100发送协助请求,所述协助请求中包括所述待编译工程模块名称、数量及代码路径,以使所述调度服务器100将通知所述至少一个编译服务器200获取所述待编译工程模块并进行编译。

在本实施例中,所述请求发送子模块2122向所述调度服务器100发送协助请求后,开始等待从编译机完成所述待编译工程模块的编译工作。可以理解的是,请求协助编译的部分不包括所述编译任务的总工程模块。

所述编译链接模块213,用于接收所述调度服务器100发送的编译链接通知,对所述至少一个编译服务器200编译完成的工程模块进行编译链接。

所述编译链接模块213在接收到所述调度服务器100发送的编译链接通知后,先进行所有工程模块的编译结果检查,然后进行总工程模块的编译和链接动作。

第三实施例

本实施例提供一种应用于图1所示分布式编译系统10的编译服务器200,以下对所述编译服务器200的功能进行详细阐述,请参照图8,所述编译服务器200包括协助通知接收模块221、协助编译模块222及完成通知模块223。

所述协助通知接收模块221,用于接收所述调度服务器100下发的协助编译通知,所述协助编译通知中包括待编译工程模块的名称、数量及代码路径。

在本实施例中,编译服务器200在接收所述调度服务器100针对某编译任务下发的协助编译通知时,即作为第一实施例中该编译任务的从编译机。所述主编译机根据接收到的编译任务获取相应的源代码。

所述协助编译模块222,用于根据所述协助编译通知获取所述待编译工程模块的代码并进行编译。

可选地,请再次参照图6,在本实施例中,所述从编译机同样与第二实施例中的所述代码服务器300及数据服务器400通信。请参照图9,所述协助编译模块222包括第二挂载子模块2221及代码编译子模块2222。

所述第二挂载子模块2221,用于根据所述待编译工程模块的代码路径挂载到所述数据服务器400相应的共享存储区域。

所述代码编译子模块2222,用于对所述共享存储区域中所述待编译工程模块的代码进行编译。

在本实施例中,所述代码编译子模块2222依次对分配到的待编译工程模块进行逐个编译,其中,针对每个待编译工程模块进行并行编译,例如,使用make工具提供的并行编译功能对每个待编译工程模块的代码进行并行编译。

然后,所述从编译机在将编译结果存储至挂载的所述共享存储区域后,卸载挂载的所述共享存储区域。

所述完成通知模块223,用于在编译完成后向所述调度服务器100发送协助完成通知。

第四实施例

请参照图10,本实施例提供一种应用于图1所示分布式编译系统10的分布式编译方法,下面对所述方法的各个步骤进行解释。

步骤S110,所述调度服务器100接收编译任务,根据所述多个编译服务器200的工作情况,选取其中一个编译服务器200作为该编译任务的主编译机,向该主编译机下发编译任务。

在本实施例中,所述步骤S110可以由第一实施例中所述调度服务器100的主编译机选择模块111执行,关于步骤S110的详细阐述可以参见对所述主编译机选择模块111的描述。

步骤S120,被选中主编译机接收所述调度服务器100下发的编译任务,根据所述编译任务获取相应的源代码。

在本实施例中,所述步骤S120可以由第二实施例中所述编译服务器200的编译任务接收模块211执行,关于步骤S120的详细阐述可以参见对所述编译任务接收模块211的描述。

步骤S130,根据所述源代码进行编译准备,获得所述源代码对应的待编译工程模块的数量,并向所述调度服务器100发送该编译任务的协助请求。

在本实施例中,所述步骤S130可以由第二实施例中所述编译服务器200的协助请求生成模块212执行,关于步骤S130的详细阐述可以参见对所述协助请求生成模块212的描述。

步骤S140,所述调度服务器100接收所述主编译机根据所述编译任务生成的协助请求,根据所述待编译工程模块的数量及所述编译服务器200的工作情况选取至少一个编译服务器200作为该编译任务的从编译机,并在为所述从编译机分配待编译工程模块后下发协助编译通知。

在本实施例中,所述步骤S140可以由第一实施例中所述调度服务器100的协助请求接收模块112及任务分配模块113执行,关于步骤S140的详细阐述可以参见对所述协助请求接收模块112及任务分配模块113的描述。

步骤S150,所述从编译机根据所述协助编译通知获取所述待编译工程模块的代码并进行编译。

在本实施例中,所述步骤S150可以由第三实施例中所述编译服务器200的协助编译模块222执行,关于步骤S150的详细阐述可以参见对所述协助编译模块222的描述。

步骤S160,所述主编译机对所述从编译机编译完成的工程模块进行编译链接。

在本实施例中,所述步骤S160可以由第二实施例中所述编译服务器200的编译链接模块213执行,关于步骤S160的详细阐述可以参见对所述编译链接模块213的描述。

综上所述,本发明提供的调度服务器100、编译服务器200及分布式编译方法,通过所述调度服务器100根据编译服务器200的工作情况动态决定主编译机及从编译机,并分配编译任务,使得编译服务器200可以作为不同编译任务的主编译机或从编译机被多个编译任务复用。如此,大大提高的编译服务器200的利用率,减少了编译中的空闲等待时间,提高了分布式编译的效率。

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

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号