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

调度方法、调度器、集群系统和计算机可读存储介质

文献发布时间:2024-04-18 19:59:31


调度方法、调度器、集群系统和计算机可读存储介质

技术领域

本公开涉及计算机应用领域,特别涉及一种调度方法、调度器、集群系统和计算机可读存储介质。

背景技术

Kubernetes(简写为“K8s”)集群系统,是一种基于容器技术的集群管理编排服务系统。

在Kubernetes集群系统中,由调度器决策将工作负载的pod分配到具体的哪个节点上。调度器将某个pod调度到某个接点后,有可能出现调度失败的情况。

在工作负载的例如升级等使用场景中,若在调度后出现调度失败的情况,会影响业务的稳定性。

发明内容

本公开实施例基于预调度,在调度之前提前感知工作负载的部署单元能否调度成功,在确保调度能够成功的情况下,预留资源,并基于预调度结果实际调度工作负载的部署单元,从而在工作负载例如升级、扩容、或者迁移等使用场景中提高业务的稳定性。

本公开一些实施例提出一种调度方法,包括:建立第一工作负载的自定义的第一部署单元;预调度所述第一部署单元,并记录所述第一部署单元的预调度结果,包括所述第一部署单元被分配的第一节点,其中,所述第一节点为所述第一部署单元预留第一资源;获取待调度的第二部署单元;在所述第二部署单元对应的工作负载是所述第一部署单元对应的第一工作负载的情况下,根据所述预调度结果将所述第二部署单元调度到所述第一节点,且所述第一资源供所述第二部署单元使用。

在一些实施例中,所述建立第一工作负载的自定义的第一部署单元包括:通过定制资源定义,建立第一部署单元模板;使用所述第一部署单元模板,建立所述第一部署单元。

在一些实施例中,所述第一部署单元模板包括请求的资源信息、亲和性信息、反亲和性信息中的至少一项。

在一些实施例中,所述记录所述第一部署单元的预调度结果包括:获取定义的数据模型,所述数据模型用来描述部署单元、资源使用者、调度节点之间的关系信息;将所述预调度结果记录到所述数据模型,使得所述数据模型存储部署单元为第一部署单元、资源使用者为第一工作负载、调度节点为第一节点之间的关系信息。

在一些实施例中,所述预调度所述第一部署单元包括:根据所述第一部署单元请求的资源信息、亲和性信息、反亲和性信息、硬件或软件或策略的限制性信息、数据局域性信息、工作负载干扰信息、节点的剩余资源中的至少一项,预调度所述第一部署单元,以便为所述第一部署单元分配调度节点。

在一些实施例中,所述节点的剩余资源通过所述节点的总资源减去非自定义的部署单元在所述节点已使用的资源和为自定义的部署单元在所述节点预留的资源确定。

在一些实施例中,还包括:通过匹配所述第二部署单元的资源使用者标签所指示的工作负载与所述第一部署单元的资源使用者标签所指示的工作负载,确定所述第二部署单元对应的工作负载是否为所述第一部署单元对应的第一工作负载。

在一些实施例中,所述建立第一工作负载的自定义的第一部署单元包括:响应于所述第一工作负载的升级、扩容、或者迁移中的至少一项,建立第一工作负载的自定义的第一部署单元。

在一些实施例中,所述预调度所述第一部署单元包括:预调度所述第一部署单元,在预调度所述第一部署单元成功的情况下,记录所述第一部署单元的预调度结果,在预调度所述第一部署单元失败的情况下,重新执行所述预调度所述第一部署单元的步骤。

在一些实施例中,在Kubernetes集群系统中,所述第一工作负载包括部署、副本集、任务中的至少一个,所述第二部署单元为Pod,所述第一部署单元为自定义Pod。

本公开一些实施例提出一种调度器,包括:存储器;以及耦接至所述存储器的处理器,所述处理器被配置为基于存储在所述存储器中的指令,执行调度方法。

本公开一些实施例提出一种调度器,包括:执行调度方法的模块。

本公开一些实施例提出一种集群系统,包括调度器和多个节点,其中,所述调度器被配置为执行调度方法。

在一些实施例中,所述集群系统为Kubernetes集群系统。

本公开一些实施例提出一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现调度方法的步骤。

附图说明

下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍。根据下面参照附图的详细描述,可以更加清楚地理解本公开。

显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1示出本公开一些实施例的集群系统中的调度方法的流程示意图。

图2示出本公开一些实施例的Kubernetes集群系统中的调度方法的流程示意图。

图3示出本公开一些实施例的集群系统的示意图。

图4示出本公开一些实施例的调度器的示意图。

图5示出本公开一些实施例的调度器的示意图。

具体实施方式

下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述。

除非特别说明,否则,本公开中的“第一”“第二”等描述用来区分不同的对象,并不用来表示大小或时序等含义。

在集群系统中,例如在Kubernetes集群系统中,调度器将某个pod调度到某个接点后,有可能出现调度失败的情况。在工作负载的例如升级等使用场景中,若在调度后出现调度失败的情况,会影响业务的稳定性。

本公开实施例基于预调度,在调度之前提前感知工作负载的部署单元能否调度成功,在确保调度能够成功的情况下,预留资源,并基于预调度结果实际调度工作负载的部署单元,从而在工作负载例如升级、扩容、或者迁移等使用场景中提高业务的稳定性。

图1示出本公开一些实施例的集群系统中的调度方法的流程示意图。

如图1所示,该实施例的调度方法包括以下步骤,其中步骤110-120为预调度过程,步骤130-140为实际调度过程。该调度方法例如可以由集群系统中的调度器执行。

在步骤110,建立第一工作负载的自定义的第一部署单元。

在一些实施例中,建立第一工作负载的自定义的第一部署单元包括:通过定制资源定义,建立第一部署单元模板,所述第一部署单元模板例如包括但不限于请求的资源信息、亲和性信息、反亲和性信息中的至少一项;使用所述第一部署单元模板,建立所述第一部署单元。

其中,资源(Resource)是集群系统API(Application Programming Interface,应用程序编程接口)中的一个端点,其中存储的是某个类别的API对象的一个集合。定制资源(Custom Resource)是对集群系统API的扩展,定制资源所代表的是对特定功能安装的一种定制。定制资源定义(Custom Resource Definition,CRD)是集群系统对外开放的定义定制资源的范式,用户定义的定制资源可以被集群系统接受并处理。通过定制资源定义,自定义第一部署单元模板,以建立第一部署单元模板,完成定制资源的定义。

其中,第一部署单元模板中的请求的资源信息例如包括请求的资源规格或其他资源需求的描述信息。亲和性(affinity)是指:如果应用A与应用B两个应用需要频繁交互,有必要利用亲和性让两个应用的尽可能的靠近,甚至在一个节点(node)上,以减少因网络通信而带来的性能损耗。反亲和性(anti-affinity)是指:当应用采用多副本部署时,有必要采用反亲和性让各个应用实例打散分布在各个节点上,以实现高可用性。除了上述列举的信息之外,第一部署单元模板还可以包括域名、域名空间、标签等信息。

其中,第一部署单元模板是包含在工作负载对象中的规范,用来运行应用时指定的负载资源的目标状态的一部分,用来创建第一部署单元。使用第一部署单元模板,例如通过复制第一部署单元模板的方式,来建立第一部署单元。

在一些实施例中,响应于第一工作负载的升级、扩容、或者迁移中的至少一项业务,建立第一工作负载的自定义的第一部署单元,并继续执行后续的步骤120-140,从而在工作负载例如升级、扩容、或者迁移等使用场景中提高业务的稳定性。

在步骤120,预调度所述第一部署单元,并记录所述第一部署单元的预调度结果,包括所述第一部署单元被分配的第一节点,其中,所述第一节点为所述第一部署单元预留第一资源,预留的第一资源不会被其他工作负载抢占。

节点是集群系统中最小的计算硬件单元,它通常是集群中单个机器的表示。在大多数生产集群系统中,节点很可能是数据中心中的物理机器,或者是托管在云平台上的虚拟机。

预调度所述第一部署单元,在预调度所述第一部署单元成功的情况下,记录所述第一部署单元的预调度结果,在预调度所述第一部署单元失败的情况下,等待一定时间,待节点有空闲资源时,重新执行所述预调度所述第一部署单元的步骤。从而提高预调度成功的概率。

所谓预调度,也即为自定义部署单元预先分配调度节点的过程。预调度所述第一部署单元包括:根据所述第一部署单元请求的资源信息、亲和性信息、反亲和性信息、硬件或软件或策略的限制性信息、数据局域性信息、工作负载干扰信息、节点的剩余资源中的至少一项,预调度所述第一部署单元,以便为所述第一部署单元分配调度节点。从而,为第一部署单元调度能够满足第一部署单元的例如资源请求、亲和性/反亲和性需求、硬件/软件/策略的限制性要求、数据局域性要求、工作负载间免干扰需求等的节点。其中,如果第一部署单元有资源要求,则被选中的节点的剩余资源应该满足第一部署单元的资源要求。其中,节点的剩余资源通过所述节点的总资源减去非自定义的部署单元在所述节点已使用的资源和为自定义的部署单元在所述节点预留的资源确定。

记录所述第一部署单元的预调度结果包括:获取定义的数据模型,所述数据模型用来描述部署单元、资源使用者、调度节点之间的关系信息;将所述预调度结果记录到所述数据模型,使得所述数据模型存储部署单元为第一部署单元、资源使用者为第一工作负载、调度节点为第一节点之间的关系信息。从而记录第一工作负载、第一部署单元、第一节点之间的关系信息。

在步骤130,获取待调度的第二部署单元。

在步骤140,在所述第二部署单元对应的工作负载是所述第一部署单元对应的第一工作负载的情况下,根据所述预调度结果将所述第二部署单元调度到所述第一节点,且所述第一资源供所述第二部署单元使用。

通过匹配所述第二部署单元的资源使用者标签所指示的工作负载与所述第一部署单元的资源使用者标签所指示的工作负载,确定所述第二部署单元对应的工作负载是否为所述第一部署单元对应的第一工作负载。

上述实施例,在集群系统中,基于预调度,在调度之前提前感知工作负载的部署单元能否调度成功,在确保调度能够成功的情况下,预留资源,并基于预调度结果实际调度工作负载的部署单元,从而在工作负载例如升级、扩容、或者迁移等使用场景中提高业务的稳定性。

上述实施例的调度方法可以应用于各种集群系统中,下面以Kubernetes集群系统为例,来描述该调度方法。在Kubernetes集群系统中,第一工作负载例如包括但不限于部署(Deployment)、副本集(ReplicaSet)、任务(Job)等,第一部署单元为自定义Pod,第二部署单元为Pod。

图2示出本公开一些实施例的Kubernetes集群系统中的调度方法的流程示意图。

如图2所示,该实施例的调度方法包括以下步骤,其中步骤210-230为预调度过程,步骤240-250为实际调度过程。

在步骤210,第一工作负载,如Deployment、ReplicaSet、Job等,计划升级、扩容、或者迁移。

在步骤220,响应于第一工作负载的升级、扩容、或者迁移的需求,建立第一工作负载的自定义pod,设为PrePod。

在一些实施例中,建立第一工作负载的自定义pod(PrePod)包括:通过定制资源定义CRD,建立PrePod模板,所述PrePod模板例如包括但不限于请求的资源信息、亲和性信息、反亲和性信息等;使用PrePod模板,例如通过复制PrePod模板,建立PrePod。

在步骤230,调度器预调度PrePod。从而扩展Kubernetes调度器的功能,使得Kubernetes调度器支持对自定义Pod进行调度,Kubernetes调度器可复用调度器的筛选策略、优选策略等调度策略。

调度器根据PrePod请求的资源信息、亲和性信息、反亲和性信息、硬件或软件或策略的限制性信息、数据局域性信息、工作负载干扰信息、节点的剩余资源中的至少一项,预调度PrePod,以便为PrePod分配调度节点。从而,为PrePod调度能够满足PrePod的例如资源请求、亲和性/反亲和性需求、硬件/软件/策略的限制性要求、数据局域性要求、工作负载间免干扰需求等的节点。

其中,如果PrePod有资源要求,则被选中的节点的剩余资源应该满足PrePod的资源要求。其中,节点的剩余资源通过所述节点的总资源减去各Pod在所述节点已使用的资源和为各PrePod在所述节点预留的资源确定。公式表示为:节点的剩余资源=节点总资源-各Pod在该节点已使用资源之和-各PrePod在该节点预留的资源之和。

在步骤230a,在预调度PrePod失败的情况下,记录PrePod预调度失败信息,等待一定时间,待节点有空闲资源时,重新执行所述预调度PrePod的步骤230,从而提高预调度成功的概率。

在步骤230b,在预调度PrePod成功的情况下,记录PrePod的预调度结果(即PrePod被分配的第一节点),从而记录第一工作负载、PrePod、第一节点之间的关系信息,并且第一节点为PrePod预留第一资源,预留的第一资源不会被其他工作负载抢占。完成预调度过程。

在步骤240,获取某工作负载的新Pod。

Pod是Kubernetes中的最小调度单元,一个Pod封装一个或多个容器,Pod里的容器共享存储、网络等。关于网络:每一个Pod都会被指派一个唯一的IP地址,在Pod中的每一个容器共享网络命名空间,包括IP地址和网络端口。在同一个Pod中的容器可以互相通信。当Pod中的容器需要与Pod外的实体进行通信时,则需要通过端口等共享的网络资源进行通信。关于存储:在Pod中所有的容器能够访问共享存储卷,允许这些容器共享数据。

在步骤250,针对该新Pod,是否检测到可用的PrePod。

如果新Pod对应的工作负载与PrePod对应的工作负载一致,则认为检测到可用的PrePod。其中,通过匹配新Pod的资源使用者标签所指示的工作负载与PrePod的资源使用者标签所指示的工作负载,来判断新Pod对应的工作负载与PrePod对应的工作负载是否一致。此外,如果有多个可用的PrePod,可以按照预设的选择策略选择一个最优的PrePod。

在步骤250a,如果检测到可用的PrePod,则将新Pod调度到该可用的PrePod对应的节点,该可用的PrePod对应的节点为该可用的PrePod预留的资源可以供该新Pod使用。然后可以删除PrePod。从而,扩展pod对预调度数据感知能力,pod优选被调度到与之匹配的预调度成功的节点上。

这里假设新Pod对应的工作负载是PrePod对应的第一工作负载,则将新Pod调度到第一工作负载的PrePod对应的第一节点,第一节点为PrePod预留的第一资源可以供该新Pod使用。

在步骤250b,如果未检测到可用的PrePod,则可以执行传统的Pod调度流程,将新Pod调度到某个节点。其中,传统的Pod调度流程是指:没有预调度结果可以参考,而是直接按照一定的调度策略将Pod调度到某个节点。

上述实施例,在Kubernetes集群系统中,基于预调度,在调度之前提前感知工作负载的PrePod能否调度成功,在确保调度能够成功的情况下,预留资源,并基于预调度结果实际调度工作负载的Pod,从而在工作负载例如升级、扩容、或者迁移等使用场景中提高业务的稳定性。

图3示出本公开一些实施例的集群系统的示意图。

如图3所示,该实施例的集群系统300包括:调度器310和多个节点320。其中,调度器310被配置为执行各实施例中的调度方法。节点320是集群系统中最小的计算硬件单元,它通常是集群中单个机器的表示。在大多数生产集群系统中,节点320很可能是数据中心中的物理机器,或者是托管在云平台上的虚拟机。

集群系统300例如为Kubernetes集群系统,但不限于此。在Kubernetes集群系统中,所述第一工作负载包括部署、副本集、任务中的至少一个,所述第二部署单元为Pod,所述第一部署单元为自定义Pod。

图4示出本公开一些实施例的调度器的示意图。

如图4所示,该实施例的调度器310包括:执行各实施例中的调度方法的各模块。

预调度模块410,被配置为建立第一工作负载的自定义的第一部署单元;预调度所述第一部署单元,并记录所述第一部署单元的预调度结果,包括所述第一部署单元被分配的第一节点,其中,所述第一节点为所述第一部署单元预留第一资源。

调度模块420,被配置为获取待调度的第二部署单元;在所述第二部署单元对应的工作负载是所述第一部署单元对应的第一工作负载的情况下,根据所述预调度结果将所述第二部署单元调度到所述第一节点,且所述第一资源供所述第二部署单元使用。

在一些实施例中,预调度模块410,被配置为通过定制资源定义,建立第一部署单元模板;使用所述第一部署单元模板,建立所述第一部署单元。所述第一部署单元模板包括请求的资源信息、亲和性信息、反亲和性信息中的至少一项。

在一些实施例中,预调度模块410,被配置为获取定义的数据模型,所述数据模型用来描述部署单元、资源使用者、调度节点之间的关系信息;将所述预调度结果记录到所述数据模型,使得所述数据模型存储部署单元为第一部署单元、资源使用者为第一工作负载、调度节点为第一节点之间的关系信息。

在一些实施例中,预调度模块410,被配置为根据所述第一部署单元请求的资源信息、亲和性信息、反亲和性信息、硬件或软件或策略的限制性信息、数据局域性信息、工作负载干扰信息、节点的剩余资源中的至少一项,预调度所述第一部署单元,以便为所述第一部署单元分配调度节点。所述节点的剩余资源通过所述节点的总资源减去非自定义的部署单元在所述节点已使用的资源和为自定义的部署单元在所述节点预留的资源确定。

在一些实施例中,预调度模块410,被配置为响应于所述第一工作负载的升级、扩容、或者迁移中的至少一项,建立第一工作负载的自定义的第一部署单元。

在一些实施例中,预调度模块410,被配置为预调度所述第一部署单元,在预调度所述第一部署单元成功的情况下,记录所述第一部署单元的预调度结果,在预调度所述第一部署单元失败的情况下,重新执行所述预调度所述第一部署单元的步骤。

在一些实施例中,调度模块420,被配置为通过匹配所述第二部署单元的资源使用者标签所指示的工作负载与所述第一部署单元的资源使用者标签所指示的工作负载,确定所述第二部署单元对应的工作负载是否为所述第一部署单元对应的第一工作负载。

图5示出本公开一些实施例的调度器的示意图。

如图5所示,该实施例的调度器310包括:存储器510以及耦接至该存储器510的处理器520,处理器520被配置为基于存储在存储器510中的指令,执行各实施例中的调度方法。

其中,存储器510例如可以包括系统存储器、固定非易失性存储介质等。系统存储器例如存储有操作系统、应用程序、引导装载程序(Boot Loader)以及其他程序等。

其中,处理器520可以用通用处理器、数字信号处理器(Digital SignalProcessor,DSP)、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field Programmable Gate Array,FPGA)或其它可编程逻辑设备、分立门或晶体管等分立硬件组件方式来实现。

调度器310还可以包括输入输出接口530、网络接口540、存储接口550等。这些接口530,540,550以及存储器510和处理器520之间例如可以通过总线560连接。其中,输入输出接口530为显示器、鼠标、键盘、触摸屏等输入输出设备提供连接接口。网络接口540为各种联网设备提供连接接口。存储接口550为SD卡、U盘等外置存储设备提供连接接口。总线560可以使用多种总线结构中的任意总线结构。例如,总线结构包括但不限于工业标准体系结构(Industry Standard Architecture,ISA)总线、微通道体系结构(Micro ChannelArchitecture,MCA)总线、外围组件互连(Peripheral Component Interconnect,PCI)总线。

本公开实施例中的一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现调度方法的步骤。该存储介质例如是非瞬时性计算机可读存储介质。

在一些实施例(1)中,一种调度方法,包括:建立第一工作负载的自定义的第一部署单元;预调度所述第一部署单元,并记录所述第一部署单元的预调度结果,包括所述第一部署单元被分配的第一节点,其中,所述第一节点为所述第一部署单元预留第一资源;获取待调度的第二部署单元;在所述第二部署单元对应的工作负载是所述第一部署单元对应的第一工作负载的情况下,根据所述预调度结果将所述第二部署单元调度到所述第一节点,且所述第一资源供所述第二部署单元使用。

在一些实施例(2)中,根据(1),所述建立第一工作负载的自定义的第一部署单元包括:通过定制资源定义,建立第一部署单元模板;使用所述第一部署单元模板,建立所述第一部署单元。

在一些实施例(3)中,根据(2),所述第一部署单元模板包括请求的资源信息、亲和性信息、反亲和性信息中的至少一项。

在一些实施例(4)中,根据(1-3),所述记录所述第一部署单元的预调度结果包括:获取定义的数据模型,所述数据模型用来描述部署单元、资源使用者、调度节点之间的关系信息;将所述预调度结果记录到所述数据模型,使得所述数据模型存储部署单元为第一部署单元、资源使用者为第一工作负载、调度节点为第一节点之间的关系信息。

在一些实施例(5)中,根据(1-4),所述预调度所述第一部署单元包括:根据所述第一部署单元请求的资源信息、亲和性信息、反亲和性信息、硬件或软件或策略的限制性信息、数据局域性信息、工作负载干扰信息、节点的剩余资源中的至少一项,预调度所述第一部署单元,以便为所述第一部署单元分配调度节点。

在一些实施例(6)中,根据(5),所述节点的剩余资源通过所述节点的总资源减去非自定义的部署单元在所述节点已使用的资源和为自定义的部署单元在所述节点预留的资源确定。

在一些实施例(7)中,根据(1-6),还包括:通过匹配所述第二部署单元的资源使用者标签所指示的工作负载与所述第一部署单元的资源使用者标签所指示的工作负载,确定所述第二部署单元对应的工作负载是否为所述第一部署单元对应的第一工作负载。

在一些实施例(8)中,根据(1-7),所述建立第一工作负载的自定义的第一部署单元包括:响应于所述第一工作负载的升级、扩容、或者迁移中的至少一项,建立第一工作负载的自定义的第一部署单元。

在一些实施例(9)中,根据(1-8),所述预调度所述第一部署单元包括:预调度所述第一部署单元,在预调度所述第一部署单元成功的情况下,记录所述第一部署单元的预调度结果,在预调度所述第一部署单元失败的情况下,重新执行所述预调度所述第一部署单元的步骤。

在一些实施例(10)中,根据(1-9),在Kubernetes集群系统中,所述第一工作负载包括部署、副本集、任务中的至少一个,所述第二部署单元为Pod,所述第一部署单元为自定义Pod。

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

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

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

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

以上所述仅为本公开的较佳实施例,并不用以限制本公开,凡在本公开的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。

相关技术
  • 一种检测双酚A的光电化学适配体传感器的制备方法和用途
  • 一种基于双光电编码器检测外力的方法
  • 一种基于光电化学和双链特异性核酸酶的体外piRNA检测方法
  • 基于光电化学和双链特异性核酸酶的体外piRNA检测方法
技术分类

06120116521461