一种原子任务执行方法及装置与流程

文档序号:17639999发布日期:2019-05-11 00:36阅读:286来源:国知局
一种原子任务执行方法及装置与流程

本发明涉及网络安全领域,尤其涉及一种原子任务执行方法及装置。



背景技术:

常见的运维执行框架,可以部署到不同的系统环境中,并且具有良好的二次开发特性。运维执行框架中可以部署一个或多个主控节点,用于执行运维任务。一个运维任务由多个原子任务组成。

现有技术中,主控节点并发执行效率低下,而多个主控节点的节点数量必须预先设定,运维执行框架不能根据待执行主机节点的数量灵活地对主控节点进行扩展。另外,现有运行执行框架无法区分需要在不同域上运行的原子任务,只能每次在一个域执行任务。因此,现有技术中,单主控节点并发执行效率低下,多个主控节点的节点数量不能灵活扩展且不能在多个域上同时执行任务,是一个亟待解决的问题。



技术实现要素:

本申请实施例提供了一种原子任务执行方法及装置,解决了现有技术中单主控节点并发执行效率低下,多个主控节点的节点数量不能灵活扩展且不能在多个域上同时执行任务的问题。

本发明实施例提供一种原子任务执行方法,该方法包括:

创建第一域对应的n个原子任务;n为正整数;

若n大于预设原子任务数量,则将所述第一域中主控节点的数量增加至第一数量;

若所述第一域中主控节点的数量等于所述第一数量,则通过所述第一域中的主控节点,执行所述n个原子任务。

可选的,所述通过所述第一域中的主控节点,执行所述n个原子任务,包括:

将所述n个原子任务切割后,分发至所述第一域中的主控节点;其中,所述第一域中每个主控节点分发到的原子任务数量,小于或等于该主控节点可执行原子任务的最大预设数量;

所述第一域中每个主控节点,执行该主控节点接收到的原子任务。

可选的,所述n个原子任务被缓存至所述第一域对应的消息队列,并返回所述n个原子任务中每个原子任务的任务标识;

通过所述n个原子任务中每个原子任务的任务标识,确定该原子任务在所述第一域中对应的主控节点;

将所述n个原子任务中每个原子任务的执行结果,存入所述消息队列。

可选的,所述执行所述n个原子任务之后,还包括:

所述n个原子任务为,运维任务的第一步骤中需要在所述第一域执行的原子任务;

根据第一原子任务的执行结果,确定是否执行所述第一原子任务在所述第一步骤之后需要执行的后续原子任务;所述第一原子任务为所述n个原子任务中任一原子任务。

可选的,若所述第一原子任务的执行结果满足第一预设条件,则执行所述后续原子任务。

可选的,所述第一域中每个主控节点能并发执行的原子任务的数量均为m;m为正整数;

所述第一数量为,n与m的比值在向上取整函数映射的值。

可选的,若n小于所述预设原子任务数量,则将所述第一域中主控节点的数量增加至所述第一数量。

本发明实施例提供一种原子任务执行装置,该装置包括:

创建模块,用于创建第一域对应的n个原子任务;n为正整数;

处理模块,用于若n大于预设原子任务数量,则将所述第一域中主控节点的数量增加至第一数量;以及用于若所述第一域中主控节点的数量等于所述第一数量,则通过所述第一域中的主控节点,执行所述n个原子任务。

可选的,所述处理模块,具体用于:

将所述n个原子任务切割后,分发至所述第一域中的主控节点;其中,所述第一域中每个主控节点分发到的原子任务数量,小于或等于该主控节点可执行原子任务的最大预设数量;

所述第一域中每个主控节点,执行该主控节点接收到的原子任务。

可选的,所述处理模块,还用于将所述n个原子任务缓存至所述第一域对应的消息队列,并返回所述n个原子任务中每个原子任务的任务标识;

用于通过所述n个原子任务中每个原子任务的任务标识,确定该原子任务在所述第一域中对应的主控节点;

以及用于将所述n个原子任务中每个原子任务的执行结果,存入所述消息队列。

可选的,所述n个原子任务为,运维任务的第一步骤中需要在所述第一域执行的原子任务;

所述处理模块,还用于根据第一原子任务的执行结果,确定是否执行所述第一原子任务在所述第一步骤之后需要执行的后续原子任务;所述第一原子任务为所述n个原子任务中任一原子任务。

可选的,所述处理模块,还用于若所述第一原子任务的执行结果满足第一预设条件,则执行所述后续原子任务。

可选的,所述第一域中每个主控节点能并发执行的原子任务的数量均为m;m为正整数;

所述第一数量为,n与m的比值在向上取整函数映射的值。

可选的,所述处理模块,还用于若n小于所述预设原子任务数量,则将所述第一域中主控节点的数量增加至所述第一数量。

本发明实施例中,n个原子任务被创建时与第一域建立了对应关系,在n大于预设原子任务数量时,第一域中主控节点的数量可以灵活扩展至第一数量,在确定第一域中主控节点的数量等于所述第一数量时,通过定第一域中主控节点执行与第一域对应的n个原子任务,以第一域为例,当多个域的任务被创建时,均可建立第一域与原子任务之间的关系,将原子任务分别交由对应域的主控节点同时执行。

附图说明

图1为本发明实施例提出的一种原子任务执行方法对应的整体架构图;

图2为本发明实施例提出的一种原子任务执行方法对应的步骤流程图;

图3为本发明实施例提出的一种原子任务执行方法对应的创建原子任务的效果示意图;

图4为本发明实施例提出的一种原子任务执行方法对应的原子任务的垂直切割和裂变分发的效果示意图;

图5为本发明实施例提出的一种原子任务执行方法对应的具体步骤流程图;

图6为本发明实施例提出的一种原子任务执行装置对应的结构示意图。

具体实施方式

为了更好的理解上述技术方案,下面将结合说明书附图及具体的实施方式对上述技术方案进行详细的说明,应当理解本申请实施例以及实施例中的具体特征是对本申请技术方案的详细的说明,而不是对本申请技术方案的限定,在不冲突的情况下,本申请实施例以及实施例中的技术特征可以相互结合。

云计算的普及,使得数据中心中管理的节点大幅增长,运维的难度和复杂度也在增加。对于运维人员来说,如何高效地运维海量的节点是一个不容忽视的问题。业界已有各种技术方案,例如开源的ansible等,这些运维管理工具都能实现对数据中心节点的自动化、规模化的管理,运维人员能够通过这些工具实现各种运维任务的下发和执行。种常见的运维执行框架,可以部署到不同的系统环境中,并且具有良好的二次开发特性。运维执行框架可以部署一个或多个主控节点,用于执行运维任务。一个运维任务由多个原子任务组成。

然而这些工具在越来越多的节点面前,都会存在一些局限性。在实际使用过程中,我们发现这些管理工具面临着以下问题:原子任务的并发执行数量达不到要求,执行效率低下,缺乏对异步执行结果的有效处理,以及对复杂运维场景不支持。具体问题如下:

第一、单主控节点大规模并发执行效率低下。这也是最大的问题,单主控节点的并发执行原子任务的数量有限,虽然可以通过修改运维执行框架的配置参数来定义主控节点的并发数量,但由于主控节点的固有能力,在配置参数大于一定值时,运维执行框架的主控节点会出现性能瓶颈(举例来说,经测试单个ansible的合理值大概在200左右),导致执行效率变低,因此单个主控节点能够并发执行原子任务的数量是有限度的。

第二、多个主控节点场景下,无法事先确定主控节点数量。既然单点的主控节点有性能瓶颈,那么首先想到的方案就是使用多个主控节点组成一组主控节点对外提供服务。但是主控节点的数量到底该定为多少,由于目前没有事先编排原子任务的数量,因此主控节点的数量也无法确定。如果将主控节点数量设置过大,能并发执行的原子任务数量远大于需要执行的原子任务数量,必然会造成资源的浪费;反之,如果设置过小,那么当原子任务数量较大,负载较高时,执行效率必然会大打折扣,甚至会执行失败。

第三、无法将异构原子任务进行切割,以满足不同类型原子任务执行需求。在实际的使用场景中,如果原子任务是异构的,举例来说,在数据中心有很多域,部分原子任务要到域1去执行,部分任务要到域2去执行,那么本身是无法去区分这种异构任务的,实际情况中由于网络层面的隔离只能在一个域执行,如果将这些任务都发给某个主控节点执行,那么必然会有部分原子任务执行失败。

总体来说,现有技术中,单主控节点并发执行效率低下,而多个主控节点的节点数量必须预先设定,不能根据原子任务的数量灵活地对主控节点进行扩展。另外,现有的无法区分需要在不同域上运行的原子任务,只能每次在一个域执行任务。因此,现有技术中,单主控节点并发执行效率低下,多个主控节点的节点数量不能灵活扩展且不能在多个域上同时执行任务,是一个亟待解决的问题。

为了克服以上运维痛点,本发明实施例基于设计了一套弹性型异步执行框架,能够高效地满足数据中心海量节点的运维操作场景,有效降低运维成本。如图1所示,为本发明实施例提出的一种原子任务执行方法对应的整体架构图。

架构的入口是一个基于浏览器界面的任务创建及编排平台,用来生成原子任务、编排原子任务及查看原子任务的执行结果,并根据执行结果决定是否执行下一个原子任务。创建后的原子任务会交给核心调度引擎处理,垂直切割后的原子任务会被分发至各个域的主控节点,举例来说,主控节点可以用docker容器实现。核心调度引擎会根据每个域原子任务的数量以及该域中能并发执行的原子任务数量,调整该域的主控节点,在运行状态的主控节点的标识会在服务注册中心保存。主控节点接收到原子任务后,可通过celery组件将原子任务分配到各个主机,这些原子任务会进行异步执行,执行结果会通过回调机制推送至消息队列,再由消息队列推送至web端的任务创建及编排平台。

需要说明的是,图1所示的整体框架中,各个模块可根据不同应用场景采用相应组件。举例来说,服务注册中心可以为zookeeper、etcd、consul等。消息队列可以为rabbitmq,activemq,也能实现类似的功能。

下面结合图2,详细说明各个模块。如图2所示,为本发明实施例提出的一种原子任务执行方法对应的步骤流程图。

步骤201:创建第一域对应的n个原子任务。

n为正整数。

步骤202:若n大于预设原子任务数量,则将所述第一域中主控节点的数量增加至第一数量。

步骤203:若所述第一域中主控节点的数量等于所述第一数量,则通过所述第一域中的主控节点,执行所述n个原子任务。

步骤201中,仅以一个域说明创建该域对应的n个原子任务,在这一步,多个域对应的原子任务可以同时被创建。

步骤201包含以下几个子步骤:

(1)通过web端的任务编排平台将一个运维任务分解为多个原子任务。

一个复杂的运维任务包含多个原子任务,每个原子任务都需要独立执行,这些原子任务通过web端可视化编排平台进行组合,如图3所示,为本发明实施例提出的一种原子任务执行方法对应的创建原子任务的效果示意图。

(2)建立每个原子任务与域的对应关系,以每个原子任务建立标签的方式为例说明。

每一个原子任务在创建时都会被贴上一个标签,同时也会有一个标签与之对应,贴上标签的原子任务只能在匹配该标签的主控节点上执行。当大量原子任务创建时,可以通过标签来区分异构的原子任务。从而实现原子任务的垂直切分。这里举个例子来说明:用户要在1000个主机上执行一个脚本,这1000个主机是异构的,有500台节点是在数据中心的域a,另外500台在数据中心的域b,因此500个原子任务具有域a的标签,500个原子任务具有域b的标签。这里的标签可以手动添加,也可以根据外部数据,配置管理数据库(configurationmanagementdatabase,cmdb),以自动区分。

(3)原子任务的信息统计。

这些原子任务的基本信息(原子任务的执行节点、执行命令、执行参数)会到达核心调度引擎,核心调度引擎的调度模块首先对原子任务进行统计,计算每种标签的原子任务个数,用于后续主控节点弹性伸缩的决策。

步骤202中,预设原子任务数量可以为第一域中当前主控节点的数量与每个主控节点能并发执行的原子任务数量的乘积,也可以根据业务需求灵活设定。举例来说,若域1的当前主控节点的数量为5,每个主控节点能并发执行的任务数量为200,预设原子任务数量可以取801~999中的任意值。

步骤202的具体步骤可分为两个步骤。第一步,当第一域中主控节点的当前能并发执行的原子任务数量满足一定条件时,增加或减少主控节点的数量。第二步,将原子任务发送至主控节点。

第一步包含以下几个步骤:

(1)监控模块查询服务注册中心。

具体地,通过配置一个服务注册中心实现查询,举例来说,使用开源的zookeeper。主控节点上有一个进程把自身节点的信息注册到zookeeper。监控模块从服务注册中心获取到每种标签的主控节点的当前真实数量。

(2)判断第一域中主控节点的当前能并发执行的原子任务数量与n的大小关系。

调度模块获取到以上数量信息后,结合任务负载和实际数量来决定是否进行主控节点的扩展,具体判定规则如下。

对于每种标签的,计算需要该类型的数量:需要该类型主控节点数=该类型任务数/每个主控节点并发任务数,每个主控节点并发任务数根据实际情况来确定。在测试中发现,在每个主控节点的配置为2个中央处理器,内存大小4g的情况下,设置为200比较合适。

第二步包含以下几个步骤:

(1)弹性扩展或收缩主控节点。

如果发现需要的数量大于在服务注册中心注册的数量,那么调度模块就发送创建指令到基础设施层进行主控节点的创建。也就是说,将第一域中主控节点的数量增加至第一数量。一种可选的实施方式为,所述第一域中每个主控节点能并发执行的原子任务的数量均为m;m为正整数;所述第一数量为,n与m的比值在向上取整函数映射的值。另外一种可选的实施方式为,若n小于所述预设原子任务数量,则将所述第一域中主控节点的数量增加至所述第一数量。

举例来说,以上1000个任务,首先根据标签进行拆分各500台。按照第二步,假设调度模块从服务注册中心监测到标签为域a的主控节点只有2台,标签为域b的主控节点只有1台,而500个任务至少需要500/200=2.5个节点,因此决定进行弹性扩展,发送指令到基础资源层,域a类型的扩展1台,总共3台,域b类型的扩展2台,总共3台。

(2)创建用于实现主控节点的容器。

本发明实施例采用容器的方式来运行,举例来说,如docker容器。利用容器启停迅速的优势来加快弹性扩展的速度。具体做法是:通过提前创建好的容器镜像,放到基础设施层的物理机节点上,然后核心调度模块在决定弹性扩容之后,会去调用物理机上容器启动的脚本,来拉起一个容器。由于镜像已经预热,因此容器在启动时会非常迅速。根据实际情况,主控节点的数量可以设置一个上限值,以免出现资源不够的情况。当容器创建完成后,容器里面的主进程会启动服务,同时把该节点信息(如标签信息等)上报至服务注册中心。服务注册中心用来让核心调度引擎对进行服务发现。

(3)原子任务的垂直切割和裂变分发。

垂直切割有两部分,一个是前面提到的根据标签来切割异构的原子任务,这里只用根据原子任务与域的对应关系进行区分;二是再根据原子任务负载把原子任务裂变分发到不同的主控节点上。

举例来说,对于以上1000个原子任务,根据标签切割为两组,每组500个原子任务。再对每组原子任务进行切割,发送至每个主控节点,实现裂变式的原子任务分发,如图4所示,为本发明实施例提出的一种原子任务执行方法对应的原子任务的垂直切割和裂变分发的效果示意图。

通过以上的节点水平扩展和原子任务垂直切割后,就可以让大量的异构原子任务请求均匀地分摊到合适的主控节点上。同时,监控模块可以监控每个节点的资源使用情况,当节点上比较空闲,则会将其移除。

步骤203中,首先会检验主控节点的数量是否不足或者冗余,也就是与第一数量进行比较。如果主控节点的数量为第一数量,则将每个域对应的原子任务,分发至该域中各原子任务对应的主控节点。举例来说,通过第一域中的主控节点,执行n个原子任务。一种可选的实施方式为,将所述n个原子任务切割后,分发至所述第一域中的主控节点;其中,所述第一域中每个主控节点分发到的原子任务数量,小于或等于该主控节点可执行原子任务的最大预设数量;所述第一域中每个主控节点,执行该主控节点接收到的原子任务。

容器里面的进程通过对外提供一个rest接口来处理由核心调度模块发过来的原子任务请求,每个请求达到后立即响应,并返回一个标识。本框架这里使用的是celery这个开源的执行引擎,前台任务请求到达后,利用消息队列缓存任务请求,然后交由celery处理,celery从这些队列里面取任务,然后调用的api进行任务的执行。

步骤203之后,一种可选的实施方式为,所述n个原子任务被缓存至所述第一域对应的消息队列,并返回所述n个原子任务中每个原子任务的任务标识;通过所述n个原子任务中每个原子任务的任务标识,确定该原子任务在所述第一域中对应的主控节点;将所述n个原子任务中每个原子任务的执行结果,存入所述消息队列。

根据第一原子任务的执行结果,确定是否执行所述第一原子任务在所述第一步骤之后需要执行的后续原子任务;所述第一原子任务为所述n个原子任务中任一原子任务。举例来说,该实施方式下,若所述第一原子任务的执行结果大于预设阈值,则执行所述后续原子任务;否则重新执行所述第一原子任务。

具体地,调用执行完成任务后,框架通过重写的callback插件,让执行任务通过callback机制向消息队列rabbitmq中写消息。前台的任务编排平台监听消息队列,能够及时获取到任务执行结果,并根据第一步返回的标识进行匹配,获取该原子任务对应的执行节点。

然后根据执行结果触发下一个原子任务的处理。可以根据设置的判断规则来决定是否执行后续任务,判定规则可以为:当脚本执行输出结果大于某个值,则执行后续某个任务,当脚本执行输出结果小于某个值,则执行后续另外的任务或者停止执行。如果后续还有任务执行,则继续将任务发送到核心调度引擎进行执行,直到整个复杂作业执行结束为止。

如图5所示,为本发明实施例提出的一种原子任务执行方法对应的具体步骤流程图。

步骤501:创建原子任务。

用户通过任务创建及编排平台,创建原子任务,创建过程中建立了每个原子任务和域之间的对应关系。

步骤502:判断每个域的原子任务数量与该域中主控节点可并发执行的原子任务数量的大小关系。

步骤503:根据步骤502中的大小关系,扩展或移除每个域中的主控节点。

以第一域中的主控节点为例,若n大于预设原子任务数量,则将所述第一域中主控节点的数量增加至第一数量,若n小于所述预设原子任务数量,则将所述第一域中主控节点的数量增加至所述第一数量。

步骤504:对原子任务进行切割和分发。

一是将不同域的原子任务切割;二是将分割到每个域的原子任务裂变,分发到不同的主控节点上。

步骤505:处理原子任务。

每个主控节点接收到原子任务后,通过celery分发到各个主机执行。

步骤506:反馈原子任务的执行结果。

每个原子任务执行成功或失败的结果会通过回调机制发送至消息队列,再反馈至任务创建及编排平台。

步骤507:判断是否执行后续原子任务。

根据每个原子任务执行的结果,确定是否执行该原子任务的后续原子任务。举例来说,该实施方式下,若所述第一原子任务的执行结果大于预设阈值,则执行所述后续原子任务;否则重新执行所述第一原子任务。

本发明实施例在原生的基础上进行了增强和改进,提出了一种已于任务执行方法,具有以下优点:

(1)可伸缩式的主控节点:可以适应动态变化的工作负载,执行框架根据监控系统观察到的主控节点数量自动扩展和收缩,当所需主控节点不足时,将新的注册到可用服务注册中心供调用,当某个节点明显得不到充分利用或者资源不足创建足量主控节点时将其移除。通过这种弹性的设计,可以应对大规模并发执行的负载,提高吞吐量,大大提升任务执行效率。

(2)异构任务垂直切割:可以保证不同类型的任务分发到特定的主控节点。此外还可以根据预制的策略选择round-robin轮询分发算法、根据业务系统/所属区域分发算法、同类任务聚合分发等,满足不同执行场景的需求。

(3)异步回调处理机制:引入celery异步调度框架,针对每个任务都进行异步处理,能够立即将执行响应给前台任务发起端,避免堵塞和等待;针对执行结果,采用callback机制和消息队列,能够及时将执行结果推送给任务发起方。

(4)支持复杂的运维场景:提供任务模板编排功能,能够将多个任务串联起来,构建复杂的运维作业场景。并且通过将任务编排为若干个原子任务,加入灵活控制,使得前后原子节点实现有状态“智能化”流转,后一个任务可以根据前面的任务的执行状态和结果来自动触发和处理。

本发明实施例中,n个原子任务被创建时与第一域建立了对应关系,在n大于预设原子任务数量时,第一域中主控节点的数量可以灵活扩展至第一数量,在确定第一域中主控节点的数量等于所述第一数量时,通过定第一域中主控节点执行与第一域对应的n个原子任务,以第一域为例,当多个域的任务被创建时,均可建立第一域与原子任务之间的关系,将原子任务分别交由对应域的主控节点同时执行。

如图6所示,为本发明实施例提出的一种原子任务执行装置对应的结构示意图,本发明实施例提供一种原子任务执行装置,该装置包括:

创建模块601,用于创建第一域对应的n个原子任务;n为正整数;

处理模块602,用于若n大于预设原子任务数量,则将所述第一域中主控节点的数量增加至第一数量;以及用于若所述第一域中主控节点的数量等于所述第一数量,则通过所述第一域中的主控节点,执行所述n个原子任务。

可选的,所述处理模块602,具体用于:

将所述n个原子任务切割后,分发至所述第一域中的主控节点;其中,所述第一域中每个主控节点分发到的原子任务数量,小于或等于该主控节点可执行原子任务的最大预设数量;

所述第一域中每个主控节点,执行该主控节点接收到的原子任务。

可选的,所述处理模块602,还用于将所述n个原子任务缓存至所述第一域对应的消息队列,并返回所述n个原子任务中每个原子任务的任务标识;

用于通过所述n个原子任务中每个原子任务的任务标识,确定该原子任务在所述第一域中对应的主控节点;

以及用于将所述n个原子任务中每个原子任务的执行结果,存入所述消息队列。

可选的,所述n个原子任务为,运维任务的第一步骤中需要在所述第一域执行的原子任务;

所述处理模块602,还用于根据第一原子任务的执行结果,确定是否执行所述第一原子任务在所述第一步骤之后需要执行的后续原子任务;所述第一原子任务为所述n个原子任务中任一原子任务。

可选的,所述处理模块602,还用于若所述第一原子任务的执行结果满足第一预设条件,则执行所述后续原子任务。

可选的,所述第一域中每个主控节点能并发执行的原子任务的数量均为m;m为正整数;

所述第一数量为,n与m的比值在向上取整函数映射的值。

可选的,所述处理模块602,还用于若n小于所述预设原子任务数量,则将所述第一域中主控节点的数量增加至所述第一数量。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、装置(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

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