一种微服务架构构建方法及装置转让专利

申请号 : CN201910833879.0

文献号 : CN110750307B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 曹素杰

申请人 : 北京旷视科技有限公司

摘要 :

本发明涉及微服务技术领域,提供一种微服务架构构建方法及装置,解决了现有微服务架构占用大量硬件设备资源的问题。一种微服务架构构建方法,微服务架构包括父类加载器和子类加载器,包括:基于父类加载器在一个进程内创建一个或多个子类加载器;一个或多个子类加载器中的每个子类加载器加载同一工作流程中的一个微服务。基于本公开提供的一种微服务架构构建方法构建的微服务架构,微服务架构中只包含一个进程,减少微服务架构本身所占用的硬件设备资源。

权利要求 :

1.一种微服务架构构建方法,其中,微服务架构包括父类加载器和子类加载器,包括:基于所述父类加载器在一个进程内创建一个或多个子类加载器;

所述一个或多个子类加载器中的每个子类加载器加载同一工作流程中的一个微服务,其中,所述子类加载器个数与所述同一工作流程中的微服务个数相对应。

2.根据权利要求1所述的方法,其中,所述基于所述父类加载器在一个进程内创建多个子类加载器,包括:调用所述父类加载器的创建子类加载器接口;

基于所述父类加载器的创建子类加载器接口,创建所述一个或多个子类加载器。

3.根据权利要求1所述的方法,其中,所述一个或多个子类加载器共享所述父类加载器中加载的通用资源,其中,所述通用资源包括:服务器资源、数据库资源、通用工具类库资源,所述子类加载器内不包括所述通用资源。

4.根据权利要求1至3中任一项所述的方法,其中,所述父类加载器为一个。

5.根据权利要求4所述的方法,其中,所述父类加载器包括Java虚拟机类加载器。

6.一种微服务调用方法,其中,方法包括:

同一工作流程中的微服务基于微服务架构相互调用,其中,所述微服务架构为权利要求1至5中任一项所述的微服务架构构建方法构建的微服务架构,所述微服务架构包括一个所述父类加载器和多个所述子类加载器,所述子类加载器包括第一子类加载器和第二子类加载器。

7.根据权利要求6所述的方法,其中,所述同一工作流程中的微服务基于微服务架构相互调用,包括:加载生产者微服务的所述第一子类加载器向所述父类加载器注册生产者微服务;

所述父类加载器记录所述生产者微服务注册信息,其中,所述生产者微服务注册信息包括:所述生产者微服务及加载所述生产者微服务的所述第一子类加载器;

加载消费者微服务的所述第二子类加载器发送需要调用的微服务至所述父类加载器;

基于所述生产者微服务注册信息,所述第二子类加载器发现所述需要调用的微服务,并确定所述需要调用的微服务对应的第一子类加载器;

所述第二子类加载器加载的消费者微服务调用所述需要调用的微服务对应的第一类子加载器加载的生产者微服务。

8.一种微服务架构构建装置,其中,微服务架构包括父类加载器和子类加载器,所述装置包括:创建单元,用于基于所述父类加载器在一个进程内创建一个或多个子类加载器;

加载单元,用于所述一个或多个子类加载器中的每个子类加载器加载同一工作流程中的一个微服务,其中,所述子类加载器个数与所述同一工作流程中的微服务个数相对应。

9.一种微服务调用装置,其中,所述装置包括:

调用单元,用于同一工作流程中的微服务基于微服务架构相互调用,其中,所述微服务架构为权利要求1至5中任一项所述的微服务架构构建方法构建的微服务架构,所述微服务架构包括一个所述父类加载器和多个所述子类加载器,所述子类加载器包括第一子类加载器和第二子类加载器。

10.一种电子设备,其中,所述电子设备包括:

存储器,用于存储指令;以及

处理器,用于调用所述存储器存储的指令执行权利要求1‑5中任一项所述的一种微服务架构构建方法及权利要求6或7中所述的一种微服务调用方法。

11.一种计算机可读存储介质,其中,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令在由处理器执行时,执行权利要求1‑5中任一项所述的一种微服务架构构建方法及权利要求6或7中所述的一种微服务调用方法。

说明书 :

一种微服务架构构建方法及装置

技术领域

[0001] 本发明一般地涉及微服务领域,特别是涉及一种微服务架构构建方法及装置。

背景技术

[0002] 目前的微服务架构中,同一工作流程会分成多个微服务,其中的每个微服务会分配一个Java虚拟机类加载器,每个Java虚拟机类加载器对应一个单独的进程,即每个微服务对应一个进程。同一工作流程中的每个微服务之间相互调用,即不同进程的相互调用,需要经过序列化、网络传输及反序列化过程。其中,Java虚拟机类加载器是加载Java类到Java虚拟机中,加载指的是将类的类文件读入到内存,并为之创建一个类的对象。其中,序列化为将每个微服务中的对象转换成字节,以进行网络传输,反序列化为将经过网络传输之后的字节转换成对象保存至微服务。
[0003] 然而,由于每个微服务对应一个进程,每个进程会占用服务器资源,因此微服务架构会占用大量服务器资源。且同一工作流程中的每个微服务之间远程调用,即不同进程的相互调用,需要经过序列化、网络传输及反序列化过程,在执行上述的序列化、网络传输及反序列化过程,会占用大量的硬件设备资源。

发明内容

[0004] 为了解决现有技术中存在的上述问题,本发明提供一种微服务架构构建方法及装置。
[0005] 第一方面,本发明实施例提供一种微服务架构构建方法,服务架构包括父类加载器和子类加载器,该方法包括:基于父类加载器在一个进程内创建一个或多个子类加载器;一个或多个子类加载器中的每个子类加载器加载同一工作流程中的一个微服务。
[0006] 在一例中,基于父类加载器在一个进程内创建多个子类加载器,包括:调用父类加载器的创建子类加载器接口;基于父类加载器的创建子类加载器接口,创建一个或多个子类加载器。
[0007] 在一例中,子类加载器个数与同一工作流程中的微服务个数相对应。
[0008] 在一例中,一个或多个子类加载器共享父类加载器中加载的通用资源,其中,通用资源包括:服务器资源、数据库资源、通用工具类库资源,子类加载器内不包括通用资源。
[0009] 在一例中,父类加载器包括Java虚拟机类加载器。
[0010] 第二方面,本发明实施例提供一种微服务调用方法,该方法包括:同一工作流程中的微服务基于微服务架构相互调用,其中,微服务架构为第一方面所述的微服务架构构建方法构建的微服务架构,微服务架构包括一个父类加载器和多个子类加载器,子类加载器包括第一子类加载器和第二子类加载器。
[0011] 在一例中,同一工作流程中的微服务基于微服务架构相互调用,包括:加载生产者微服务的第一子类加载器向父类加载器注册生产者微服务;父类加载器记录生产者微服务注册信息,其中,生产者微服务注册信息包括:生产者微服务及加载生产者微服务的第一子类加载器;加载消费者微服务的第二子类加载器发送需要调用的微服务至父类加载器;基于生产者微服务注册信息,第二子类加载器发现需要调用的微服务,并确定需要调用的微服务对应的第一子类加载器;第二子类加载器加载的消费者微服务调用需要调用的微服务对应的第一类子加载器加载的生产者微服务。
[0012] 第三方面,本发明实施例提供一种微服务架构构建装置,该装置包括:微服务架构包括父类加载器和子类加载器,装置包括:创建单元,用于基于父类加载器在一个进程内创建一个或多个子类加载器;加载单元,用于一个或多个子类加载器中的每个子类加载器加载同一工作流程中的一个微服务。
[0013] 第四方面,本发明实施例提供一种微服务调用装置,该装置包括:调用单元,用于同一工作流程中的微服务基于微服务架构相互调用,其中,微服务架构为第一方面所述的微服务架构构建方法构建的微服务架构,微服务架构包括一个父类加载器和多个子类加载器,子类加载器包括第一子类加载器和第二子类加载器。
[0014] 第五方面,本发明实施例提供一种电子设备,其中,电子设备包括:存储器,用于存储指令;以及处理器,用于调用存储器存储的指令执行如第一方面所述的一种微服务架构构建方法及第二方面所述的一种微服务调用方法。
[0015] 第四方面,本发明实施例提供一种计算机可读存储介质,其中,计算机可读存储介质存储有计算机可执行指令,计算机可执行指令在由处理器执行时,执行第一方面所述的一种微服务架构构建方法及第二方面所述的一种微服务调用方法。
[0016] 本发明提供的一种微服务架构的构建方法及装置,一方面,基于本公开提供的一种微服务架构的构建方法构建的微服务架构,微服务架构中只包含一个进程,与目前已有的微服务架构中的多个进程相比,减少微服务架构本身所占用的硬件设备资源。另一方面,基于微服务架构的构建方法构建的微服务架构调用微服务架构中的微服务,由于各个微服务在同一进程内,各个微服务相互之间的调用无需经过序列化、网络传输、反序列化过程,在微服务相互调用过程中不会占用硬件设备资源。

附图说明

[0017] 通过参考附图阅读下文的详细描述,本发明实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本发明的若干实施方式,其中:
[0018] 图1示出了本发明实施例提供的一种微服务架构构建方法示意图;
[0019] 图2示出了本发明实施例提供的一种微服务架构示意图;
[0020] 图3示出了本发明实施例提供的一种微服务调用方法示意图;
[0021] 图4示出了本发明实施例提供的微服务调用过程示意图;
[0022] 图5示出了本发明实施例提供的一种微服务架构构建装置示意图;
[0023] 图6示出了本发明实施例提供的一种微服务调用装置示意图;
[0024] 图7示出了本发明实施例提供的一种电子设备示意图。
[0025] 在附图中,相同或对应的标号表示相同或对应的部分。

具体实施方式

[0026] 下面将参考若干示例性实施方式来描述本发明的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本发明,而并非以任何方式限制本发明的范围。
[0027] 需要注意,虽然本文中使用“第一”、“第二”等表述来描述本发明的实施方式的不同子文件、步骤和数据等,但是“第一”、“第二”等表述仅是为了在不同的子文件、步骤和数据等之间进行区分,而并不表示特定的顺序或者重要程度。实际上,“第一”、“第二”等表述完全可以互换使用。
[0028] 本文中的硬件设备可为服务器、存储器等具有存储功能的硬件设备,本公开不做具体限定。
[0029] 图1为本公开实施例提供的一种微服务架构构建方法的示意图。图1所示方法适用于Java虚拟机类加载器中可加载Java等编程语言的、基于Java等编程语言编写的、同一程序中的微服务相互调用的微服务架构构建。如图1所示,在一例中,微服务架构包括父类加载器和子类加载器,一种微服务架构构建方法包括步骤S110‑S120:
[0030] 在步骤S110中:基于父类加载器在一个进程内创建一个或多个子类加载器。
[0031] 在本例中,父类加载器为Java虚拟机类加载器,Java虚拟机类加载器是基于Java等编程语言编写程序运行的基础。
[0032] 在本例中,父类加载器为一个,即进程为一个,实现在一个进程内创建一个或多个子类加载器。
[0033] 在本例中,父类加载器与子类加载器是父子关系,子类加载器可共享父类加载器加载的共享资源,父类加载器也知道每个子类加载器加载的微服务。
[0034] 在步骤S120中:一个或多个子类加载器中的每个子类加载器加载同一工作流程中的一个微服务。
[0035] 在本例中,子类加载器数量与同一工作流程中的微服务数量相对应,每个子类加载器只加载一个同一工作流程中的微服务。若同一工作流程中删除一个微服务,那么加载删除的微服务的子类加载器同样会删除。若在同一工作流程中,增加一个或多个微服务,父类加载器对应实时创建子类加载器加载增加的一个或多个微服务中的每个微服务。
[0036] 图2为基于微服务架构构建方法构建的微服务架构。如图2中所示,基于微服务构建方法构建的微服务架构中只有一个父类加载器,父类加载器创建多个子类加载器,每个子类加载器对应加载一个微服务。父类加载器加载共享资源,各个子类加载器可向父类加载器加载共享资源,父类加载器可获取多个子类加载器中每个子类加载器对应的微服务的相关信息,例如微服务可实现的功能。
[0037] 基于本公开实施例提供的一种微服务架构构建方法构建的微服务架构,微服务架构中只包含一个父类加载器,即只包含一个进程,与目前已有的微服务架构中的多个进程相比,减少微服务架构本身所占用的硬件设备资源。且父类加载器加载共享资源,每个子类加载器对应的微服务无需存储共享资源,避免多个微服务存在大量重复的共享资源,进一步减少微服务架构占用硬件设备资源。
[0038] 在本公开一实施例中,基于父类加载器在一个进程内创建多个子类加载器,包括:调用父类加载器的创建子类加载器接口,基于父类加载器的创建子类加载器接口,创建一个或多个子类加载器。
[0039] 在本例中,父类加载器为Java虚拟机类加载器,Java虚拟机类加载器具有创建子类加载器的接口,通过调用创建子类加载器接口可创建一个或多个子类加载器。由于Java虚拟机类加载器只有一个创建子类加载器接口,因此创建的一个或多个子类加载器在同一进程内。
[0040] Java虚拟机类加载器自身的机制,能够隔离在一个进程内创建的一个或多个子类加载器。实现在多个子类加载器加载的微服务相互隔离的同时,多个子类加载器加载的微服务相互调用过程中无需经过序列化、网络传输、反序列化过程,节省了在多个子类加载器加载的微服务相互调用过程中硬件设备资源的占用。
[0041] 在本公开一实施例中,一个或多个子类加载器共享父类加载器中加载的通用资源,其中,通用资源包括:服务器资源、数据库资源、通用工具类库资源,子类加载器内不包括通用资源。
[0042] 基于本公开实施例提供的一种微服务架构构建方法构建的微服务架构,基于父类加载器加载子类加载器加载的微服务之间的共享资源。由于子类加载器可共享父类加载器资源,因此,若同一工作流程中的微服务需要共享资源,可向父类节点获取所需的共享资源。即同一工作流程中的每个子类加载器加载的每个微服务无需重复存储共享资源,进一步减少微服务架构本身占用的硬件设备资源。
[0043] 基于微服务架构的微服务调用过程中,微服务分为生产者微服务和消费者微服务。生产者微服务需要进行注册,消费者微服务去生产者微服务注册的地方,得知为消费者微服务提供所需服务的生产者微服务,从而消费者微服务调用能够为其提供所需服务的生产者微服务。
[0044] 图3为本公开实施例提供的一种微服务调用方法的示意图。图3所示方法,同一工作流程中的微服务基于微服务架构相互调用,其中,微服务架构为基于上述微服务架构的构建方法构建的微服务架构,微服务架构包括一个父类加载器和多个子类加载器,子类加载器包括第一子类加载器和第二子类加载器。如图3所示,微服务调用方法包括步骤S210至步骤S240。
[0045] 在步骤S210中,加载生产者微服务的第一子类加载器向父类加载器注册生产者微服务。
[0046] 在步骤S220中,父类加载器记录生产者微服务注册信息。
[0047] 在本例中,生产者微服务注册信息包括:生产者微服务的服务类型及加载该生产者微服务的第一子类加载器。
[0048] 在步骤S230中,加载消费者微服务的第二子类加载器发送需要调用的微服务至父类加载器。
[0049] 在步骤S240中,基于生产者微服务注册信息,第二子类加载器发现需要调用的微服务,并确定需要调用的微服务对应的第一子类加载器。
[0050] 在本例中,第二子类加载器基于生产者微服务注册信息中的生产者微服务的服务类型发现需要调用的微服务,基于生产者微服务注册信息中的加载生产者微服务对应的第一子类加载器,发现加载需要调用的微服务对应的第一子类加载器。
[0051] 在步骤S250中,第二子类加载器加载的消费者微服务调用需要调用的微服务对应的第一类子加载器加载的生产者微服务。
[0052] 基于上述微服务架构的构建方法构建的微服务架构调用微服务架构中的微服务,由于各个微服务在同一进程内,各个微服务相互之间的调用无需经过序列化、网络传输、反序列化过程,在微服务相互调用过程中不会占用硬件设备资源。
[0053] 图4为微服务调用过程示意图。图4所示的微服务调用过程中,只有一个生产者微服务、一个消费者微服务的例子,微服务调用过程为:子类加载器1加载的生产者微服务向父类加载器进行生产者微服务注册,父类加载器记录信息,记录的信息包括:子类加载器1加载的生产者微服务类型及子类加载器1。子类加载器2加载的消费者微服务在父类加载器上发现需要调用的消费者微服务,根据父类加载器记录的信息找到该需要调用的消费者微服务所对应的子类加载器1,之后子类加载器2加载的消费者微服务即可向子类加载器1发起消费者微服务调用。由于子类加载器2和子类加载器1位于同一进程,所以二者加载的两个微服务之间的调用是同进程内调用,不再需要序列化、网络传输和反序列化的硬件设备资源开销。
[0054] 基于与一种微服务架构构建方法相同的发明构思,本公开实施例还提供一种微服务架构构建装置。
[0055] 图5示出了本公开实施例提供的一种微服务架构构建装置的示意图。如图5所示,一种微服务架构构建装置包括:
[0056] 创建单元110,用于基于父类加载器在一个进程内创建一个或多个子类加载器。
[0057] 加载单元120,用于一个或多个子类加载器中的每个子类加载器加载同一工作流程中的一个微服务。
[0058] 在本例中,创建单元110采用如下方式基于父类加载器在一个进程内创建多个子类加载器:
[0059] 调用父类加载器的创建类加载器接口。
[0060] 基于父类加载器的创建类加载器接口,创建一个或多个子类加载器。
[0061] 在本例中,子类加载器个数与同一工作流程中的微服务个数相对应。
[0062] 在本例中,一个或多个子类加载器共享父类加载器中加载的通用资源,其中,通用资源包括:服务器资源、数据库资源、通用工具类库资源,子类加载器内不包括通用资源。
[0063] 在本例中,父类加载器为一个。
[0064] 在本例中,父类加载器包括Java虚拟机类加载器。
[0065] 基于与一种微服务调用方法相同的发明构思,本公开实施例还提供一种微服务调用装置。
[0066] 图6示出了本公开实施例提供的一种微服务调用装置的示意图。如图6所示,一种微服务调用装置包括:
[0067] 调用单元210,用于同一工作流程中的微服务基于微服务架构相互调用,其中,微服务架构为上述微服务架构的构建方法构建的微服务架构,微服务架构包括一个父类加载器和多个子类加载器,子类加载器包括第一子类加载器和第二子类加载器。
[0068] 在一例中,调用单元210采用如下方式用于同一工作流程中的微服务基于微服务架构相互调用:
[0069] 加载生产者微服务的第一子类加载器向父类加载器注册生产者微服务。
[0070] 父类加载器记录生产者微服务注册信息,其中,生产者微服务注册信息包括:生产者微服务及加载生产者微服务的第一子类加载器。
[0071] 加载消费者微服务的第二子类加载器发送需要调用的微服务至父类加载器。
[0072] 基于生产者微服务注册信息,第二子类加载器发现需要调用的微服务,并确定需要调用的微服务对应的第一子类加载器。
[0073] 第二子类加载器加载的消费者微服务调用需要调用的微服务对应的第一类子加载器加载的生产者微服务。
[0074] 如图7所示,本发明的一个实施方式提供了一种电子设备40。其中,该电子设备40包括存储器410、处理器420、输入/输出(Input/Output,I/O)接口430。其中,存储器410,用于存储指令。处理器420,用于调用存储器410存储的指令执行本发明实施例的用于微服务架构构建方法及微服务调用方法。其中,处理器420分别与存储器410、I/O接口430连接,例如可通过总线系统和/或其他形式的连接机构(未示出)进行连接。存储器410可用于存储程序和数据,包括本发明实施例中涉及的用于微服务架构构建及微服务调用的程序,处理器420通过运行存储在存储器410的程序从而执行电子设备40的各种功能应用以及数据处理。
[0075] 本发明实施例中处理器420可以采用数字信号处理器(Digital  Signal Processing,DSP)、现场可编程门阵列(Field‑Programmable Gate Array,FPGA)、可编程逻辑阵列(Programmable Logic Array,PLA)中的至少一种硬件形式来实现,处理器420可以是中央处理单元(Central Processing Unit,CPU)或者具有数据处理能力和/或指令执行能力的其他形式的处理单元中的一种或几种的组合。
[0076] 本发明实施例中的存储器410可以包括一个或多个计算机程序产品,计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。易失性存储器例如可以包括随机存取存储器(Random Access Memory,RAM)和/或高速缓冲存储器(cache)等。非易失性存储器例如可以包括只读存储器(Read‑Only Memory,ROM)、快闪存储器(Flash Memory)、硬盘(Hard Disk Drive,HDD)或固态硬盘(Solid‑State Drive,SSD)等。
[0077] 本发明实施例中,I/O接口430可用于接收输入的指令(例如数字或字符信息,以及产生与电子设备40的用户设置以及功能控制有关的键信号输入等),也可向外部输出各种信息(例如,图像或声音等)。本发明实施例中I/O接口430可包括物理键盘、功能按键(比如音量控制按键、开关按键等)、鼠标、操作杆、轨迹球、麦克风、扬声器、和触控面板等中的一个或多个。
[0078] 在一些实施方式中,本发明提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机可执行指令,计算机可执行指令在由处理器执行时,执行上文所述的任何方法。
[0079] 尽管在附图中以特定的顺序描述操作,但是不应将其理解为要求按照所示的特定顺序或是串行顺序来执行这些操作,或是要求执行全部所示的操作以得到期望的结果。在特定环境中,多任务和并行处理可能是有利的。
[0080] 本发明的方法和装置能够利用标准编程技术来完成,利用基于规则的逻辑或者其他逻辑来实现各种方法步骤。还应当注意的是,此处以及权利要求书中使用的词语“装置”和“子文件”意在包括使用一行或者多行软件代码的实现和/或硬件实现和/或用于接收输入的设备。
[0081] 此处描述的任何步骤、操作或程序可以使用单独的或与其他设备组合的一个或多个硬件或软件子文件来执行或实现。在一个实施方式中,软件子文件使用包括包含计算机程序代码的计算机可读介质的计算机程序产品实现,其能够由计算机处理器执行用于执行任何或全部的所描述的步骤、操作或程序。
[0082] 出于示例和描述的目的,已经给出了本发明实施的前述说明。前述说明并非是穷举性的也并非要将本发明限制到所公开的确切形式,根据上述教导还可能存在各种变形和修改,或者是可能从本发明的实践中得到各种变形和修改。选择和描述这些实施例是为了说明本发明的原理及其实际应用,以使得本领域的技术人员能够以适合于构思的特定用途来以各种实施方式和各种修改而利用本发明。