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

代码部署方法、装置和多租户分布式系统

文献发布时间:2023-06-19 13:46:35


代码部署方法、装置和多租户分布式系统

技术领域

本申请涉及分布式系统开发技术领域,具体而言,涉及一种代码部署方法、装置、多租户分布式系统、电子设备和计算机存储介质。

背景技术

SaaS(Software-as-a-Service,软件即服务)是基于互联网提供软件服务的软件运行模式,SaaS运营商将SaaS应用部署在服务器上,通过租赁的方式,可以同时给多个租户提供软件服务。

SaaS系统在运行过程中,通常会对外提供一些接口,以使某些具有一定的开发能力的租户在使用软件服务的过程中,通过远程调用接口的方式对软件服务进行二次开发。但是,由于SaaS系统对外提供的接口能力有限,使得租户在进行二次开发时,无法调用SaaS系统的全部资源。

发明内容

本申请实施例的目的在于提供一种代码部署方法、装置、多租户分布式系统、电子设备和计算机存储介质,用以解决现有SaaS系统中,租户在进行二次开发时无法调用SaaS系统全部资源的问题。

第一方面,本申请实施例提供一种代码部署方法,应用于多租户分布式系统中的多个相同功能的服务模块,所述方法包括:获取并保存消息队列发送的待部署扩展代码ID和租户ID;其中,所述租户ID用于表征租户的身份,所述待部署扩展代码ID为所述租户ID对应的租户将待部署扩展代码上传至文件服务器后,由所述文件服务器生成;当其中一个服务模块接收到与所述租户ID对应的租户的服务请求时,根据所述待部署扩展代码ID从文件服务器中获取待部署扩展代码;部署所述待部署扩展代码。

在本申请实施例中,服务模块通过消息队列获取待部署扩展代码ID和租户ID,根据待部署扩展代码ID从文件服务器中获取对应的待部署扩展代码,进而部署对应的待部署扩展代码,从而实现待部署扩展代码在服务模块上的部署。相较于远程调用服务模块对外提供的接口而言,通过将待部署扩展代码直接部署到服务模块中,使得待部署扩展代码可以调用服务模块中的全部资源。此外,各个服务模块只有当租户在对应的服务模块上使用软件服务时,才向文件服务器请求待部署扩展代码,进而对待部署扩展代码进行部署,从而可以减少多租户分布式系统的资源消耗,且各个服务模块之间的部署更新互不影响。

在可选的实施方式中,所述部署所述待部署扩展代码,包括:采用自定义类加载器热加载所述待部署扩展代码。

在本申请实施例中,在多租户分布式系统中,存在多个租户同时访问同一个服务模块的情况。在该种情况下,当某个租户要部署二次开发的扩展代码时,采用自定义类加载器热加载待部署扩展代码,无需重启服务模块,不会造成服务模块中断,进而不会影响其他租户的正常使用。

在可选的实施方式中,在所述各服务模块获取并保存消息队列发送的待部署扩展代码ID和租户ID之后,所述方法还包括:判断是否存在所述租户ID对应的租户的已部署扩展代码;若存在,删除所述已部署扩展代码。

在本申请实施例中,若租户之前已经对该服务模块中的软件服务进行过二次开发,则服务模块中部署有先前版本的扩展代码。将先前版本的扩展代码删除,可以避免因为服务模块中存在多个版本的扩展代码而导致运行出错的问题。

在可选的实施方式中,所述消息队列为RabbitMQ、Kafka或者Redis中的一种。

第二方面,本申请实施例提供一种代码部署方法,应用于多租户分布式系统中的文件服务器,所述方法包括:接收服务模块发送的待部署扩展代码ID;根据所述待部署扩展代码ID确定待部署扩展代码;将所述待部署扩展代码发送至所述服务模块,以使所述服务模块部署所述待部署扩展代码。

在本申请实施例中,文件服务器根据待部署扩展代码ID从文件服务器中确定对应的待部署扩展代码,进而将待部署扩展代码发送给服务模块,以使所述服务模块部署所述待部署扩展代码。相较于远程调用服务模块对外提供的接口而言,将待部署扩展代码直接部署到服务模块中的,使得待部署扩展代码可以调用服务模块中的全部资源。

在可选的实施方式中,所述方法还包括:获取并保存租户发送的待部署扩展代码;生成与所述待部署扩展代码对应的待部署扩展代码ID。

第三方面,本申请实施例提供一种代码部署装置,应用于多租户分布式系统中的多个相同功能的服务模块,所述装置包括:获取模块,用于各服务模块获取并保存消息队列发送的待部署扩展代码ID和租户ID;其中,所述租户ID用于表征租户的身份,所述待部署扩展代码ID为所述租户ID对应的租户将待部署扩展代码上传至文件服务器后,由所述文件服务器生成;所述获取模块,还用于当其中一个服务模块接收到与所述租户ID对应的租户的服务请求时,根据所述待部署扩展代码ID从文件服务器中获取待部署扩展代码;部署模块,用于部署所述待部署扩展代码。

在可选的实施方式中,所述部署模块具体用于采用自定义类加载器热加载所述待部署扩展代码。

在可选的实施方式中,所述装置包括:判断模块,用于判断是否存在所述租户ID对应的租户的扩展代码;删除模块,用于当存在所述扩展代码时,删除所述扩展代码。

在可选的实施方式中,所述消息队列为RabbitMQ、Kafka或者Redis中的一种。

第四方面,本申请实施例提供一种代码部署装置,应用于多租户分布式系统中的文件服务器,所述装置包括:接收模块,用于接收服务模块发送的待部署扩展代码ID;确定模块,用于基于所述待部署扩展代码ID确定待部署扩展代码;发送模块,用于将所述待部署扩展代码发送至所述服务模块,以使所述服务模块部署所述待部署扩展代码。

在可选的实施方式中,所述装置还包括:获取模块,用于获取并保存租户发送的待部署扩展代码;生成模块,用于生成与所述待部署扩展代码对应的待部署扩展代码ID。

第五方面,本申请实施例提供一种多租户分布式系统,包括:消息队列;文件服务器,用于执行如前述第二方面所述的方法;提供同一功能的多个服务模块,其中,每个所述服务模块对多个租户提供服务,所述多个服务模块均与所述消息队列和所述文件服务器连接,用于执行如前述第一方面所述的方法。

第六方面,本申请实施例提供一种电子设备,包括:处理器、存储器和总线;所述处理器和所述存储器通过所述总线完成相互间的通信;所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如前述第一方面所述的方法或如前述第二方面所述的方法。

第七方面,本申请实施例提供一种计算机存储介质,所述计算机存储介质上存储有计算机程序指令,所述计算机程序指令被计算机读取并运行时,执行如前述第一方面所述的方法或如前述第二方面所述的方法。

附图说明

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

图1为本申请实施例提供的一种多租户分布式系统的结构框图;

图2为本申请实施例提供的一种代码部署方法的流程图;

图3为本申请实施例提供的一种应用于多租户分布式系统的服务模块的代码部署装置的结构框图;

图4为本申请实施例提供的一种应用于多租户分布式系统的文件服务器的代码部署装置的结构框图;

图5为本申请实施例的电子设备的结构示意图。

图标:100-多租户分布式系统;101-消息队列;102-文件服务器;103-服务模块;300-代码部署装置;301-获取模块;302-部署模块;400-代码部署装置;401-接收模块;402-确定模块;403-发送模块;500-电子设备;501-处理器;502-通信接口;503-存储器;504-总线。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。

请参阅图1,图1为本申请实施例提供的一种多租户分布式系统的结构框图,该多租户分布式系统100包括:消息队列101、文件服务器102和多个服务模块103。本申请实施例中,多个服务模块103可以提供同一功能。

具体地,多租户分布式系统100可以为一个SaaS系统,该系统提供三个服务模块103。

每个服务模块103均与消息队列101和文件服务器102连接。为方便说明,三个服务模块103从左至右依次为服务模块A、服务模块B和服务模块C。服务模块A、服务模块B和服务模块C可以为功能完全相同的三个实例,即三个服务模块可以同时为租户1、租户2和租户3提供相同的软件服务。

文件服务器102提供文件上传和下载服务。文件服务器102可以理解为一台服务器,租户1、租户2和租户3均可以访问文件服务器102,上传文件。文件服务器102接收到租户上传的文件后,生成文件ID。服务模块103可以根据文件ID从文件服务器102中下载对应的文件。

具体地,文件服务器102可以为HTTP(Hyper Text Transfer Protocol)服务器。

消息队列101用于实现租户与服务模块103之间的通信。租户通过消息队列101与服务模块103发送消息。

具体地,消息队列101可以为:RabbitMQ、Kafka或者Redis中的一种,本申请对此不作具体限定。

基于上述多租户分布式系统100,本申请实施例还提供一种代码部署方法,在该代码部署方法中,租户通过一设备访问该多租户分布式系统100。需要说明的是,该设备可以为笔记本电脑、手机、智能穿戴设备等,本申请对此不作具体的限定。租户将二次开发的待部署扩展代码上传到文件服务器102中,接收文件服务器102返回的待部署扩展代码ID,然后通过消息队列101将待部署扩展代码ID发送给服务模块103,服务模块103根据待部署扩展代码ID部署对应的待部署扩展代码,从而实现待部署扩展代码在服务模块103上的部署。

下面以图1所示的多租户分布式系统100为例,对本申请实施例提供的代码部署方法进行详细的介绍。

文件服务器102可以执行以下步骤:

第一步,获取并保存租户发送的待部署扩展代码;

第二步,生成与所述待部署扩展代码对应的待部署扩展代码ID。

具体地,在租户对自身使用的软件功能进行二次开发后,租户将待部署扩展代码上传至文件服务器102。文件服务器102获取到该待部署扩展代码后,保存该待部署扩展代码,并生成与该待部署扩展代码对应的待部署扩展代码ID。

需要说明的是,待部署扩展代码ID可以为用于下载待部署扩展代码的下载链接。租户及服务模块103可以根据该待部署扩展代码ID下载租户上传到文件服务器102的待部署扩展代码。

文件服务器102生成与所述待部署扩展代码对应的待部署扩展代码ID后,将待部署扩展代码ID发送给租户。

当文件服务器102上保存有租户二次开发的待部署扩展代码且租户获得待部署扩展代码ID后,请参照图2,图2为本申请实施例提供的一种代码部署方法的流程图,该代码部署方法可以包括如下步骤:

步骤201:各服务模块获取并保存消息队列发送的待部署扩展代码ID和租户ID。

步骤202:当其中一个服务模块接收到与租户ID对应的租户的服务请求时,服务模块根据待部署扩展代码ID向文件服务器请求待部署扩展代码。

步骤203:文件服务器接收服务模块发送的待部署扩展代码ID。

步骤204:文件服务器根据待部署扩展代码ID确定待部署扩展代码。

步骤205:文件服务器将待部署扩展代码发送至服务模块。

步骤206:服务模块接收文件服务器发送的待部署扩展代码。

步骤207:服务模块部署待部署扩展代码。

需要说明的是,上述步骤202-207是针对多租户分布式系统100中的一个服务模块103和文件服务器102之间的交互。可以理解,每个多租户分布式系统100中的每个服务模块103和文件服务器102之间的交互过程均相同,为使说明书简洁,在此不做赘述。

下面对上述方法进行详细介绍。

步骤201:各服务模块获取并保存消息队列发送的待部署扩展代码ID和租户ID。

本申请实施例中,待部署扩展代码ID和租户ID由租户通过消息队列101发送给服务模块103。租户将部署扩展代码ID和自身在每个服务模块103中对应的租户ID发送给多租户分布式系统100中的每个服务模块103。

需要说明的是,由于一个服务模块103会同时对多个租户提供软件服务,为了区分不同租户,租户需要发送租户ID以表征租户的身份。

服务模块103在接收到待部署扩展代码ID和租户ID后,保存待部署扩展代码ID和租户ID。

本申请实施例中,服务模块103将待部署扩展代码ID与租户ID对应保存,使得多个租户之间的待部署扩展代码不会产生相互影响。

作为一种可选的实施方式,在步骤201之后,本申请实施例提供的代码部署方法还包括如下步骤:

第一步,判断是否存在租户ID对应的租户的已部署扩展代码;

第二步,当存在租户ID对应的租户的已部署扩展代码时,删除该已部署扩展代码。

具体地,若该租户之前已经对该服务模块103中的软件服务进行过二次开发,则服务模块103中部署有先前版本的扩展代码。将先前版本的扩展代码删除,可以避免因为服务模块中存在多个版本的扩展代码而导致运行出错的问题。

步骤202:当其中一个服务模块接收到与租户ID对应的租户的服务请求时,服务模块根据待部署扩展代码ID向文件服务器请求待部署扩展代码。

本申请实施例中,服务模块103采用懒加载机制部署待部署扩展代码,即,只有在服务模块103接收到与租户ID对应的租户的服务请求时,才会根据待部署扩展代码ID向文件服务器102请求待部署扩展代码;没有接收到与租户ID对应的租户的服务请求的服务模块103则不会向文件服务器102请求待部署扩展代码,进而也不会部署待扩展代码。

通过上述方式,只有当租户在对应的服务模块103上使用软件服务时,才向文件服务器102请求待部署扩展代码,进而对待部署扩展代码进行部署,从而可以减少多租户分布式系统的资源消耗。

以下对步骤203-205一并介绍。

步骤203:文件服务器接收服务模块发送的待部署扩展代码ID。

步骤204:文件服务器根据待部署扩展代码ID确定待部署扩展代码。

步骤205:文件服务器将待部署扩展代码发送至服务模块。

本申请实施例中,服务模块103根据待部署扩展代码ID向文件服务器102请求待部署扩展代码后,文件服务器102接收服务模块103发送的待部署扩展代码ID。然后根据该待部署扩展代码ID确定出租户保存在文件服务器102中的待部署扩展代码,进而将该待部署扩展代码发送至服务模块,以使服务模块可以部署该待部署扩展代码。

步骤206:服务模块接收文件服务器发送的待部署扩展代码。

本申请实施例中,服务模块103接收文件服务器102发送的待部署扩展代码。举例来说,当文件服务器102为FTP服务器时,步骤201、步骤202和步骤206可以理解为服务模块103根据FTP协议从文件服务器102中下载对应的待部署扩展代码。

步骤207:服务模块部署待部署扩展代码。

本申请实施例中,服务模块103部署获取到的待部署扩展代码。需要说明的是,相较于远程调用服务模块103对外提供的接口而言,通过将待部署扩展代码直接部署到服务模块103中,使得待部署扩展代码可以调用服务模块103中的全部资源,例如各种存储资源、算力资源等。

作为一种可选的实施方式,服务模块103采用自定义类加载器热加载待部署扩展代码。在多租户分布式系统中,存在多个租户同时访问同一个服务模块的情况。在该种情况下,当某个租户要部署二次开发的扩展代码时,采用自定义类加载器热加载待部署扩展代码,无需重启服务模块103,不会造成服务模块103中断,进而不会影响其他租户的正常使用,且各个服务模块根据需要各自部署更新,互不影响。

基于同一发明构思,本申请实施例提供一种代码部署装置。请参阅图3,图3为本申请实施例提供的一种应用于多租户分布式系统的多个相同功能的服务模块的代码部署装置的结构框图,该代码部署装置300应用于多租户分布式系统中的服务模块,该代码部署装置300可以包括:

获取模块301,用于各服务模块获取并保存消息队列发送的待部署扩展代码ID和租户ID;其中,所述租户ID用于表征租户的身份,所述待部署扩展代码ID为所述租户ID对应的租户将待部署扩展代码上传至文件服务器后,由所述文件服务器生成;

所述获取模块301,还用于当其中一个服务模块接收到与所述租户ID对应的租户的服务请求时,根据所述待部署扩展代码ID从文件服务器中获取待部署扩展代码;

部署模块302,用于部署所述待部署扩展代码。

在可选的实施方式中,所述部署模块302具体用于采用自定义类加载器热加载所述待部署扩展代码。

在可选的实施方式中,所述装置包括:判断模块,用于判断是否存在所述租户ID对应的租户的已部署扩展代码;删除模块,用于当存在所述已部署扩展代码时,删除所述已部署扩展代码。

在可选的实施方式中,所述消息队列为RabbitMQ、Kafka或者Redis中的一种。

此外,本申请实施例还提供一种代码部署装置。请参阅图4,图4为本申请实施例提供的一种应用于多租户分布式系统的文件服务器的代码部署装置的结构框图,该代码部署装置400应用于多租户分布式系统中的文件服务器,该代码部署装置400可以包括:

接收模块401,用于接收服务模块发送的待部署扩展代码ID;

确定模块402,用于基于所述待部署扩展代码ID确定待部署扩展代码;

发送模块403,用于将所述待部署扩展代码发送至所述服务模块,以使所述服务模块部署所述待部署扩展代码。

在可选的实施方式中,所述装置还包括:获取模块,用于获取并保存租户发送的待部署扩展代码;生成模块,用于生成与所述待部署扩展代码对应的待部署扩展代码ID。

请参阅图5,图5为本申请实施例的电子设备500的结构示意图,该电子设备500包括:至少一个处理器501,至少一个通信接口502,至少一个存储器503和至少一个总线504。其中,总线504用于实现这些组件直接的连接通信,通信接口502用于与其他节点设备进行信令或数据的通信,存储器503存储有处理器501可执行的机器可读指令。当电子设备500运行时,处理器501与存储器503之间通过总线504通信,机器可读指令被处理器501调用时执行如上述代码部署方法。

处理器501可以是一种集成电路芯片,具有信号处理能力。上述处理器501可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(NetworkProcessor,NP)等;还可以是数字信号处理器(Digital Signal Processing,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。其可以实现或者执行本申请实施例中公开的各种方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

存储器503可以包括但不限于随机存取存储器(Random Access Memory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(Programmable Read-OnlyMemory,PROM),可擦除只读存储器(Erasable Programmable Read-Only Memory,EPROM),电可擦除只读存储器(Electric Erasable Programmable Read-Only Memory,EEPROM)等。

可以理解,图5所示的结构仅为示意,电子设备500还可包括比图5中所示更多或者更少的组件,或者具有与图5所示不同的配置。图5中所示的各组件可以采用硬件、软件或其组合实现。于本申请实施例中,电子设备500可以是,但不限于台式机、笔记本电脑、智能手机、智能穿戴设备、车载设备等实体设备,还可以是虚拟机等虚拟设备。另外,电子设备500也不一定是单台设备,还可以是多台设备的组合,例如服务器集群,等等。

此外,本申请实施例还提供一种计算机存储介质,该计算机存储介质上存储有计算机程序,该计算机程序被计算机运行时,执行如上述实施例中代码部署方法的步骤。

综上所述,本申请各实施例提出的代码部署方法、装置、多租户分布式系统、电子设备和计算机存储介质,服务模块通过消息队列获取待部署扩展代码ID和租户ID,根据待部署扩展代码ID从文件服务器中获取对应的待部署扩展代码,进而部署对应的待部署扩展代码,从而实现待部署扩展代码在服务模块上的部署。相较于远程调用服务模块对外提供的接口而言,将待部署扩展代码直接部署到服务模块中的,使得待部署扩展代码可以调用服务模块中的全部资源。此外,各个服务模块只有当租户在对应的服务模块上使用软件服务时,才向文件服务器请求待部署扩展代码,进而对待部署扩展代码进行部署,从而可以减少多租户分布式系统的资源消耗。

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

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

再者,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

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

在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。

以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

技术分类

06120113808224