G06/F950 G06/F948 G06/F954
1.一种资源复用方法,其特征在于,包括:
主进程根据任务并发量向资源管理器申请多个容器资源,所述任务并发量包括待执行任务的数量;
所述主进程向申请到的所述容器资源对应的节点管理器发送启动任务请求;所述启动任务请求用于触发收到所述启动任务请求的节点管理器对应的容器资源运行所述待执行任务;
如果所述主进程接收到所述容器资源的任务完成信息,则向所述容器资源对应的节点管理器发送新的启动任务请求,直至没有需要运行的待执行任务。
2.如权利要求1所述的方法,其特征在于,还包括:
所述主进程启动远程过程调用服务器,并将所述远程过程调用服务器的地址写到协调服务节点上,以使各所述容器资源通过获取所述协调服务节点上的所述远程过程调用服务器的地址与所述主进程保持通信;
在所述主进程重新启动的状态下,所述主进程将所述远程过程调用服务器的新地址写到所述协调服务节点上,并采用所述远程过程调用服务器的新地址重新与等待中的容器资源建立通信;所述等待中的容器资源包括在所述主进程重新启动前与所述主进程通信且存在尚未运行完成的任务的容器资源。
3.如权利要求2所述的方法,其特征在于,所述主进程将所述远程过程调用服务器的新地址写到所述协调服务节点上,并重新与等待中容器资源建立通信包括:
所述主进程新建协调服务节点,并将所述远程过程调用服务器的新地址写到新建的协调服务节点上;
所述主进程采用所述远程过程调用服务器的新地址与所述等待中的容器资源重新建立通信,以使所述等待中的容器资源继续运行尚未运行完成的任务。
4.如权利要求1所述的方法,其特征在于,如果所述主进程接收到所述容器资源的任务完成信息,则向所述容器资源对应的节点管理器发送新的启动任务请求,包括:
所述主进程接收各所述容器资源持续发送的心跳信息,所述心跳信息包括所述任务完成信息或任务正在运行信息;
所述主进程根据接收到的各所述容器资源的心跳信息,判断是否需要向各所述容器资源对应的节点管理器发送新的启动任务请求。
5.如权利要求1-4任一项所述的方法,其特征在于,所述待执行任务包括映射任务和/或归约任务。
6.一种资源复用装置,其特征在于,包括:
资源申请模块,用于根据任务并发量向资源管理器申请多个容器资源,所述任务并发量包括待执行任务的数量;
请求模块,用于向申请到的所述容器资源对应的节点管理器发送启动任务请求;所述启动任务请求用于触发收到所述启动任务请求的节点管理器对应的容器资源运行所述待执行任务;其中,如果接收模块接收到所述容器资源的任务完成信息,所述请求模块则向所述容器资源对应的节点管理器发送新的启动任务请求,直至没有需要运行的待执行任务。
7.如权利要求6所述的装置,其特征在于,还包括:
启动模块,用于启动远程过程调用服务器,并将所述远程过程调用服务器的地址写到协调服务节点上,以使各所述容器资源通过获取所述协调服务节点上的所述远程过程调用服务器的地址与启动模块保持通信;
在所述启动模块重新启动的状态下,所述启动模块将所述远程过程调用服务器的新地址写到所述协调服务节点上,并采用所述远程过程调用服务器的新地址重新与等待中的容器资源建立通信;所述等待中的容器资源包括在所述启动模块重新启动前与所述启动模块通信且存在尚未运行完成的任务的容器资源。
8.如权利要求6所述的装置,其特征在于,所述接收模块,用于接收各所述容器资源持续发送的心跳信息,并根据接收到的各所述容器资源的心跳信息,判断是否需要向各所述容器资源对应的节点管理器发送新的启动任务请求;所述心跳信息包括所述任务完成信息或任务正在运行信息。
9.一种资源复用终端,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如权利要求1至5中任一项所述的方法。
10.一种计算机可读存储介质,其存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至5中任一项所述的方法。
本发明涉及资源复用技术领域,尤其涉及一种资源复用方法、装置、终端和计算机可读存储介质。
在现有技术中,开源的批处理分布式计算引擎MapReduce通过客户端向分布式调度系统Yarn提交作业,分布式调度系统Yarn负责为作业启动主进程。主进程负责为各个任务向分布式调度系统Yarn申请资源并启动容器资源执行。但是该方法存在一定的缺陷。一方面,由于分布式调度系统Yarn必须为每一个任务启动一个容器资源,这将使得作业运行时间增加一大笔任务调度开销。另一方面,当主进程因为异常挂掉后,它从日志中恢复已经运行完成的任务,但是正在运行的各个任务会被分布式调度系统Yarn清除,这将导致很大的资源浪费,延长作业的运行时间。
在背景技术中公开的上述信息仅用于加强对本发明的背景的理解,因此其可能包含没有形成为本领域普通技术人员所知晓的现有技术的信息。
本发明实施例提供一种资源复用方法、装置、终端和计算机可读存储介质,以解决现有技术中的一个或多个技术问题。
第一方面,本发明实施例提供了一种资源复用方法,包括:
主进程根据任务并发量向资源管理器申请多个容器资源,所述任务并发量包括待执行任务的数量;
所述主进程向申请到的所述容器资源对应的节点管理器发送启动任务请求;所述启动任务请求用于触发收到所述启动任务请求的节点管理器对应的容器资源运行所述待执行任务;
如果所述主进程接收到所述容器资源的任务完成信息,则向所述容器资源对应的节点管理器发送新的启动任务请求,直至没有需要运行的待执行任务。
结合第一方面,本发明实施例在第一方面的第一种实现方式中,还包括:
所述主进程启动远程过程调用服务器,并将所述远程过程调用服务器的地址写到协调服务节点上,以使各所述容器资源通过获取所述协调服务节点上的所述远程过程调用服务器的地址与所述主进程保持通信;
在所述主进程重新启动的状态下,所述主进程将所述远程过程调用服务器的新地址写到所述协调服务节点上,并采用所述远程过程调用服务器的新地址重新与等待中的容器资源建立通信;所述等待中的容器资源包括在所述主进程重新启动前与所述主进程通信且存在尚未运行完成的任务的容器资源。
结合第一方面的第一种实现方式,本发明实施例在第一方面的第二种实现方式中,所述主进程将所述远程过程调用服务器的新地址写到所述协调服务节点上,并重新与等待中容器资源建立通信包括:
所述主进程新建协调服务节点,并将所述远程过程调用服务器的新地址写到新建的协调服务节点上;
所述主进程采用所述远程过程调用服务器的新地址与所述等待中的容器资源重新建立通信,以使所述等待中的容器资源继续运行尚未运行完成的任务。
结合第一方面,本发明实施例在第一方面的第三种实现方式中,如果所述主进程接收到所述容器资源的任务完成信息,则向所述容器资源对应的节点管理器发送新的启动任务请求,包括:
所述主进程接收各所述容器资源持续发送的心跳信息,所述心跳信息包括所述任务完成信息或任务正在运行信息;
所述主进程根据接收到的各所述容器资源的心跳信息,判断是否需要向各所述容器资源对应的节点管理器发送新的启动任务请求。
结合第一方面至第一方面的第三种实现方式中的任一实施方式,本发明实施例在第一方面的第四种实现方式中,所述待执行任务包括映射任务和/或归约任务。
第二方面,本发明实施例提供了一种资源复用装置,包括:资源申请模块,用于根据任务并发量向资源管理器申请多个容器资源,所述任务并发量包括待执行任务的数量;
请求模块,用于向申请到的所述容器资源对应的节点管理器发送启动任务请求;所述启动任务请求用于触发收到所述启动任务请求的节点管理器对应的容器资源运行所述待执行任务;其中,如果接收模块接收到所述容器资源的任务完成信息,所述请求模块则向所述容器资源对应的节点管理器发送新的启动任务请求,直至没有需要运行的待执行任务。
在一个可能的设计中,还包括:
启动模块,用于启动远程过程调用服务器,并将所述远程过程调用服务器的地址写到协调服务节点上,以使各所述容器资源通过获取所述协调服务节点上的所述远程过程调用服务器的地址与启动模块保持通信;
在所述启动模块重新启动的状态下,所述启动模块将所述远程过程调用服务器的新地址写到所述协调服务节点上,并采用所述远程过程调用服务器的新地址重新与等待中的容器资源建立通信;所述等待中的容器资源包括在所述启动模块重新启动前与所述启动模块通信且存在尚未运行完成的任务的容器资源。
在一个可能的设计中,所述接收模块,用于接收各所述容器资源持续发送的心跳信息,并根据接收到的各所述容器资源的心跳信息,判断是否需要向各所述容器资源对应的节点管理器发送新的启动任务请求;所述心跳信息包括所述任务完成信息或任务正在运行信息。
第三方面,本发明实施例提供了一种资源复用的终端,包括:
所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的模块。
在一个可能的设计中,资源复用的终端的结构中包括处理器和存储器,所述存储器用于存储支持资源复用的终端执行上述第一方面中资源复用的方法的程序,所述处理器被配置为用于执行所述存储器中存储的程序。资源复用的终端还可以包括通信接口,用于资源复用的终端与其他设备或通信网络通信。
第四方面,本发明实施例提供了一种计算机可读存储介质,用于存储资源复用的终端所用的计算机软件指令,其包括用于执行上述第一方面中资源复用的方法为资源复用的终端所涉及的程序。
上述技术方案中的一个技术方案具有如下优点或有益效果:通过采用容器资源复用的方式,改善了容器资源的利用率,能够节省主进程在申请容器资源时带来的性能开销,降低了对分布式调度系统的访问压力,提升了作业性能,实现了集的高吞吐量和高可用性。
上述概述仅仅是为了说明书的目的,并不意图以任何方式进行限制。除上述描述的示意性的方面、实施方式和特征之外,通过参考附图和以下的详细描述,本发明进一步的方面、实施方式和特征将会是容易明白的。
在附图中,除非另外规定,否则贯穿多个附图相同的附图标记表示相同或相似的部件或元素。这些附图不一定是按照比例绘制的。应该理解,这些附图仅描绘了根据本发明公开的一些实施方式,而不应将其视为是对本发明范围的限制。
图1为本发明实施方式提供的资源复用方法的流程图。
图2为本发明另一实施方式提供的资源复用方法的流程图。
图3为本发明实施方式提供的资源复用方法的具体工作流程框图。
图4为本发明实施方式提供的资源复用装置结构示意图。
图5为本发明实施方式提供的资源复用终端结构示意图。
在下文中,仅简单地描述了某些示例性实施例。正如本领域技术人员可认识到的那样,在不脱离本发明的精神或范围的情况下,可通过各种不同方式修改所描述的实施例。因此,附图和描述被认为本质上是示例性的而非限制性的。
本发明实施例提供了一种资源复用方法,如图1所示,包括以下步骤:
S100:主进程(ApplicationMaster)根据任务(Task)并发量向资源管理器(ResourceManager)申请多个容器资源(Container),任务并发量包括待执行任务的数量。根据一种实施方式,申请的容器资源的数量应小于待执行任务的数量,具体需要申请的容器资源的数量可根据客户需求和待执行任务的数量进行调整。
S200:主进程向申请到的容器资源对应的节点管理器(NodeManager)发送启动任务请求。启动任务请求用于触发收到启动任务请求的节点管理器对应的容器资源运行待执行任务。
S300:如果主进程接收到容器资源的任务完成信息,则向容器资源对应的节点管理器发送新的启动任务请求,直至没有需要运行的待执行任务。
在一个实施例中,容器资源对当前待执行任务运行完成后,与该容器资源对应的节点管理器能够保留为主进程分配的容器资源,使得容器资源可以继续处理尚未运行的待执行任务。直至没有需要运行的待执行任务后,各资源管理器将对应的容器资源回收。通过容器资源的重复使用,节省了主进程向资源管理器申请资源带来的性能开销,并且降低了资源管理器的访问压力。
在一个实施例中,各容器资源可以对应同一个节点管理器,也可以对应不同的节点管理器。每一个容器资源一次处理一个待执行任务。
例如,待执行任务的数量为100个,资源管理器为主进程配置了10个容器资源。其中,有1个容器资源对应第一节点管理器,有4个容器资源对应第二节点管理器,其余的五个容器资源对应第三节点管理器。主进程分别向三个节点管理器发送启动任务请求,三个节点管理器上对应的10个容器资源同时运行10个任务。
又如,待执行任务的数量为100个,资源管理器为主进程配置了10个容器资源。10个容器资源可以对应同一个节点管理器。主进程向该节点管理器发送启动任务请求,该节点管理器上对应的10个容器资源同时运行10个任务。
在一个实施例中,在主进程根据任务并发量向资源管理器申请多个容器资源之前,包括:分布式计算引擎MapReduce通过客户端(Client)向开源分布式系统基础架构(Hadoop)的分布式调度系统(Yarn)提交作业,分布式调度系统负责为作业启动主进程。作业的主进程根据作业中的任务并发量向分布式调度系统的资源管理器申请多个容器资源。
在一个实施例中,如果主进程接收到容器资源的任务完成信息,则向容器资源对应的节点管理器发送新的启动任务请求,包括:
主进程接收各容器资源持续发送的心跳信息,心跳信息包括任务完成信息或任务正在运行信息。
主进程根据接收到的各容器资源的心跳信息,判断是否需要向各容器资源对应的节点管理器发送新的启动任务请求。
如果主进程接收到容器资源的任务完成信息,则向容器资源对应的节点管理器发送新的启动任务请求。如果主进程接收到容器资源的任务正在运行信息,则不向容器资源对应的节点管理器发送新的启动任务请求。
在一个具体实施方式中,容器资源在运行任务过程中,主进程接收来自容器资源不间断发送的周期性的心跳信息,根据心跳信息主进程能够监控每一个容器资源上任务的运行状态。
在一个实施例中,节点管理器上的容器资源接收到待执行任务后,启动代理(Agent)运行任务。一个代理运行一个待执行任务,同一个容器资源在运行下一个待执行任务时会启动新的代理。
在一个实施例中,待执行任务包括映射(map)任务和/或归约(reduce)任务。
在一个实施例中,还包括:
主进程启动远程过程调用服务器(RpcServer),并将远程过程调用服务器的地址写到协调服务节点(zookeeper)上,以使各容器资源通过获取协调服务节点上的远程过程调用服务器的地址与主进程保持通信。
在主进程重新启动的状态下,由于远程过程调用服务器的地址会改变,因此主进程将远程过程调用服务器的新地址写到协调服务节点上,并采用远程过程调用服务器的新地址重新与等待中的容器资源建立通信。等待中的容器资源包括在主进程重新启动前与主进程通信且存在尚未运行完成的任务的容器资源。其中,ZooKeeper是一个分布式的开放源码的分布式应用程序协调服务。
通过主进程与容器资源重新建立通信,可以使得尚未运行完成的任务在容器资源上恢复运行,无需将尚未运行完成的任务清除并重启申请容器资源运行该任务,避免了容器资源的浪费,提高了作业运行效率。
在一个实施例中,主进程重新启动的情况包括硬件故障或是软件运行异常等情况。
在一个实施例中,主进程将远程过程调用服务器的新地址写到协调服务节点上,并重新与等待中容器资源建立通信包括:
主进程新建协调服务节点,并将远程过程调用服务器的新地址写到新建的协调服务节点上。
主进程采用远程过程调用服务器的新地址与等待中的容器资源重新建立通信,以使等待中的容器资源继续运行尚未运行完成的任务。
需要说明的是,为了保证等待中的容器资源能够及时获取到远程过程调用服务器的新地址,主进程新建的协调服务节点可以与原协调服务节点建立在同一个路径上。
在一个实施例中,在主进程重启后且尚未将远程过程调用服务器的新地址写到协调服务节点上时,存在尚未运行完成的任务的容器资源会持续观察协调服务节点,直至容器资源能够从协调服务节点上获取到远程过程调用服务器的新地址。
在一个具体的实施方式中,如图2、图3所示,资源复用方法包括以下步骤:
S10:分布式调度系统(Yarn)为作业启动主进程(ApplicationMaster)。
S20:主进程启动远程过程调用服务器(RpcServer),并将远程过程调用服务器的地址写到协调服务节点上,各容器资源通过获取协调服务节点的临时节点上的远程过程调用服务器的地址与主进程保持通信。
S30:主进程根据作业的任务并发量向资源管理器申请多个容器(Container)资源。
S40:主进程向申请到的容器资源对应的节点管理器(NodeManager)发送启动任务请求(StartContainer)。
S50:容器资源根据接收到待执行任务(task)后,启动代理运行任务。
S60:主进程接收各容器资源持续发送的心跳信息。
S70:主进程根据心跳信息判断是否需要向各容器资源对应的节点管理器发送新的启动任务请求。如果主进程接收到容器资源的任务完成信息,则向容器资源对应的节点管理器发送新的启动任务请求,直至没有需要运行的待执行任务。
S80:如果主进程异常退出重启,主进程启动远程过程调用服务器重新建立协调服务节点,并将远程过程调用服务器的新地址写到重新建立的协调服务节点上,等待中的容器资源从重新建立的协调服务节点上获取到远程过程调用服务器的新地址后,与主进程重新建立通信。协调服务节点可以为协调服务临时节点。
本发明实施例提供了一种资源复用装置,如图4所示,包括:
资源申请模块10,用于根据任务并发量向资源管理器申请多个容器资源,任务并发量包括待执行任务的数量。
请求模块20,用于向申请到的容器资源对应的节点管理器发送启动任务请求。启动任务请求用于触发收到启动任务请求的节点管理器对应的容器资源运行待执行任务。其中,如果接收模块40接收到容器资源的任务完成信息,请求模块20则向容器资源对应的节点管理器发送新的启动任务请求,直至没有需要运行的待执行任务。
在一个实施例中,还包括:
启动模块30,用于启动远程过程调用服务器,并将远程过程调用服务器的地址写到协调服务节点上,以使各容器资源通过获取协调服务节点上的远程过程调用服务器的地址与启动模块保持通信。
在启动模块30重新启动的状态下,启动模块30将远程过程调用服务器的新地址写到协调服务节点上,并采用远程过程调用服务器的新地址重新与等待中的容器资源建立通信。等待中的容器资源包括在启动模块30重新启动前与启动模块30通信且存在尚未运行完成的任务的容器资源。
在一个实施例中,接收模块40,用于接收各容器资源持续发送的心跳信息,并根据接收到的各容器资源的心跳信息,判断是否需要向各容器资源对应的节点管理器发送新的启动任务请求。心跳信息包括任务完成信息或任务正在运行信息。
本发明实施例提供了一种资源复用的终端,如图5所示,包括:
存储器910和处理器920,存储器910内存储有可在处理器920上运行的计算机程序。处理器920执行计算机程序时实现上述实施例中的资源复用的方法。存储器910和处理器920的数量可以为一个或多个。
通信接口930,用于存储器910和处理器920与外部进行通信。
存储器910可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
如果存储器910、处理器920、以及通信接口930独立实现,则存储器910、处理器920以及通信接口930可以通过总线相互连接并完成相互间的通信。总线可以是工业标准体系结构(ISA,Industry Standard Architecture)总线、外部设备互连(PCI,PeripheralComponent)总线或扩展工业标准体系结构(EISA,Extended Industry StandardComponent)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图3中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
可选的,在具体实现上,如果存储器910、处理器920以及通信接口930集成在一块芯片上,则存储器910、处理器920及通信接口930可以通过内部接口完成相互间的通信。
本发明实施例提供了一种计算机可读存储介质,其存储有计算机程序,该程序被处理器执行时实现如实施例一包括的任一所述的资源复用的方法。
本发明实施例通过采用容器资源复用的方式,改善在申请容器资源运行任务时的资源利用率,在分布式计算引擎运行任务的过程中能够节省申请容器资源带来的性能开销,避免容器资源的浪费,降低了对分布式调度系统的访问压力,提升了作业性能,实现了集的高吞吐量和高可用性。本发明实施例通过延迟调度增加任务本地性的方式来减少任务的执行时间。本发明实施例在作业的主进程因为软硬件故障等原因挂掉后重启能够恢复正在运行的任务,无需将在主进程重启前尚未运行完成的任务清除并重新申请资源。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。
在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,“计算机可读介质”可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读存储介质中。所述存储介质可以是只读存储器,磁盘或光盘等。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到其各种变化或替换,这些都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
本文发布于:2023-04-14 22:31:07,感谢您对本站的认可!
本文链接:https://patent.en369.cn/patent/3/86889.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |