一种并发访问请求的处理方法及装置制造方法

文档序号:7775913阅读:205来源:国知局
一种并发访问请求的处理方法及装置制造方法
【专利摘要】本发明公开了一种并发访问请求的处理方法及装置,以避免并发访问冲突。本发明中接收对同一数据资源的至少两个并发访问请求,并对所述至少两个并发访问请求进行排序;依照排序后的并发访问请求,依次访问所述同一数据资源。通过本发明能够保证同一时刻只有一个请求访问对应的数据资源,进而能够避免并发访问冲突。
【专利说明】一种并发访问请求的处理方法及装置
【技术领域】
[0001]本发明涉及计算机数据存储【技术领域】,尤其涉及一种并发访问请求的处理方法及装置。
【背景技术】
[0002]基于HTTP (Hyper Text Transfer Protocol,超文本传输协议)的对象存储技术迅速发展,而以容器Container和对象Object的两层业务模型为基础的对象存储技术,应用越来越广泛。
[0003]容器可以理解成一个特殊的顶层目录,对象可以是一个文件或者一个目录,对象隶属于容器。通常用户数据以对象方式、采用上层应用在底层分布式存储引擎上面建立对象存储的技术架构,存储于容器中。而容器中对象的个数是不加限制的,当容器内对象非常多时,会存在一个非常庞大的容器与对象之间的索引关系表。普通的单机数据库已经无法满足存储要求,因此一般选择基于弱一致性的存储引擎采用B树结构进行维护。
[0004]图1所示为一种简易的B树结构;图2所示为基于底层分布式存储引擎架设的对
象存储系统。图1中B树结构的子数据块N1、N2、N3......可存储于图2中分布式存储引
擎中的子节点1、2、3......中的一个或多个上,例如可以将子数据块NI存储在子节点2、子 节点4和子节点6上。向B树结构中写入记录时,一般采用“读取-修改-写入”的过程。在图2中基于底层分布式存储引擎架设的对象存储系统上,则体现为客户端对数据资源发起访问请求,当访问得到数据资源后,对数据资源进行修改后再写回访问存储引擎中。该发起访问请求过程为:基于HTTP协议的客户端发送访问数据资源的访问请求,上层应用从接收到的访问请求中分析得出相关的容器和对象的元数据以及需要访问的数据资源,继而由上层应用对应的引擎访问代理向底层的分布式存储引擎请求数据资源。
[0005]在进行对象存储时,当存在多个客户端同时向同一容器内添加对象时,会造成B树结构中的子数据块成为热点。例如可能存在多个客户端同时需要将子数据块NI写入B树中,此时则会导致B树结构中的子数据块NI成为热点。体现在图2中的基于底层分布式存储引擎架设的对象存储系统上,则为多个客户端发起并发访问请求,使得多个引擎访问代理同时请求访问存储引擎中存储子数据块NI的子节点,造成底层存储引擎的并发访问冲突。如图3所示,假如子数据块NI存储在子节点6上,则上层应用APP1、APP2和APP3将分别通过各自对应的引擎访问代理同时请求访问子节点6。
[0006]基于弱一致性的存储引擎采用B树结构进行维护索引列表时,当底层存储引擎发生并发访问冲突时,底层分布式存储引擎会向上层应用返回数据冲突响应,并由上层应用根据具体的业务来选择重新写入。然而当有多个并发冲突时,则会影响B树结构的写入性能,甚至导致无法完成数据的重新写入,最终导致容器内的对象丢失。
[0007]因此,在基于底层分布式存储引擎架设的对象存储系统中,对于成为热点的数据资源进行并发访问请求时,如何避免并发访问冲突至关重要。
【发明内容】

[0008]本发明实施例提供一种并发访问请求的处理方法及装置,以避免并发访问冲突。
[0009]第一方面,提供一种并发访问请求的处理方法,包括:
[0010]接收对同一数据资源的至少两个并发访问请求,并对所述至少两个并发访问请求进行排序;
[0011]依照排序后的并发访问请求,依次访问所述同一数据资源。
[0012]结合第一方面,在第一种可能的实现方式中,对所述并发访问请求进行排序,包括:
[0013]在一个引擎访问代理中,对所述至少两个并发访问请求进行排序。
[0014]结合第一方面,在第二种可能的实现方式中,所述对所述至少两个并发访问请求进行排序,包括:
[0015]将存储引擎上的每个数据资源对应哈希键值,构成哈希空间;
[0016]划分哈希空间为N个子哈希空间,其中N为存储系统中引擎访问代理的数目;
[0017]将N个子哈希空间分配给N个引擎访问代理,使每一引擎访问代理被分配一个子哈希空间,且不同引擎访问代理被分配的子哈希空间不同;
[0018]根据所述至少两个并发访问请求访问的同一数据资源的哈希值所属的子哈希空间,确定对所述至少两个并发访问请求进行排序的引擎访问代理,得到排序引擎访问代理;
[0019]将不处于所述排序引擎访问代理上的访问请求,路由到所述排序引擎访问代理上,由所述排序引擎访问代理,对所述至少两个并发访问请求进行排序。
[0020]结合第一方面的第二种可能实现方式,在第三种可能的实现方式中,划分哈希空间为N个子哈希空间之后,该方法还包括:
[0021]监测引擎访问代理的数目,当引擎访问代理的数目发生变化时,重新划分哈希空间。
[0022]结合第一方面的第一种可能实现方式,在第四种可能的实现方式中,在对所述并发访问请求进行排序的引擎访问代理中,缓存所述同一数据资源。
[0023]第二方面,提供一种并发访问请求的处理装置,包括接收单元、排序单元和访问单元,其中,
[0024]所述接收单元,用于接收对同一数据资源的至少两个并发访问请求,并向所述排序单元传输所述至少两个并发访问请求;
[0025]所述排序单元,用于接收所述接收单元传输的所述至少两个并发访问请求,并对所述至少两个并发访问请求进行排序,将排序后的并发访问请求向所述访问单元传输;
[0026]所述访问单元,用于接收所述排序单元传输的排序后的并发访问请求,并依照排序后的并发访问请求,依次访问所述同一数据资源。
[0027]结合第二方面,在第一种可能的实现方式中,所述排序单元,具体用于:
[0028]在一个引擎访问代理中,对所述至少两个并发访问请求进行排序。
[0029]结合第二方面,在第二种可能的实现方式中,所述排序单元,具体用于:
[0030]将存储引擎上的每个数据资源对应哈希键值,构成哈希空间;
[0031]划分哈希空间为N个子哈希空间,其中N为存储系统中引擎访问代理的数目;[0032]将N个子哈希空间分配给N个引擎访问代理,使每一引擎访问代理被分配一个子哈希空间,且不同引擎访问代理被分配的子哈希空间不同;
[0033]根据所述至少两个并发访问请求访问的同一数据资源的哈希值所属的子哈希空间,确定对所述至少两个并发访问请求进行排序的引擎访问代理,得到排序引擎访问代理;
[0034]将不处于所述排序引擎访问代理上的访问请求,路由到所述排序引擎访问代理上,由所述排序引擎访问代理,对所述至少两个并发访问请求进行排序。
[0035]结合第二方面的第二种可能实现方式,在第三种可能的实现方式中,所述排序单元,还用于:
[0036]监测引擎访问代理的数目,当引擎访问代理的数目发生变化时,重新划分哈希空间。
[0037]结合第二方面的第一种可能实现方式,在第四种可能的实现方式中,还包括缓存单元,其中,
[0038]所述缓存单元,用于在对所述并发访问请求进行排序的引擎访问代理中,缓存所述同一数据资源。
[0039]本发明第一方面提供的并发访问请求处理方法和第二方面提供的并发访问请求处理装置,当接收到对同一数据资源的至少两个并发访问请求后,对该至少两个并发访问请求进行排序,依照排序后的并发访问请求,依次访问同一数据资源,能够保证同一时刻只有一个请求访问对应的数据资源,进而能够避免并发访问冲突。
【专利附图】

【附图说明】
[0040]图1为现有技术中基于B树结构的索引表组织结构示意图;
[0041]图2为现有技术中基于底层分布式存储引擎架设的对象存储系统构架示意图;
[0042]图3为现有技术中并发访问请求发生访问冲突示意图;
[0043]图4为本发明实施例中并发访问请求处理方法流程示意图;
[0044]图5为本发明实施例中并发访问请求排序方法流程图;
[0045]图6为本发明实施例中哈希空间划分示意图;
[0046]图7为本发明实施例中并发访问请求排序过程示意图;
[0047]图8为本发明实施例提供的并发访问请求处理装置结构示意图;
[0048]图9为本发明实施例提供的并发访问请求处理装置另一结构示意图;
[0049]图10为本发明实施例提供的控制器构成示意图;
[0050]图11为本发明实施例提供的控制器构成又一示意图;
[0051]图12为本发明实施例提供的控制器构成再一示意图。
【具体实施方式】
[0052]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本发明一部分实施例,并不是全部的实施例。
[0053]基于底层分布式存储引擎架设的对象存储系统,不同客户端可能对同一数据资源发起并发访问请求,上层应用则会接收到同一数据资源的至少两个并发访问请求,该至少两个并发访问请求由不同的APP (上层应用)以及引擎访问代理进行处理。本发明实施例中在上层应用中对该至少两个并发访问请求进行处理,以保证同一时刻只有一个请求访问对应的数据资源,进而能够免并发访问冲突。
[0054]实施例一
[0055]本发明实施例一提供一种并发访问请求处理方法,如图4所示,包括:
[0056]SlOl:接收对同一数据资源的至少两个并发访问请求。
[0057]具体的,对于存在热点访问的数据资源,在基于底层分布式存储引擎架设的对象存储系统中,会由基于HTTP协议的不同客户端发起对该数据资源的访问请求,即对同一数据资源存在至少两个并发访问请求。上层应用接收该对同一数据资源的至少两个并发访问请求。
[0058]S102:对接收到的至少两个并发访问请求进行排序。
[0059]具体的,本发明实施例中对上层应用接收到的同一数据资源的至少两个并发访问请求进行排序,可以在对底层存储引擎请求数据资源的不同引擎访问代理上直接进行排序,也可将不同引擎访问代理上的访问请求路由到一个引擎访问代理上进行排序。本发明实施例优选将不同引擎访问代理上的访问请求路由到一个引擎访问代理上进行排序,使得在对并发访问请求进行排序时,无需不同引擎访问代理之间进行状态查询。
[0060]S103:依照排序后的并发访问请求,依次访问数据资源。
[0061]本发明实施例中,对访问同一数据资源的至少两个并发访问请求进行排序。依照排序后的并发访问请求,依次访问该数据资源,能够保证同一时刻只有一个请求访问该数据资源,进而能够避免并发访问冲突。
[0062]实施例二
[0063]本发明实施例二将结合实际应用对实施例一中涉及的并发访问请求处理方法进行详细说明。
[0064]对于以容器和对象的两层业务模型为基础的对象存储技术,当有不止一个客户端同时向一个容器内添加对象时,会导致索引关系表的子数据块数据成为热点,即存在不止一个访问请求。请求访问容器与对象之间的索引表,本发明实施例中将对同一索引表的并发访问请求进行排序,保证同一索引表同一时刻只有一个读写操作,避免并发访问冲突。
[0065]本发明实施例中对访问请求进行排序的过程进行详细说明,其他对并发访问请求的处理步骤可参考实施例一,在此不再赘述。
[0066]本发明实施例中在一个引擎访问代理中,对同一数据资源的至少两个并发访问请求进行排序,将不同弓I擎访问代理上的访问请求路由到一个引擎访问代理上进行排序,使得在对并发访问请求进行排序时,无需不同引擎访问代理之间进行状态查询。
[0067]本发明实施例,在一个引擎访问代理中,对至少两个并发访问请求进行排序的过程如图5所示,包括:
[0068]S201:将存储引擎上的每个数据资源对应哈希键值,构成哈希空间。
[0069]本发明实施例中,当存在不止一个访问请求,请求访问容器与对象之间的索引表时,根据各个上层应用之间统一的哈希算法对存储引擎上的数据资源进行哈希。每个数据资源对应哈希键值,构成哈希空间。哈希空间为一个相对上层应用APP的个数足够大的一维空间。[0070]S202:划分S201中的哈希空间为N个子哈希空间。
[0071]本发明实施例中,划分的子哈希空间的数目与上层应用对应的引擎访问代理数目相同。若上层应用的数目为N,则将哈希空间划分为N份,得到N个子哈希空间,例如本发明实施例中上层应用包括APP1、APP2和APP3,则哈希空间划分过程示意图如图6所示。
[0072]进一步的,本发明实施例中进行哈希空间划分时,可采用等分方式进行划分,也可采用不等分方式进行划分,只要使得划分的子哈希空间数目与上层应用对应的引擎访问代理数目相同即可。例如,本发明实施例中上层应用的数目为N,若哈希空间能够等分为N份,则本发明实施例中可采用等分方式将哈希空间划分为N份,得到N个哈希空间相等的子哈希空间;若哈希空间不能够等分为N份,则本发明实施例中可采用不等分方式将哈希空间划分为N-1个哈希空间相等的子哈希空间,将剩余的哈希空间划分为I个子哈希空间,最终得到N个子哈希空间。
[0073]S203:将N个子哈希空间分配给N个引擎访问代理。
[0074]本发明实施例中可在上层应用的引擎访问代理之间建立简单的集群,为每一个引擎访问代理编号,为每个引擎访问代理自身的序号分配一段子哈希空间。将S202中划分得到的N个子哈希空间分配给N个弓I擎访问代理,每一引擎访问代理分配一个子哈希空间,且不同引擎访问代理分配的子哈希空间不同。
[0075]S204:确定至少两个请求访问的数据资源的哈希值,并根据分配给子引擎访问代理的子哈希空间,确定对至少两个并发访问请求进行排序的引擎访问代理,得到排序引擎访问代理。
[0076]本发明实施例中对数据资源进行哈希后,每个数据资源对应一个哈希值,该哈希值归属于S202中划分得到的一个子哈希空间。而每个哈希空间被分配给一个引擎访问代理。故根据至少两个并发访问请求访问的同一数据资源的哈希值所属的子哈希空间,则可确定对该至少两个并发访问请求进行排序的引擎访问代理。将该确定的引擎访问代理称之为排序弓I擎访问代理,通过该排序弓I擎访问代理对至少两个并发访问请求进行排序。
[0077]S205:将不处于排序引擎访问代理上的并发访问请求,转发到排序引擎访问代理上。
[0078]本发明实施例中每一个访问请求,都被发送至上层应用APP中,故不同的访问请求将处于不同的引擎访问代理上。本发明实施例中当在S204中确定了排序引擎访问代理后,则将不处于该确定的排序引擎访问代理上的访问请求路由到排序引擎访问代理上,由排序引擎访问代理,对路由到其上的所有并发访问请求进行排序。例如,当前有3个并发访问请求需要访问位于存储引擎子节点6上的数据资源,且存储引擎子节点6上的数据资源哈希后得到的哈希值,属于APPl对应的引擎访问代理。则将APP2和APP3分别对应的引擎访问代理上的访问请求路由到APPI对应的弓I擎访问代理上。由APPI对应的弓I擎访问代理对3个并发访问请求进行排序,如图7所示。
[0079]本发明实施例中,通过上述对并发访问请求的处理方式,将对同一容器的索引表的请求被路由到了同一个应用的引擎访问代理上进行排序处理,依照排序后的并发访问请求,依次访问索引表,能够确保没有访问冲突,从而避免了底层分布式存储引擎的数据冲突问题。
[0080]进一步的,本发明实施例中在S202划分子哈希空间后,监测引擎访问代理的数目。当引擎访问代理的数目发生变化时,重新划分哈希空间,以适应上层应用节点退出或新加入的情况。
[0081]更进一步的,由于对B树结构中索引表子数据块中的数据写入都是在上一次已完成数据的基础上进行的。故本发明实施例中,当采用一个引擎访问代理对并发访问请求进行排序时,可在该对并发访问请求进行排序的引擎访问代理中增加读写缓存,缓存数据资源,以提高对数据资源的访问速度。
[0082]实施例三
[0083]基于实施例一和实施例二提供的并发访问请求处理方法,本发明实施例提供一种并发访问请求处理装置,如图8所示,本发明实施例提供的并发访问请求处理装置,包括接收单元801、排序单元802和访问单元803,其中,
[0084]接收单元801,用于接收对同一数据资源的至少两个并发访问请求,并向排序单元802传输至少两个并发访问请求;
[0085]排序单元802,用于接收接收单元801传输的至少两个并发访问请求,并对至少两个并发访问请求进行排序,将排序后的并发访问请求向访问单元803传输;
[0086]访问单元803,用于接收排序单元802传输的排序后的并发访问请求,并依照排序后的并发访问请求,依次访问同一数据资源。
[0087]具体的,本发明实施例中排序单元802用于在一个引擎访问代理中,对至少两个并发访问请求进行排序。
[0088]其中,排序单元802,具体用于:
[0089]将存储引擎上的每个数据资源对应哈希键值,构成哈希空间;
[0090]划分哈希空间为N个子哈希空间,其中N为存储系统中引擎访问代理的数目;
[0091]将N个子哈希空间分配给N个引擎访问代理,使每一引擎访问代理被分配一个子哈希空间,且不同引擎访问代理被分配的子哈希空间不同;
[0092]根据至少两个并发访问请求访问的同一数据资源的哈希值所属的子哈希空间,确定对至少两个并发访问请求进行排序的引擎访问代理,得到排序引擎访问代理;
[0093]将不处于排序引擎访问代理上的访问请求,路由到排序引擎访问代理上,由排序弓I擎访问代理,对至少两个并发访问请求进行排序。
[0094]进一步的,本发明实施例中排序单元802,还用于:
[0095]监测引擎访问代理的数目,当引擎访问代理的数目发生变化时,重新划分哈希空间。
[0096]本发明实施例提供的并发访问请求处理装置,还包括缓存单元804,如图9所示,其中,缓存单元804,用于在对并发访问请求进行排序的引擎访问代理中,缓存同一数据资源。
[0097]本发明实施例提供的并发访问请求处理装置,当对同一数据资源存在至少两个并发访问请求时,对该至少两个并发访问请求进行排序,依照排序后的并发访问请求,依次访问该同一数据资源,能够保证同一时刻只有一个请求访问对应的数据资源,进而能够避免并发访问冲突。
[0098]本发明实施例提供的上述并发访问请求处理装置,可以是独立的部件,也可以是集成于其他部件中,例如本发明实施例提供的上述并发访问请求处理装置可以是引擎访问代理,也可以是集成于引擎访问代理内的新的部件。
[0099]需要说明的是,本发明实施例中的并发访问请求处理装置的各个模块/单元的功能实现以及交互方式可以进一步参照相关方法实施例的描述。
[0100]实施例四
[0101]基于本发明实施例提供的并发访问请求处理方法和装置,本发明实施例提供一种控制器,该控制器可应用于以容器和对象两层业务模型为基础的对象存储业务,如图10所示,该控制器包括:处理器1001和I/O接口 1002,其中,
[0102]处理器1001,用于接收对同一数据资源的至少两个并发访问请求,并对接收到的上述至少两个并发访问请求进行排序,将排序后的并发访问请求向I/O接口 1002传输;
[0103]I/O接口 1002,用于接收处理器1001传输的排序后的并发访问请求,并将排序后的并发访问请求输出。
[0104]进一步的,处理器1001用于在一个引擎访问代理中,对至少两个并发访问请求进行排序。
[0105]其中,处理器1001具体用于:将存储引擎上的每个数据资源对应哈希键值,构成哈希空间;划分哈希空间为N个子哈希空间,其中N为引擎访问代理的数目JfN个子哈希空间分配给N个引擎访问代理,使每一引擎访问代理被分配一个子哈希空间,且不同引擎访问代理被分配的子哈希空间不同;根据至少两个并发访问请求访问的同一数据资源的哈希值所属的子哈希空间,确定对至少两个并发访问请求进行排序的引擎访问代理,得到排序引擎访问代理;将不处于排序引擎访问代理上的访问请求,路由到排序引擎访问代理上,由排序引擎访问代理,对至少两个并发访问请求进行排序。
[0106]进一步的,本发明实施例中控制器,还包括监测器1003,如图11所示,监测器1003监测引擎访问代理的数目,当引擎访问代理的数目发生变化时,向处理器1001发送重新划分哈希空间的指令。
[0107]更进一步的,本发明实施例中控制器还包括缓存器1004,如图12所示,缓存器1004用于在处理器1001对并发访问请求进行排序的引擎访问代理中,缓存同一数据资源。
[0108]本发明实施例提供的控制器,当对同一数据资源存在至少两个并发访问请求时,对该至少两个并发访问请求进行排序,依照排序后的并发访问请求,依次访问该同一数据资源,能够保证同一时刻只有一个请求访问对应的数据资源,进而能够避免并发访问冲突。
[0109]显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
【权利要求】
1.一种并发访问请求的处理方法,其特征在于,包括: 接收对同一数据资源的至少两个并发访问请求,并对所述至少两个并发访问请求进行排序; 依照排序后的并发访问请求,依次访问所述同一数据资源。
2.如权利要求1所述的方法,其特征在于,对所述并发访问请求进行排序,包括: 在一个引擎访问代理中,对所述至少两个并发访问请求进行排序。
3.如权利要求1所述的方法,其特征在于,所述对所述至少两个并发访问请求进行排序,包括: 将存储引擎上的每个数据资源对应哈希键值,构成哈希空间; 划分哈希空间为N个子哈希空间,其中N为存储系统中引擎访问代理的数目; 将N个子哈希空间分配给N个引擎访问代理,使每一引擎访问代理被分配一个子哈希空间,且不同引擎访问代理被分配的子哈希空间不同; 根据所述至少两个并发访问请求访问的同一数据资源的哈希值所属的子哈希空间,确定对所述至少两个并发访问请求进行排序的引擎访问代理,得到排序引擎访问代理; 将不处于所述排序引擎访问代理上的访问请求,路由到所述排序引擎访问代理上,由所述排序引擎访问代理,对所述至少两个并发访问请求进行排序。
4.如权利要求3所述的方法,其特征在于,划分哈希空间为N个子哈希空间之后,该方法还包括: 监测引擎访问代理的数目,当引擎访问代理的数目发生变化时,重新划分哈希空间。
5.如权利要求2所述的方法,其特征在于,该方法还包括: 在对所述并发访问请求进行排序的引擎访问代理中,缓存所述同一数据资源。
6.一种并发访问请求的处理装置,其特征在于,包括接收单元、排序单元和访问单元,其中, 所述接收单元,用于接收对同一数据资源的至少两个并发访问请求,并向所述排序单元传输所述至少两个并发访问请求; 所述排序单元,用于接收所述接收单元传输的所述至少两个并发访问请求,并对所述至少两个并发访问请求进行排序,将排序后的并发访问请求向所述访问单元传输; 所述访问单元,用于接收所述排序单元传输的排序后的并发访问请求,并依照排序后的并发访问请求,依次访问所述同一数据资源。
7.如权利要求6所述的处理装置,其特征在于,所述排序单元,具体用于: 在一个引擎访问代理中,对所述至少两个并发访问请求进行排序。
8.如权利要求6所述的处理装置,其特征在于,所述排序单元,具体用于: 将存储引擎上的每个数据资源对应哈希键值,构成哈希空间; 划分哈希空间为N个子哈希空间,其中N为存储系统中引擎访问代理的数目; 将N个子哈希空间分配给N个引擎访问代理,使每一引擎访问代理被分配一个子哈希空间,且不同引擎访问代理被分配的子哈希空间不同; 根据所述至少两个并发访问请求访问的同一数据资源的哈希值所属的子哈希空间,确定对所述至少两个并发访问请求进行排序的引擎访问代理,得到排序引擎访问代理; 将不处于所述排序引擎访问代理上的访问请求,路由到所述排序引擎访问代理上,由所述排序引擎访问代理,对所述至少两个并发访问请求进行排序。
9.如权利要求8所述的处理装置,其特征在于,所述排序单元,还用于: 监测引擎访问代理的数目,当引擎访问代理的数目发生变化时,重新划分哈希空间。
10.如权利要求7所述的处理装置,其特征在于,还包括缓存单元,其中,所述缓存单元,用于在对所述并发访问 请求进行排序的引擎访问代理中,缓存所述同一数据资源。
【文档编号】H04L29/08GK103634374SQ201310549721
【公开日】2014年3月12日 申请日期:2013年11月7日 优先权日:2013年11月7日
【发明者】童燕群, 李成林 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1