一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种轻量级分布式资源管理与任务调度器及方法与流程

2021-10-19 23:46:00 来源:中国专利 TAG: 分布式 调度 资源管理 器及 计算


1.本发明属于分布式计算技术领域,特别是一种轻量级分布式资源管理与任务调度器及方法。


背景技术:

2.另一种资源协调者(yet another resource negotiator,yarn)是一种新的hadoop资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度。yarn的主要思想是将jobtracker的两个主要功能资源管理和作业调度/监控分离,创建一个全局的rm(resourcemanager)和若干个针对应用程序的am(applicationmaster)。yarn分层结构的本质是resourcemanager,这个实体控制整个集群并管理应用程序向基础计算资源的分配。resourcemanager将各个资源部分(计算、内存、带宽等)安排给yarn的每节点代理,resourcemanager还与applicationmaster一起分配资源,与nodemanager一起启动和监视他们的基础应用程序。然而,yarn主要应用在大型计算集群场景中,且需部署在linux操作系统中。
3.其他较类似功能的任务调度器,国内具有几款优秀和极具潜力的国产开源分布式任务调度系统,比如:1、opencron:opencron是一个功能完善且通用的开源定时任务调度系统,拥有先进可靠的自动化任务管理调度功能,提供可操作的web图形化管理满足多种场景下各种复杂的定时任务调度,同时集成了linux实时监控、webssh等功能特性。对于opencron的部署,从架构上讲,是采用的c/s的架构,需要有server和agent端,整体开发是用java语言,需要jdk1.7以上版本;server端的web是用tomcat进行支持,需要tomcat server1.8以上的版本支持。2、lts:lts(light

task

scheduler)是一款分布式任务调度框架,支持实时任务、定时任务和cron任务,有较好的伸缩性和扩展性,提供对spring的支持(包括xml和注解),提供业务日志记录器。支持节点监控、任务执行监控、jvm监控,支持动态提交、更改、停止任务,依赖注册中心(如zookeeper、redis等)进行节点信息暴露,master选举;依赖mongo或mysql存储任务队列和任务执行日志,netty做底层通信,外部依赖内容较多。3、elastic

job:elastic

job是当当网开发的一个分布式调度解决方案,由两个相互独立的子项目elastic

job

lite和elastic

job

cloud组成,定位为轻量级无中心化解决方案,使用jar包的形式提供分布式任务的协调服务,支持分布式调度协调、弹性扩容缩容、失效转移、错过执行作业重触发、并行调度、自诊断和修复等功能特性,基于qutarz和zookeeper进行封装,依赖开源组件,在部署时,需要安装jdk开发环境、zookeeper以及maven。
4.综上可知,现有方法存在依赖开源组件、效率低、执行速度慢等问题,不适用于轻量级的分布式计算集群。


技术实现要素:

5.本发明的目的在于提供一种轻量级分布式资源管理与任务调度器及方法,可运行
在windows操作系统,适用于轻量级的分布式计算集群,效率高、执行速度快。
6.实现本发明目的的技术解决方案为:一种轻量级分布式资源管理与任务调度器,包括资源管理模块和任务调度模块,所述资源管理模块包括资源监控子模块、资源检测与分配子模块,所述任务调度模块包括任务控制子模块、任务进程状态监控子模块以及远程控制信息转发子模块;
7.每一次计算处理,认为是一个任务;所述资源监控子模块更新各常规计算节点和各高级计算节点的资源信息;当有任务请求时,任务控制子模块向资源管理模块申请任务所需资源,资源检测与分配子模块进行任务所需资源的检测与分配,确定各常规计算节点和各高级计算节点的计算进程;当资源检测及分配成功后,任务控制子模块调用远程控制消息转发子模块生成远程控制报文,并发送至预计运行该任务相关进程的常规计算节点和高级计算节点的节点管理模块,启动该任务的相关计算进程;任务进程状态监控子模块实时监控各任务的软件进程运行状态,当出现异常时,进行相关信息提示和记录;当该任务结束时,任务控制子模块调用远程控制消息转发子模块生成远程控制报文,并发送至相应常规计算节点和高级计算节点的节点管理模块,关闭该任务的相关进程。
8.进一步地,该资源管理与任务调度器基于分布式计算软件框架结构,该软件框架包含一个nginx前端模块、一个调度服务软件模块、一个代理助理软件模块、一个数据管理模块、若干个数据接入模块、若干个常规计算软件模块、若干个高级计算软件模块;
9.所述资源管理与任务调度器运行在调度服务软件模块,通过相关逻辑调度框架中的数据接入模块、常规计算软件模块和高级计算软件模块。
10.进一步地,所述资源管理模块中的资源监控子模块,具有以下功能:对各个常规计算节点、高级计算节点的硬件状态信息进行监控,所述硬件状态信息包括cpu、内存、硬盘以及gpu信息;与各常规计算节点和高级计算节点的节点管理软件模块建立连接,接收各计算节点定时周期发送的硬件状态信息;同时,将该硬件状态信息写入数据库中的系统硬件资源表,并更新资源管理模块的全局资源链表。
11.一种轻量级分布式资源管理与任务调度方法,包括以下步骤:
12.步骤1:定时资源监控:资源监控子模块监控所在分布式计算系统的各个硬件节点的硬件状态,更新各常规计算节点、高级计算节点的资源信息,若有任务创建请求则进入下一步;
13.步骤2:资源检测与分配:当有任务请求时,任务控制子模块向资源管理模块申请任务所需资源,资源检测与分配子模块进行任务所需资源的检测与分配,确定各个高级计算节点和各个常规计算节点的计算进程;当资源检测及分配成功后,进入下一步;
14.步骤3:启动任务:任务控制子模块调用远程控制消息转发子模块生成远程控制报文,并发送至相应常规计算节点和高级计算节点的节点管理模块,启动所请求任务的常规计算进程和高级计算进程;
15.步骤4:任务进程状态监控:任务进程状态监控子模块实时监控各任务的软件进程运行状态,当出现异常时,进行信息提示和记录;
16.步骤5:关闭任务:当任务结束时,任务控制子模块调用远程控制消息转发子模块生成远程控制报文,并发送至相应常规计算节点和高级计算节点的节点管理模块,关闭该任务的相关进程。
17.进一步地,步骤1所述定时资源监控,具体如下:
18.资源管理模块中的资源监控子模块,对各个常规计算节点、高级计算节点的硬件状态信息进行监控,硬件状态信息包括cpu、内存、硬盘以及gpu信息;资源监控子模块与各常规计算节点和各高级计算节点的节点管理软件模块建立连接,接收各计算节点定时周期发送的硬件状态信息;同时,将该硬件状态信息写入数据库中的系统硬件资源表,并更新资源管理模块的全局资源链表。
19.进一步地,步骤4所述任务进程状态监控,共有10个状态,各个状态的值为:
20.0wait:启动时间未到;1ready:启动时间已到;2block:资源检测成功,未运行;3start:启动运行;4pause:任务暂停;5goon:任务继续;6manualstop:点击停止按钮结束;7normalstop:自动结束;8oodcrash:内存溢出崩溃;9comcrash:心跳丢失崩溃。
21.进一步地,步骤2所述资源检测与分配,具体如下:
22.(1.1)获取部署轻量级分布式资源管理与任务调度的计算处理系统的常规计算节点、高级计算节点以及采集服务器节点的静态信息;
23.(1.2)定时获取部署轻量级分布式资源管理与任务调度的计算处理系统的常规计算节点、高级计算节点以及采集服务器节点的硬件状态信息;
24.(1.3)定时检查启动时间已到的队列,并对队列的任务进行资源检测;
25.(1.4)根据任务类型,计算任务所需各类软件进程和数量;
26.(1.5)根据部署轻量级分布式资源管理与任务调度的计算处理系统的各常规计算节点、高级计算节点以及采集服务器节点的状态,按照设定的逻辑计算能运行的软件进程数量;
27.(1.6)根据请求的任务实际所需的软件进程数量,按照设定的逻辑进行分配。
28.进一步地,步骤3所述启动任务,具体如下:
29.(2.1)针对每个任务,逐节点地遍历分配的软件进程队列,所述轻量级分布式资员管理与多任务调度器向对应节点的节点管理模块发送进程启动指令;
30.(2.2)若一个任务中一类进程实际启动成功的数量小于设定的阈值,则任务启动失败;所述轻量级分布式资员管理与多任务调度器向对应节点的节点管理模块发送进程结束指令,将该任务已经启动的软件进程进行关闭;
31.(2.3)若认定任务启动成功,则将对应block队列中的任务信息移动至已运行队列中;否则,在对应block队列中删除该任务,并前端报警。
32.进一步地,步骤4所述任务进程状态监控,具体如下:
33.(3.1)定时检测各任务的软件进程运行情况;
34.(3.2)若存在软件进程运行异常情况,则定位到具体任务并按照心跳丢失、内存使用超限、运行异常优先级,逐个判断;
35.(3.3)根据软件进程的运行状态,更新在本轻量级分布式资源管理与多任务调度器部署的系统中记录的各任务运行状态信息。
36.进一步地,步骤5所述关闭任务,具体如下:
37.(4.1)收到任务结束指令时,查询本轻量级分布式资源管理与多任务调度器部署的系统中该任务的具体软件运行进程;
38.(4.2)所述轻量级分布式资员管理与多任务调度器向对应节点的节点管理模块发
送进程结束指令,将该任务已经启动的软件进程进行关闭;
39.(4.3)根据释放的软件进程,更新全局资源信息;
40.(4.4)根据结束的情况,更新在本轻量级分布式资源管理与多任务调度器部署的系统中记录的任务结束状态。
41.本发明与现有技术相比,其显著优点为:(1)采用c 开发,不依赖任何开源组件,自主可控、通用性强;(2)可直接运行在windows操作系统,能够满足多用户多任务并发执行的功能需求,并适用于轻量级的分布式计算集群,效率高,执行速度快;(3)具有轻量化、免配置的特点,使用方便,满足小型分布式计算集群使用场景,在使用时直接调用api即可。
附图说明
42.图1是依赖的分布式计算软件框架结构图。
43.图2是轻量级分布式资源管理与任务调度器的模块组成图。
44.图3是任务状态切换图。
45.图4是资源检测与分配功能处理流程图。
46.图5是启动任务功能处理流程图。
47.图6是任务进程状态监控功能处理流程图。
48.图7是关闭任务功能处理流程图。
49.图8是轻量级分布式资源管理与任务调度方法的流程图。
具体实施方式
50.本发明一种轻量级分布式资源管理与任务调度器,包括资源管理模块和任务调度模块,所述资源管理模块包括资源监控子模块、资源检测与分配子模块,所述任务调度模块包括任务控制子模块、任务进程状态监控子模块以及远程控制信息转发子模块;
51.每一次计算处理,认为是一个任务;所述资源监控子模块更新各常规计算节点和各高级计算节点的资源信息;当有任务请求时,任务控制子模块向资源管理模块申请任务所需资源,资源检测与分配子模块进行任务所需资源的检测与分配,确定各常规计算节点和各高级计算节点的计算进程;当资源检测及分配成功后,任务控制子模块调用远程控制消息转发子模块生成远程控制报文,并发送至预计运行该任务相关进程的常规计算节点和高级计算节点的节点管理模块,启动该任务的相关计算进程;任务进程状态监控子模块实时监控各任务的软件进程运行状态,当出现异常时,进行相关信息提示和记录;当该任务结束时,任务控制子模块调用远程控制消息转发子模块生成远程控制报文,并发送至相应常规计算节点和高级计算节点的节点管理模块,关闭该任务的相关进程。
52.作为一种具体实施例,该资源管理与任务调度器基于分布式计算软件框架结构,该软件框架包含一个nginx前端模块、一个调度服务软件模块、一个代理助理软件模块、一个数据管理模块、若干个数据接入模块、若干个常规计算软件模块、若干个高级计算软件模块;
53.所述资源管理与任务调度器运行在调度服务软件模块,通过相关逻辑调度框架中的数据接入模块、常规计算软件模块和高级计算软件模块。
54.作为一种具体实施例,所述资源管理模块中的资源监控子模块,具有以下功能:对
各个常规计算节点、高级计算节点的硬件状态信息进行监控,所述硬件状态信息包括cpu、内存、硬盘以及gpu信息;与各常规计算节点和高级计算节点的节点管理软件模块建立连接,接收各计算节点定时周期发送的硬件状态信息;同时,将该硬件状态信息写入数据库中的系统硬件资源表,并更新资源管理模块的全局资源链表。
55.一种轻量级分布式资源管理与任务调度方法,包括以下步骤:
56.步骤1:定时资源监控:资源监控子模块监控所在分布式计算系统的各个硬件节点的硬件状态,更新各常规计算节点、高级计算节点的资源信息,若有任务创建请求则进入下一步;
57.步骤2:资源检测与分配:当有任务请求时,任务控制子模块向资源管理模块申请任务所需资源,资源检测与分配子模块进行任务所需资源的检测与分配,确定各个高级计算节点和各个常规计算节点的计算进程;当资源检测及分配成功后,进入下一步;
58.步骤3:启动任务:任务控制子模块调用远程控制消息转发子模块生成远程控制报文,并发送至相应常规计算节点和高级计算节点的节点管理模块,启动所请求任务的常规计算进程和高级计算进程;
59.步骤4:任务进程状态监控:任务进程状态监控子模块实时监控各任务的软件进程运行状态,当出现异常时,进行信息提示和记录;
60.步骤5:关闭任务:当任务结束时,任务控制子模块调用远程控制消息转发子模块生成远程控制报文,并发送至相应常规计算节点和高级计算节点的节点管理模块,关闭该任务的相关进程。
61.作为一种具体实施例,步骤1所述定时资源监控,具体如下:
62.资源管理模块中的资源监控子模块,对各个常规计算节点、高级计算节点的硬件状态信息进行监控,硬件状态信息包括cpu、内存、硬盘以及gpu信息;资源监控子模块与各常规计算节点和各高级计算节点的节点管理软件模块建立连接,接收各计算节点定时周期发送的硬件状态信息;同时,将该硬件状态信息写入数据库中的系统硬件资源表,并更新资源管理模块的全局资源链表。
63.作为一种具体实施例,步骤4所述任务进程状态监控,共有10个状态,各个状态的值为:
64.0wait:启动时间未到;1ready:启动时间已到;2block:资源检测成功,未运行;3start:启动运行;4pause:任务暂停;5goon:任务继续;6manualstop:点击停止按钮结束;7normalstop:自动结束;8oodcrash:内存溢出崩溃;9comcrash:心跳丢失崩溃。
65.作为一种具体实施例,步骤2所述资源检测与分配,具体如下:
66.(1.1)获取部署轻量级分布式资源管理与任务调度的计算处理系统的常规计算节点、高级计算节点以及采集服务器节点的静态信息;
67.(1.2)定时获取部署轻量级分布式资源管理与任务调度的计算处理系统的常规计算节点、高级计算节点以及采集服务器节点的硬件状态信息;
68.(1.3)定时检查启动时间已到的队列,并对队列的任务进行资源检测;
69.(1.4)根据任务类型,计算任务所需各类软件进程和数量;
70.(1.5)根据部署轻量级分布式资源管理与任务调度的计算处理系统的各常规计算节点、高级计算节点以及采集服务器节点的状态,按照设定的逻辑计算能运行的软件进程
数量;
71.(1.6)根据请求的任务实际所需的软件进程数量,按照设定的逻辑进行分配。
72.作为一种具体实施例,步骤3所述启动任务,具体如下:
73.(2.1)针对每个任务,逐节点地遍历分配的软件进程队列,所述轻量级分布式资员管理与多任务调度器向对应节点的节点管理模块发送进程启动指令;
74.(2.2)若一个任务中一类进程实际启动成功的数量小于设定的阈值,则任务启动失败;所述轻量级分布式资员管理与多任务调度器向对应节点的节点管理模块发送进程结束指令,将该任务已经启动的软件进程进行关闭;
75.(2.3)若认定任务启动成功,则将对应block队列中的任务信息移动至已运行队列中;否则,在对应block队列中删除该任务,并前端报警。
76.作为一种具体实施例,步骤4所述任务进程状态监控,具体如下:
77.(3.1)定时检测各任务的软件进程运行情况;
78.(3.2)若存在软件进程运行异常情况,则定位到具体任务并按照心跳丢失、内存使用超限、运行异常优先级,逐个判断;
79.(3.3)根据软件进程的运行状态,更新在本轻量级分布式资源管理与多任务调度器部署的系统中记录的各任务运行状态信息。
80.作为一种具体实施例,步骤5所述关闭任务,具体如下:
81.(4.1)收到任务结束指令时,查询本轻量级分布式资源管理与多任务调度器部署的系统中该任务的具体软件运行进程;
82.(4.2)所述轻量级分布式资员管理与多任务调度器向对应节点的节点管理模块发送进程结束指令,将该任务已经启动的软件进程进行关闭;
83.(4.3)根据释放的软件进程,更新全局资源信息;
84.(4.4)根据结束的情况,更新在本轻量级分布式资源管理与多任务调度器部署的系统中记录的任务结束状态。
85.下面结合附图及具体实施例对本发明做进一步详细说明。
86.实施例
87.本发明所述的一种轻量级分布式多任务资源管理与任务调度器所依赖分布式计算软件框架结构如图1所示:
88.该软件框架中包含一个nginx前端模块、一个调度服务软件模块、一个代理助理软件模块、一个数据管理模块、若干个数据接入模块、若干个常规计算软件模块、若干个高级计算软件模块;可运行在一台计算机上,也可按角色分别运行在多台计算机上,如:数据接入软件模块运行在采集服务器上,计算节点有两类,常规计算软件模块运行在常规计算节点,高级计算软件模块运行在高级计算节点。
89.在分布式计算、多任务并发场景下,将有多个客户端“同时”向调度软件发送任务申请,而且每个用户都可能申请多个任务;同时,每个任务会存在并行计算进程,甚至分布在不同计算节点上。这个问题的本质是调度服务软件模块要能够接多个任务申请,并能够根据当前计算资源状态(包括常规计算软件模块和高级计算软件模块),将任务合理的分配到相应的计算资源,同时对资源运行情况进行监控和管理。
90.本发明所述一种轻量级分布式多任务资源管理与任务调度器运行在调度服务软
件模块,通过相关逻辑去调度框架中的数据接入模块、常规计算软件模块和高级计算软件模块。
91.资源管理与任务调度器组成如图2所示:
92.分为资源管理模块和任务调度模块,资源管理模块包含:资源监控子模块、资源检测与分配子模块;任务调度模块分为任务控制子模块、任务进程状态监控子模块以及远程控制信息转发子模块。
93.资源监控子模块更新节点资源信息,任务控制子模块向资源管理模块申请任务所需资源,资源检测与分配子模块进行任务所需资源的检测与分配,确定各个计算节点的计算进程;当资源检测及分配成功后,任务控制子模块调用远程控制消息转发子模块生成远程控制报文,并发送至与相应计算节点的交互模块,启动该任务的相关进程。任务状态监控子模块实时监控各任务的软件进程运行状态,当出现异常时,进行相关信息提示和记录。当该任务结束时,任务控制子模块调用远程控制消息转发子模块生成远程控制报文,并发送至与相应计算节点的交互模块,关闭该任务的相关进程。
94.按功能划分,可分为六大功能:
95.1、资源监控
96.资源监控子模块,对系统中各个硬件节点的cpu、内存、硬盘以及gpu相关信息进行监控。与各计算节点的节点管理软件模块建立连接,接收各计算节点定时周期发送的硬件状态信息;同时,将该信息写入数据库中的系统硬件资源表,并更新信息至资源管理模块的全局资源链表,如实时可用内存、gpu使用率等。
97.2、任务状态切换
98.任务状态共有10个状态,状态切换如下图3所示:
99.其中,各个状态的值为:
[0100][0101]
调度服务软件模块在启动时,首先在数据库中的任务基本信息表中查询状态为0和1的任务,分别加载到内存中的waittasklist和readytasklist中,然后响应用户在浏览器提交的任务。当用户创建一个任务后,调动服务软件根据任务的启动时间判断将任务存入waittasklist或readytasklist中。系统定时检测waittasklist中的任务是否已到启动时间,将waittasklist中满足条件的任务移动至readytasklist中;系统定时在readytasklist取任务,进行资源检测,若资源检测失败,则放回readytasklist;若资源检测成功,则对该任务进行分配资源,并将此任务放入blocktasklist。系统中设置一线程,监视blocktasklist中是否有数据,若有数据,则取出一个任务,进行启动该任务相关进程的操作。
[0102]
3、资源检测与分配
[0103]
资源检测的流程如下图4所示,具体如下:
[0104]
(1.1)获取部署轻量级分布式资源管理与任务调度的计算处理系统的常规计算节点、高级计算节点以及采集服务器节点的静态信息;
[0105]
(1.2)定时获取部署轻量级分布式资源管理与任务调度的计算处理系统的常规计算节点、高级计算节点以及采集服务器节点的硬件状态信息;
[0106]
(1.3)定时检查启动时间已到的队列,并对队列的任务进行资源检测;
[0107]
(1.4)根据任务类型,计算任务所需各类软件进程和数量;
[0108]
(1.5)根据部署轻量级分布式资源管理与任务调度的计算处理系统的各常规计算节点、高级计算节点以及采集服务器节点的状态,按照设定的逻辑计算能运行的软件进程数量;
[0109]
(1.6)根据请求的任务实际所需的软件进程数量,按照设定的逻辑进行分配。
[0110]
4、启动任务
[0111]
图5为启动任务功能处理流程图,具体如下:
[0112]
(2.1)针对每个任务,逐节点地遍历分配的软件进程队列,所述轻量级分布式资员管理与多任务调度器向对应节点的节点管理模块发送进程启动指令;
[0113]
(2.2)若一个任务中一类进程实际启动成功的数量小于设定的阈值,则任务启动失败;所述轻量级分布式资员管理与多任务调度器向对应节点的节点管理模块发送进程结束指令,将该任务已经启动的软件进程进行关闭;
[0114]
(2.3)若认定任务启动成功,则将对应block队列中的任务信息移动至已运行队列中;否则,在对应block队列中删除该任务,并前端报警。
[0115]
5、任务进程状态监控
[0116]
图6为任务进程状态监控功能处理流程图,具体如下:
[0117]
(3.1)定时检测各任务的软件进程运行情况;
[0118]
(3.2)若存在软件进程运行异常情况,则定位到具体任务并按照心跳丢失、内存使用超限、运行异常优先级,逐个判断;
[0119]
(3.3)根据软件进程的运行状态,更新在本轻量级分布式资源管理与多任务调度器部署的系统中记录的各任务运行状态信息。
[0120]
软件进程运行状态:
[0121]
0正常运行
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
1内存超限
[0122]
2心跳丢失
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
3其他异常
[0123]
4正常结束
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
5脱离控制
[0124]
6、关闭任务
[0125]
图7为关闭任务功能处理流程图,具体如下:
[0126]
(4.1)收到任务结束指令时,查询本轻量级分布式资源管理与多任务调度器部署的系统中该任务的具体软件运行进程;
[0127]
(4.2)所述轻量级分布式资员管理与多任务调度器向对应节点的节点管理模块发送进程结束指令,将该任务已经启动的软件进程进行关闭;
[0128]
(4.3)根据释放的软件进程,更新全局资源信息;
[0129]
(4.4)根据结束的情况,更新在本轻量级分布式资源管理与多任务调度器部署的系统中记录的任务结束状态。
[0130]
7、总体处理流程
[0131]
本实施例轻量级分布式资源管理与任务调度方法的总体处理流程如图8所示,所述分布式资源管理与多任务调度器会定时获取硬件节点健康信息,根据硬件节点健康条件和设置的任务启动时间、软件模块所需资源上限去协调硬件资源,若资源检测成功,则启动任务,定时进行任务进程状态监控,若检测到结束任务指令,则进行关闭任务相关处理。
[0132]
综上所述,本发明采用c 开发,不依赖任何开源组件,自主可控、通用性强;可直接运行在windows操作系统,能够满足多用户多任务并发执行的功能需求,并适用于轻量级的分布式计算集群,效率高,执行速度快;具有轻量化、免配置的特点,使用方便,满足小型分布式计算集群使用场景,在使用时直接调用api即可。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献