云存储系统和云存储系统中的对象处理方法与流程

文档序号:24062967发布日期:2021-02-26 10:42阅读:65来源:国知局
云存储系统和云存储系统中的对象处理方法与流程
云存储系统和云存储系统中的对象处理方法
[0001]
本案是专利申请号为201710896038.5,申请日为2017年9月28日,发明名称为“云存储系统和云存储系统中的对象处理方法”的分案申请。
技术领域
[0002]
本申请涉及云存储领域,并且更具体地,涉及云存储系统和云存储系统中的对象处理方法。


背景技术:

[0003]
在公有云存储领域中,可以采用主备(active-passive,ap)模式给用户提供存储服务。
[0004]
现有ap模式中,一个区域分为两个提供服务的区域(access zone,az),一个称为主az,另一个称为备az。主az中部署有集群(cluster),备az中也部署有集群。主az中的集群和备az中的集群组成一个集群组(cluster group,cg)。对象(object)的复制方向为从主az中的集群复制到备az中的集群。该区域中的用户写入对象的请求全部都由主az中的集群处理。
[0005]
具体地说,客户端将写对象请求发送给主az中的集群时,主az中的集群存储该对象,并向备az中的集群复制该对象;客户端将写对象请求发送给备az中的集群时,备az中的集群需要先把对象发送给主az中的集群,由主az中的集群存储对象后,主az中的集群再将对象复制到备az中的集群。
[0006]
现有ap模式中的这种处理方法,会导致数据转发量大,消耗较多资源。


技术实现要素:

[0007]
本申请提供了一种云存储系统和该云存储系统中的对象处理方法,有助于节省资源。
[0008]
第一方面,本申请提供了一种云存储系统中的对象处理方法。云存储系统中包括第一服务器、第一存储节点集合、第二服务器和第二存储节点集合,第一服务器和第一存储节点集合位于云存储系统的第一服务区域内,第二服务器和第二存储节点位于云存储系统的第二服务区域内,第一存储节点集合和第二存储节点集合中均包括第一桶。
[0009]
该对象处理方法包括:
[0010]
第一服务器接收客户端发送的第一写指令,第一写指令用于请求将第一对象写入第一桶中;
[0011]
第一服务器根据第一写指令,将第一对象写入第一存储节点集合的第一桶中,并将第一对象发送给第二服务器,以便于第二服务器将第一对象写入第二存储节点集合的第一桶中;
[0012]
第二服务器接收客户端发送的第二写指令,第二写指令用于请求将第二对象写入第一桶中;
[0013]
第二服务器根据第二写指令,将第二对象写入第二存储节点集合的第一桶中,并向第一服务器发送第二对象,以便于第一服务器将第二对象写入第一存储节点集合的第一桶中。
[0014]
该对象处理方法中,第一服务器和第二服务器接收到请求写对象的写指令时,均可以自己存储,并向对方复制对象。与现有技术中相比,减少了对象的转发流程,从而可以节省资源。
[0015]
结合第一方面,在第一种可能的实现方式中,云存储系统还包括第一ktcpvs。
[0016]
这种情况下,第一服务器接收客户端发送的第一写指令,包括:
[0017]
第一ktcpvs接收客户端发送的第一写指令,根据第一写指令确定将第一写指令发送给第一服务器,并向第一服务器发送第一写指令;
[0018]
第一服务器接收第一ktcpvs发送的第一写指令。
[0019]
第二服务器接收客户端发送的第二写指令,包括:
[0020]
第一ktcpvs接收客户端发送的第二写指令,根据第二写指令确定将第二写指令发送给第二服务器,并向第二服务器发送第二写指令;
[0021]
第二服务器接收第一ktcpvs发送的所述第二写指令。
[0022]
结合第一种可能的实现方式,在第二种可能的实现方式中,对象处理方法还包括:
[0023]
第一ktcpvs接收客户端发送的第一读指令,第一读指令用于请求读取第一桶中的第一对象,根据第一读指令确定向第一服务器发送第一读指令,并向第一服务器发送第一读指令;
[0024]
第一服务器接收第一ktcpvs发送的第一读指令,并根据第一读指令读取第一存储节点集合的第一桶中的第一对象;
[0025]
第一ktcpvs接收客户端发送的第二读指令,第二读指令用于请求读取第一桶中的第二对象,根据第二读指令确定向第二服务器发送第二读指令,并向第二服务器发送第二读指令;
[0026]
第二服务器接收第一ktcpvs发送的第二读指令,并根据第二读指令读取第二存储节点集合的第一桶中的第二对象。
[0027]
该实现方式中,第一ktcpvs将第一写指令发送给第一服务器,由第一服务器作为主服务器存储第一对象后,又将第一读指令发送给第一服务器,由第一服务器从第一存储节点集合中读取第一对象,从而可以保持第一对象的强一致性。
[0028]
同理,可以保持第二对象的强一致性。
[0029]
结合第二种可能的实现方式,在第三种可能的实现方式中,第一ktcpvs上有第一信息,第一信息包括:第一桶依次对应第一服务器和第二服务器。
[0030]
这种情况下,第一ktcpvs根据第一写指令确定将第一写指令发送给第一服务器,包括:第一ktcpvs根据第一写指令,计算第一对象相对于第一桶所对应的服务器数量的哈希值,得到第一哈希值;根据第一信息和第一哈希值,确定向第一桶第一个对应的第一服务器发送第一写指令。
[0031]
第一ktcpvs根据第二写指令确定将第二写指令发送给第二服务器,包括:第一ktcpvs根据第二写指令,计算第二对象相对于第一桶所对应的服务器数量的哈希值,得到第二哈希值;根据第一信息和第二哈希值,确定向第一桶第二个对应的第二服务器发送第
二写指令。
[0032]
第一ktcpvs根据第一读指令确定将第一读指令发送给第一服务器,包括:第一ktcpvs根据第一读指令,计算第一对象相对于第一桶所对应的服务器数量的哈希值,得到第一哈希会;根据第一信息和第一哈希值,确定向第一桶第一个对应的第一服务器发送第一读指令。
[0033]
第一ktcpvs根据第二读指令确定将第二读指令发送给第二服务器,包括:第一ktcpvs根据第二读指令,计算第二对象相对于第一桶所对应的服务器数量的哈希值,得到第二哈希值;根据第一信息和第二哈希值,确定向第一桶第二个对应的第二服务器发送第二读指令。
[0034]
结合第三种可能的实现方式,在第四种可能的实现方式中,第一信息包括第一子信息,第二子信息和第三子信息,第一子信息为:第一桶依次包括第一子桶和第二子桶,第二子信息为:第一子桶对应的主服务器为第一服务器,第三子信息为:第二子桶对应的主服务器为第二服务器。
[0035]
这种情况下,第一ktcpvs根据第一信息和第一哈希值,确定向第一桶第一个对应的第一服务器发送第一写指令,包括:第一ktcpvs根据第一子信息和第一哈希值,确定将第一对象写入第一桶第一个对应的第一子桶中;根据第二子信息和第一子桶,确定向第一服务器发送第一写指令。
[0036]
第一ktcpvs根据第一信息和第二哈希值,确定向第一桶第二个对应的第二服务器发送第二写指令,包括:第一ktcpvs根据第一子信息和第二哈希值,确定将第二对象写入第一桶第二个对应的第二子桶中;根据第三子信息和第二子桶,确定向第二服务器发送第二写指令。
[0037]
第一ktcpvs根据第一信息和第一哈希值,确定向第一桶第一个对应的第一服务器发送第一读指令,包括:第一ktcpvs根据第一子信息和第一哈希值,确定读取第一桶第一个对应的第一子桶中的第一对象;根据第二子信息和第一子桶,确定向第一服务器发送第一读指令。
[0038]
第一ktcpvs根据第一信息和第二哈希值,确定向第一桶第二个对应的第二服务器发送第二读指令,包括:第一ktcpvs根据第一子信息和第二哈希值,确定读取第一桶第二个对应的第二子桶中的第二对象;根据第三子信息和第二子桶,确定向第二服务器发送第二读指令。
[0039]
结合第三种或第四种可能的实现方式,在第五种可能的实现方式中,云存储系统还包括位置服务器,位置服务器上配置有第一信息。
[0040]
这种情况下,对象处理方法还包括:第一ktcpvs从位置服务器获取第一信息。
[0041]
结合第五种可能的实现方式,在第六种可能的实现方式中,位置服务器上还配置有第二信息,第二信息包括述第一桶对应的ktcpvs为第一ktcpvs,且云存储系统还包括域名系统设备。
[0042]
这种情况下,第一ktcpvs接收客户端发送的第一写指令,包括:
[0043]
域名系统设备接收客户端发送的第一统一资源定位符,第一统一资源定位符中包括第一写指令;根据第一统一资源定位符向位置服务器发送第一桶的信息;
[0044]
位置服务器接收域名系统设备发送的第一桶的信息;根据第二信息和第一桶的信
息向域名系统发送第一指示信息,第一信息用于指示第一ktcpvs;
[0045]
域名系统接收位置服务器发送的第一指示信息;向客户端发送第一指示信息;
[0046]
客户端接收域名系统设备发送的第一指示信息,根据第一指示信息向第一ktcpvs发送第一写指令;
[0047]
第一ktcpvs接收客户端根据第一指示信息发送的第一写指令。
[0048]
第一ktcpvs接收客户端发送的第二写指令,包括:
[0049]
域名系统设备接收客户端发送的第二统一资源定位符,第二统一资源定位符中包括第二写指令;根据第二统一资源定位符向位置服务器发送第一桶的信息;
[0050]
位置服务器接收域名系统设备发送的第一桶的信息;根据第二信息和第一桶的信息向域名系统发送第一指示信息;
[0051]
域名系统接收位置服务器发送的第一指示信息;向客户端发送第一指示信息;
[0052]
客户端接收域名系统设备发送的第一指示信息,根据第一指示信息向第一ktcpvs发送第二写指令;
[0053]
第一ktcpvs接收客户端根据第一指示信息发送的第二写指令。
[0054]
第一ktcpvs接收客户端发送的第一读指令,包括:
[0055]
域名系统设备接收客户端发送的第三统一资源定位符,第三统一资源定位符中包括第一读指令;根据第三统一资源定位符向位置服务器发送第一桶的信息;
[0056]
位置服务器接收域名系统设备发送的第一桶的信息;根据第二信息和第一桶的信息向域名系统发送第一指示信息;
[0057]
域名系统接收位置服务器发送的第一指示信息;向客户端发送第一指示信息;
[0058]
客户端接收域名系统设备发送的第一指示信息,根据第一指示信息向第一ktcpvs发送第一读指令;
[0059]
第一ktcpvs接收客户端根据第一指示信息发送的第一读指令。
[0060]
第一ktcpvs接收客户端发送的第二读指令,包括:
[0061]
域名系统设备接收客户端发送的第四统一资源定位符,第四统一资源定位符中包括第二读指令;根据第四统一资源定位符向位置服务器发送第一桶的信息;
[0062]
位置服务器接收域名系统设备发送的第一桶的信息;根据第二信息和第一桶的信息向域名系统发送第一指示信息;
[0063]
域名系统接收位置服务器发送的第一指示信息;向客户端发送第一指示信息;
[0064]
客户端接收域名系统设备发送的第一指示信息,根据第一指示信息向第一ktcpvs发送所述第二读指令;
[0065]
第一ktcpvs接收客户端根据第一指示信息发送的第二读指令。
[0066]
该实现方式中,客户端可以通过域名系统设备从位置服务器获取第一桶对应的ktcpvs的指示信息,从而使得该云存储系统可以布置多个ktcpvs,从而可以均衡ktcpvs的负载压力。
[0067]
第二方面,本申请提供了一种云存储系统,该云存储系统中包括用于实现第一方面或第一方面中任意一种可能的实现方式中的对象处理方法的第一服务器、第一存储节点集合、第二服务器、第二存储节点集合、第一ktcpvs、位置服务器和域名系统设备。
[0068]
第三方面,本申请提供了一种包含指令的计算机程序产品。当该计算机程序产品
在云存储系统中运行时,使得云存储系统执行第一方面或第一方面中任意一种可能的实现方式中的对象处理方法。
[0069]
第四方面,本申请提供了一种计算机可读存储介质。该计算机可读存储介质中存储用于云存储系统执行的程序代码。该程序代码包括用于执行第一方面或第一方面中任意一种可能的实现方式中的对象处理方法的指令。
附图说明
[0070]
图1是本申请一个实施例的应用场景的示意性架构图;
[0071]
图2是本申请一个实施例的对象处理方法200的示意性流程图;
[0072]
图3是对象处理方法200中的s210和s230的详细示意图;
[0073]
图4是本申请另一个实施例的应用场景的示意性架构图;
[0074]
图5是对象处理方法200中还可以包括的步骤的示意性流程图;
[0075]
图6是本申请另一个实施例的应用场景的示意性架构图;
[0076]
图7是本申请另一个实施例的应用场景的示意性架构图;
[0077]
图8是本申请另一个实施例的应用场景的示意性流程图;
[0078]
图9是本申请另一个实施例的云存储系统的示意性流程图。
具体实施方式
[0079]
下面将结合附图,对本申请中的技术方案进行描述。
[0080]
图1是本申请一个实施例的云存储系统的示意性结构图。应理解,本申请实施例的云存储系统中还可以包括更多或者更少的装置。此外,图1中的装置可以是硬件,也可以是从功能上划分的软件或者以上二者的结合。
[0081]
图1所示的云存储系统包括第一集群和第二集群。第一集群可以简称为集群1,第二集群可以简称为集群2。
[0082]
集群1中包括物理服务器和n个存储节点。存储节点可以位于物理服务器中,也可以独立于物理服务器并且与物理服务器通信。物理服务器运行虚拟机,如linux虚拟服务器(linux virtual server,lvs)。其中,n个存储节点包括节点1至节点n,n为不小于2的整数。第一服务器可以与n个存储节点相互通信。
[0083]
集群2中包括物理服务器和m个存储节点。存储节点可以位于物理服务器中,也可以独立于物理服务器并且与物理服务器通信。物理服务器运行虚拟机,如第二服务器。其中,m为正整数,m个存储节点包括节点1至节点m,m为不小于2的整数。第二服务器可以与m个存储节点相互通信。
[0084]
本申请实施例中的存储节点可以为硬盘,如机械硬盘,固态硬盘等,也可以为外置存储设备,如存储阵列、直接连接存储(direct access storage,das)等,本申请实施例对此不作限定。
[0085]
应理解,本申请实施例中的lvs只是一种示例,也可以是其他类型虚拟服务器。
[0086]
集群1中的物理服务器可以称为第一服务器,集群2中的物理服务器可以称为第二服务器,集群1中的n个存储节点可以称为第一存储节点集合,集群2中的m个存储节点可以称为第二存储节点集合,
[0087]
第一服务器和第二服务器之间可以相互通信。第一服务器和第二服务器与客户端之间可以通信。应理解,此处所说的相互通信既包括直接通信,也包括通过其他设备或装置通信。
[0088]
图1所示的云存储系统服务的区域称为区域(region)1。区域1划分为az1和az2。集群1位于az1中,集群2位于az2中。
[0089]
集群1和集群2可以构成两个集群组,一个可以称为第一集群组,简称为cg1;另一个可以称为第二集群组,简称为cg2。
[0090]
第一集群组中,对象的复制关系为从第一集群至第二集群。第二集群组中,对象的复制关系为从第二集群至第一集群。
[0091]
对象的复制关系从第一集群至第二集群是指,写入对象时,第一集群中的第一服务器将对象存储至第一集群的第一存储节点集合中,并将对象发送至第二集群中的第二服务器,以便于第二服务器将对象存储至第二集群中的第二存储节点集合中;读取对象时,由第一集群的第一服务器从第一集群的第一存储节点集合中读取对象。即,第一集群所属的az1为主az,第二集群所属的az2为备az。
[0092]
对象的复制关系从第二集群至第一集群是指,写入对象时,第二集群中的第二服务器将对象存储至第二集群中的第二存储节点集合中,并将对象发送至第一集群中的第一服务器,以便于第一服务器将对象存储至第一集群中的第一存储节点集合中;读取对象时,由第二集群的第二服务器从第二集群的第二存储节点集合中读取对象。即,第二集群所属的az2为主az,第一集群所属的az1为备az。
[0093]
图1所示的云存储系统中的对象处理方法200的一个示意性流程图如图2所示,
[0094]
应理解,图2示出了对象处理方法200的步骤或操作,但这些步骤或操作仅是示例,本申请实施例还可以执行其他操作或者图2中的各个操作的变形。此外,图2中的各个步骤可以按照与图2呈现的不同的顺序来执行,并且有可能并非要执行图2中的全部操作。
[0095]
对象处理方法200可以包括以包括s210、s220、s230和s240。
[0096]
s210,第一服务器接收客户端发送的第一写指令,第一写指令用于请求将第一对象写入第一桶中。
[0097]
该步骤可以通过多种方式实现,后续内容中会详细描述可能的实现方式。
[0098]
s220,第一服务器根据第一写指令,将第一对象写入第一存储节点集合的第一桶中,并将第一对象发送给第二服务器,以便于第二服务器将第一对象写入第二存储节点集合的第一桶中。
[0099]
进一步地,第二服务器接收第一服务器发送的第一对象后,可以将第一对象存储至第二存储节点集合的第一桶中。
[0100]
s230,第二服务器接收客户端发送的第二写指令,第二写指令用于请求将第二对象写入第一桶中。
[0101]
该步骤可以通过多种方式实现,后续内容中会详细描述可能的实现方式。
[0102]
第二对象与第一对象是不相同的对象。例如,第一对象的名称与第二对象的名称不一样。
[0103]
s240,第二服务器根据第二写指令,将第二对象写入第二存储节点集合的第一桶中,并向第一服务器发送第二对象,以便于第一服务器将第二对象写入第一存储节点集合
的第一桶中。
[0104]
进一步地,第一服务器接收第二对象后,将第二对象存储至第一存储节点集合的第一桶中。
[0105]
该对象处理方法中,第一服务器和第二服务器接收到请求写对象的写指令时,均可以自己存储,并向对方复制对象。与现有技术中相比,减少了对象的转发流程,从而可以节省资源。
[0106]
此外,第一服务器和第二服务器接收写指令后,都可以直接存储对象,可以使得当第一服务器和第二服务器中的任意一个集群不能提供服务,且没进行主备切换等操作时,另一个服务器仍然可以提供服务,从而可以降低影响。
[0107]
从另一个角度说,第一服务器存储第一对象并向第二服务器复制第一对象,相当于第一服务器和第一存储节点集合组成的集群为主集群,第二服务器和第二存储节点集合组成的集群为备集群;第二服务器存储第二对象并向第一服务器复制第二对象,相当于第二服务器和第二存储节点集合组成的集群为主集群,第一服务器和第一存储节点集合组成的集群为备集群。
[0108]
下面结合图3介绍s210和s220的一种可能的实现方式。使用该实现方式的情况下,如图4所示,云存储系统系统中还包括内核传输控制协议虚拟服务器(kernel transmission control protocol virtual server,ktcpvs)。为了后续描述方便,将该ktcpvs称为第一ltcpvs。
[0109]
如图3所示,s210可以包括s211和s212,s230可以包括s231和s232。
[0110]
s211,第一ktcpvs接收客户端发送的第一写指令,根据第一写指令确定将第一写指令发送给第一服务器,并向第一服务器发送第一写指令。
[0111]
s212,第一服务器接收第一ktcpvs发送的第一写指令。
[0112]
也就是说,客户端通过第一ktcpvs向第一服务器发送第一写指令。相应地,第一服务器接收客户端通过第一ktcpvs发送的第一写指令。
[0113]
s231,第一ktcpvs接收客户端发送的第二写指令,根据第二写指令确定将第二写指令发送给第二服务器,并向第二服务器发送第二写指令。
[0114]
s232,第二服务器接收第一ktcpvs发送的所述第二写指令。
[0115]
也就是说,第二服务器接收客户端通过第一ktcpvs发送的第二写指令。相应地,第二服务器接收客户端通过第一ktcpvs发送的第二写指令。
[0116]
可选地,对象处理方法200还可以包括图5中的所示的s250,s260,s270和s280。
[0117]
s250,第一ktcpvs接收客户端发送的第一读指令,第一读指令用于请求读取第一桶中的第一对象,根据第一读指令确定向第一服务器发送第一读指令,并向第一服务器发送第一读指令。
[0118]
s260,第一服务器接收第一ktcpvs发送的第一读指令,并根据第一读指令读取第一存储节点集合的第一桶中的第一对象。
[0119]
s270,第一ktcpvs接收客户端发送的第二读指令,第二读指令用于请求读取第一桶中的第二对象,根据第二读指令确定向第二服务器发送第二读指令,并向第二服务器发送第二读指令。
[0120]
s280,第二服务器接收第一ktcpvs发送的第二读指令,并根据第二读指令读取第
二存储节点集合的第一桶中的第二对象。
[0121]
s260和s270中,第一ktcpvs将第一读指令发送给第一服务器,从而可以保持读取的第一对象的强一致性。
[0122]
s260和s270中,第一ktcpvs将第二读指令发送给第二服务器,从而可以保持读取的第二对象的强一致性。
[0123]
对象处理方法200中,第一ktcpvs上可以存储有第一信息,第一信息包括:第一桶依次对应第一服务器和第二服务器。
[0124]
第一桶依次对应第一服务器和第二服务器是指,第一桶对应的第一个服务器为第一服务器,第一桶对应的第二个服务器为第二服务器。
[0125]
这种情况下,s250中,根据第一读指令确定向第一服务器发送第一读指令的一种可能的实现方式可以包括:
[0126]
第一ktcpvs根据第一写指令,计算第一对象相对于第一桶所对应的服务器数量的哈希值,得到第一哈希值;
[0127]
根据第一信息和第一哈希值,确定向第一桶第一个对应的第一服务器发送第一写指令。
[0128]
例如,第一ktcpvs获取第一写指令中的第一对象的名称后,可以将第一对象的名称数值化。由于第一桶对应第一服务器和第二服务器这两个服务器,因此,第一ktcpvs可以计算第一对象的名称数值化后得到的数值相对于2的哈希值。
[0129]
例如,第一对象的名称数值化后得到的数值为143,则可以将143对2取模,得到哈希值1。
[0130]
然后第一ktcpvs可以确定向第一桶对应的第一个服务器(第一服务器)发送第一写指令。
[0131]
s260中,第一ktcpvs根据第二写指令确定将第二写指令发送给第二服务器的一种可能的实现方式可以包括:
[0132]
第一ktcpvs根据第二写指令,计算第二对象相对于第一桶所对应的服务器数量的哈希值,得到第二哈希值;
[0133]
根据第一信息和第二哈希值,确定向第一桶第二个对应的第二服务器发送第二写指令。
[0134]
例如,第一ktcpvs获取第二写指令中的第二对象的名称后,可以将第二对象的名称数值化。由于第一桶对应第一服务器和第二服务器这两个服务器,因此,第一ktcpvs可以计算第二对象的名称数值化后得到的数值相对于2的哈希值。
[0135]
例如,第二对象的名称数值化后得到的数值为158,则可以将158对2取模,得到哈希值2。
[0136]
s270中,第一ktcpvs根据第一读指令确定将第一读指令发送给第一服务器的一种可能的实现方式可以包括:
[0137]
第一ktcpvs根据第一读指令,计算第一对象相对于第一桶所对应的服务器数量的哈希值,得到第一哈希值;
[0138]
根据第一信息和第一哈希值,确定向第一桶第一个对应的第一服务器发送第一读指令。
[0139]
具体实施方式与前面第一写指令的相关内容类似,为了简介,此处不再赘述。
[0140]
s280中,第一ktcpvs根据第二读指令确定将第二读指令发送给第二服务器的一种可能的实现方式可以包括:
[0141]
第一ktcpvs根据第二读指令,计算第二对象相对于第一桶所对应的服务器数量的哈希值,得到第二哈希值;
[0142]
根据第一信息和第二哈希值,确定向第一桶第二个对应的第二服务器发送第二读指令。
[0143]
具体实施方式与前面第一写指令的相关内容类似,为了简介,此处不再赘述。
[0144]
可选地,第一ktcpvs上存储的第一信息可以包括第一子信息,第二子信息和第三子信息。
[0145]
第一子信息为:第一桶依次包括第一子桶和第二子桶;第二子信息为:第一子桶对应的主服务器为第一服务器;第三子信息为:第二子桶对应的主服务器为第二服务器。
[0146]
相应地,第一存储节点集合中的第一桶包括第一子桶和第二子桶,第二存储节点集合中的第一桶也包括第一子桶和第二子桶。
[0147]
第一信息可以理解为:第一桶因此划分为第一子桶和第二子桶;第一子桶对应的对象复制关系为从第一集群至第二集群,即第一集群与第二集群组成cg1;第二子桶对应的复制关系为从第二集群至第一集群,即第一集群与第二集群组成cg2。
[0148]
用bucket1表示第一桶,bucket1_1表示第一子桶,bucket1_2表示第二子桶,cluster1表示第一集群,cluster2表示第二集群,则第一信息可以表示为:bucket1{bucket1_1,bucket1_2},bucket1_1{cg1:cluster1->cluster2},bucket1_2{cg2:cluster2->cluster1}。
[0149]
这种情况下,s250中,根据第一写指令确定向第一服务器发送第一写指令的一种可能的实现方式可以包括:
[0150]
第一ktcpvs根据第一写指令,计算第一对象相对于第一桶所对应的子桶数量的哈希值,得到第一哈希值;根据第一子信息和第一哈希值,确定将第一对象写入第一桶第一个对应的第一子桶中;根据第二子信息和第一子桶,确定向第一服务器发送第一写指令。
[0151]
此时,第一服务器将第一对象写入第一存储节点集合的第一子桶中。第二服务器接收第一服务器发送的第一对象后,将第一对象写入第二存储节点集合的第一子桶中。
[0152]
s260中,第一ktcpvs根据第二写指令确定将第二写指令发送给第二服务器的一种可能的实现方式可以包括:
[0153]
第一ktcpvs根据第二写指令,计算第二对象相对于第一桶所对应的服务器数量的哈希值,得到第二哈希值;第一ktcpvs根据第一子信息和第二哈希值,确定将第二对象写入第一桶第二个对应的第二子桶中;根据第三子信息和第二子桶,确定向第二服务器发送第二写指令。
[0154]
此时,第二服务器将第二对象写入第二存储节点集合的第二子桶中。第一服务器接收第二服务器发送的第二对象后,将第二对象写入第一存储节点集合的第二子桶中。
[0155]
s270中,第一ktcpvs根据第一读指令确定将第一读指令发送给第一服务器的一种可能的实现方式可以包括:
[0156]
第一ktcpvs根据第一读指令,计算第一对象相对于第一桶所对应的服务器数量的
哈希值,得到第一哈希值;根据第一子信息和第一哈希值,确定读取第一桶第一个对应的第一子桶中的第一对象;根据第二子信息和第一子桶,确定向第一服务器发送第一读指令。
[0157]
此时,第一服务器读取第一存储节点集合的第一子桶中的第一对象。
[0158]
s280中,第一ktcpvs根据第二读指令确定将第二读指令发送给第二服务器的一种可能的实现方式可以包括:
[0159]
第一ktcpvs根据第二读指令,计算第二对象相对于第一桶所对应的服务器数量的哈希值,得到第二哈希值;根据第一子信息和第二哈希值,确定读取第一桶第二个对应的第二子桶中的第二对象;根据第三子信息和第二子桶,确定向第二服务器发送第二读指令。
[0160]
此时,第一服务器读取第一存储节点集合的第一子桶中的第一对象。
[0161]
可选地,如图6所示,云存储系统中还可以包括位置服务器(location server,ls)。位置服务器上配置有第一信息。
[0162]
这种情况下,第一ktcpvs上存储的第一信息可以是从位置服务器上获取的。
[0163]
换句话说,对象处理方法200中,在第一ktcpvs使用第一信息之前,可以包括:第一ktcpvs从位置服务器获取第一信息。
[0164]
可选地,如图7所示,云存储系统还可以包括域名系统(domain name system,dns)设备。这种情况下,位置服务器上还可以配置有第二信息,第二信息包括述第一桶对应的ktcpvs为第一ktcpvs。
[0165]
相应地,第一ktcpvs接收客户端发送的第一写指令,可以包括:
[0166]
域名系统设备接收客户端发送的第一统一资源定位符(uniform resource locator,url),第一统一资源定位符中包括第一写指令;根据第一统一资源定位符向位置服务器发送第一桶的信息;
[0167]
位置服务器接收域名系统设备发送的第一桶的信息;根据第二信息和第一桶的信息向域名系统发送第一指示信息,第一信息用于指示第一ktcpvs;
[0168]
域名系统接收位置服务器发送的第一指示信息;向客户端发送第一指示信息;
[0169]
客户端接收域名系统设备发送的第一指示信息,根据第一指示信息向第一ktcpvs发送第一写指令;
[0170]
第一ktcpvs接收客户端根据第一指示信息发送的第一写指令。
[0171]
第一ktcpvs接收客户端发送的第二写指令,可以包括:
[0172]
域名系统设备接收客户端发送的第二统一资源定位符,第二统一资源定位符中包括第二写指令;根据第二统一资源定位符向位置服务器发送第一桶的信息;
[0173]
位置服务器接收域名系统设备发送的第一桶的信息;根据第二信息和第一桶的信息向域名系统发送第一指示信息;
[0174]
域名系统接收位置服务器发送的第一指示信息;向客户端发送第一指示信息;
[0175]
客户端接收域名系统设备发送的第一指示信息,根据第一指示信息向第一ktcpvs发送第二写指令
[0176]
第一ktcpvs接收客户端根据第一指示信息发送的第二写指令。
[0177]
第一ktcpvs接收客户端发送的第一读指令,可以包括:
[0178]
域名系统设备接收客户端发送的第三统一资源定位符,第三统一资源定位符中包括第一读指令;根据第三统一资源定位符向位置服务器发送第一桶的信息;
[0179]
位置服务器接收域名系统设备发送的第一桶的信息;根据第二信息和第一桶的信息向域名系统发送第一指示信息;
[0180]
域名系统接收位置服务器发送的第一指示信息;向客户端发送第一指示信息;
[0181]
客户端接收域名系统设备发送的第一指示信息,根据第一指示信息向第一ktcpvs发送第一读指令
[0182]
第一ktcpvs接收客户端根据第一指示信息发送的第一读指令。
[0183]
第一ktcpvs接收客户端发送的第二读指令,可以包括:
[0184]
域名系统设备接收客户端发送的第四统一资源定位符,第四统一资源定位符中包括第二读指令;根据第四统一资源定位符向位置服务器发送第一桶的信息;
[0185]
位置服务器接收域名系统设备发送的第一桶的信息;根据第二信息和第一桶的信息向域名系统发送第一指示信息;
[0186]
域名系统接收位置服务器发送的第一指示信息;向客户端发送第一指示信息;
[0187]
客户端接收域名系统设备发送的第一指示信息,根据第一指示信息向第一ktcpvs发送所述第二读指令;
[0188]
第一ktcpvs接收客户端根据第一指示信息发送的第二读指令。
[0189]
该实现方式中,客户端可以通过域名系统设备从位置服务器获取第一桶对应的ktcpvs的指示信息,从而使得该云存储系统可以布置多个ktcpvs,从而可以均衡ktcpvs的负载压力。
[0190]
本申请实施例的云存储系统中,可选地,每个az中可以部署更多的集群,这些集群可以组成更多的集群组,这些集群中的桶可以划分为更多的子桶,这些子桶与这些集群组对应。
[0191]
例如,如图8所示的云存储系统,其中,az1中部署有两个集群,分别为集群1和集群3;az2中部署有两个集群,分别为集群2和集群4。
[0192]
集群3中包括物理服务器和s个存储节点,集群4中包括物理服务器和t个存储节点。s和t为正整数。
[0193]
集群3中的物理服务器可以称为第三物理服务器,s个存储节点可以称为第三存储节点集合;集群4中的物理服务器可以称为第四物理服务器,t个存储节点可以称为第四存储节点集合。
[0194]
云存储系统中的桶可以划分为4个子桶,分别为子桶1、子桶2、子桶3和子桶4。集群1、集群2、集群3和集群4可以划分为4个逻辑集群组,分别为集群组1、集群组2、集群组3和集群组4。
[0195]
集群组1中包括集群1和集群2,对象的复制关系为从集群1至集群2;集群组2中包括集群2和集群1,对象的复制关系为从集群2至集群1;集群组3中包括集群3和集群4,对象的复制关系为从集群3至集群4;集群组4中包括集群4和集群3,对象的复制关系为从集群4至集群3。
[0196]
子桶1映射至集群组1,子桶2映射至集群组2,子桶3映射至集群组3,子桶4映射至集群组4。
[0197]
用bucket1表示第一桶,bucket1_1表示第一子桶,bucket1_2表示第二子桶,bucket1_3表示第三子桶,bucket1_4表示第四子桶,cluster1表示第一集群,cluster2表示
第二集群,cluster1表示第三集群,cluster2表示第四集群,cg3表示集群组3,cg4表示集群组4,则第一信息可以表示为:
[0198]
bucket1{bucket1_1,bucket1_2,bucket1_3,bucket1_4},bucket1_1{cg1:cluster1->cluster2},bucket1_2{cg2:cluster2->cluster1},bucket1_3{cg3:cluster3->cluster4},bucket1_4{cg4:cluster4->cluster3}。
[0199]
若ls为对象确定的目标集群组为集群组1,则集群1对对象进行处理,并将处理结果复制到集群2;若ls为对象确定的目标集群组为集群组2,则集群2对对象进行处理,并将处理结果复制到集群1;若ls为对象确定的目标集群组为集群组3,则集群3对象进行处理,并将处理结果复制到集群4;若ls为对象确定的目标集群组为集群组4,则集群4对对象进行处理,并将处理结果复制到集群3。
[0200]
应理解,上述子桶的数量、集群的数量和集群组的数量均是示例,本申请实施例的云存储系统中还可以包括更多的集群,更多的集群可以划分更多的集群组,桶还可以划分为更多的子桶。
[0201]
云存储系统中的集群越多,可以划分的集群组也就越多,可以承载负载的集群也就越多。这可以使得可以更灵活地均衡各个集群上的负载压力。此外,若有集群出现故障,不能正常提供服务时,可以降低受影响的用户数量。
[0202]
云存储系统中包括更多的集群组的情况下,对象的读或写的方法可以参考图1至图8所示的对象处理方法,为了简洁,此处不再赘述。
[0203]
本申请一个实施例的云存储系统900的示意性架构图如图9所示。应理解,图9示出的云存储系统900仅是示例,本申请实施例的云存储系统还可包括其他模块或单元,或者包括与图9中的各个设备的功能相似的设备,或者并非要包括图9中所有设备。
[0204]
所述云存储系统900中包括第一服务器、第一存储节点集合、第二服务器和第二存储节点集合,所述第一服务器和所述第一存储节点集合位于所述云存储系统的第一服务区域内,所述第二服务器和所述第二存储节点位于所述云存储系统的第二服务区域内,所述第一存储节点集合和所述第二存储节点集合中均包括第一桶。
[0205]
其中,所述第一服务器用于:接收客户端发送的第一写指令,所述第一写指令用于请求将第一对象写入所述第一桶中;根据第一写指令,将所述第一对象写入所述第一存储节点集合的所述第一桶中,并将所述第一对象发送给所述第二服务器,以便于所述第二服务器将所述第一对象写入所述第二存储节点集合的所述第一桶中。
[0206]
所述第二服务器用于:接收所述客户端发送的第二写指令,所述第二写指令用于请求将第二对象写入所述第一桶中,根据所述第二写指令,将所述第二对象写入所述第二存储节点集合的所述第一桶中,并向所述第一服务器发送所述第二对象,以便于所述第一服务器将所述第二对象写入所述第一存储节点集合的所述第一桶中。
[0207]
可选地,所述云存储系统900还可以包括第一ktcpvs。
[0208]
所述第一ktcpvs用于:接收所述客户端发送的所述第一写指令;根据所述第一写指令确定将所述第一写指令发送给所述第一服务器;向所述第一服务器发送所述第一写指令;接收所述客户端发送的所述第二写指令;根据所述第二写指令确定将所述第二写指令发送给所述第二服务器;向所述第二服务器发送所述第二写指令。
[0209]
所述第一服务器具体用于:接收所述客户端通过所述第一ktcpvs发送的所述第一
写指令。
[0210]
所述第二服务器具体用于:接收所述客户端通过所述第一ktcpvs发送的所述第二写指令。
[0211]
可选地,所述第一ktcpvs还用于:接收所述客户端发送的第一读指令,所述第一读指令用于请求读取所述第一桶中的所述第一对象;根据所述第一读指令确定将所述第一服务器发送所述第一读指令;向所述第一服务器发送所述第一读指令;接收所述客户端发送的第二读指令,所述第二读指令用于请求读取所述第一桶中的所述第二对象;根据第二读指令确定向所述第二服务器发送所述第二读指令;向所述第二服务器发送所述第二读指令。
[0212]
所述第一服务器还用于:接收所述第一ktcpvs发送的所述第一读指令;根据所述第一读指令读取所述第一存储节点集合的所述第一桶中的所述第一对象。
[0213]
所述第二服务器还用于:接收所述第一ktcpvs发送的所述第二读指令;根据所述第二读指令读取所述第二存储节点集合的所述第一桶中的所述第二对象。
[0214]
可选地,所述第一ktcpvs上有第一信息,所述第一信息:所述第一桶依次对应所述第一服务器和所述第二服务器。
[0215]
所述第一ktcpvs具体用于:根据所述第一写指令,计算所述第一对象相对于所述第一桶所映射的服务器数量的哈希值,得到第一哈希值;根据所述第一信息和第一哈希值,确定向所述第一桶第一个对应的所述第一服务器发送所述第一写指令。
[0216]
所述第一ktcpvs具体用于:根据所述第二写指令,计算所述第二对象相对于所述第一桶所映射的服务器数量的哈希值,得到第二哈希值;根据所述第一信息和第二哈希值,确定向所述第一桶第二个对应的所述第二服务器发送所述第二写指令。
[0217]
所述第一ktcpvs具体用于:根据所述第一读指令,计算所述第一对象相对于所述第一桶所映射的服务器数量的哈希值,得到第一哈希值;根据所述第一信息和第一哈希值,确定向所述第一桶第一个对应的所述第一服务器发送所述第一读指令。
[0218]
所述第一ktcpvs具体用于:根据所述第二读指令,计算所述第二对象相对于所述第一桶所映射的服务器数量的哈希值,得到第二哈希值;根据所述第一信息和第二哈希值,确定向所述第一桶第二个对应的所述第二服务器发送所述第二读指令。
[0219]
可选地,所述第一信息包括第一子信息,第二子信息和第三子信息,所述第一子信息为:所述第一桶依次包括第一子桶和第二子桶,所述第二子信息为:所述第一子桶对应的主服务器为所述第一服务器,所述第三子信息为:所述第二子桶对应的主服务器为所述第二服务器。
[0220]
所述第一ktcpvs具体用于:根据所述第一写指令,计算所述第一对象相对于所述第一桶对应的子桶数量的哈希值,得到第一哈希值;根据所述第一子信息和第一哈希值,确定将所述第一对象写入所述第一桶第一个对应的所述第一子桶中;根据所述第二子信息和所述第一子桶,确定向所述第一服务器发送所述第一写指令。
[0221]
所述第一ktcpvs具体用于:根据所述第二写指令,计算所述第二对象相对于所述第一桶对应的子桶数量的哈希值,得到第二哈希值;根据所述第一子信息和第二哈希值确定将所述第二对象写入所述第一桶第二个对应的所述第二子桶中;根据所述第三子信息和所述第二子桶,确定向所述第二服务器发送所述第二写指令。
[0222]
所述第一ktcpvs具体用于:根据所述第一读指令,计算所述第一对象相对于所述第一桶对应的子桶数量的哈希值,得到第一哈希值;根据所述第一子信息和第一哈希值,确定读取所述第一桶第一个对应的所述第一子桶中的所述第一对象;根据所述第二子信息和所述第一子桶,确定向所述第一服务器发送所述第一读指令。
[0223]
所述第一ktcpvs具体用于:根据所述第二读指令,计算所述第二对象相对于所述第一桶对应的子桶数量的哈希值,得到第二哈希值;根据所述第一子信息和第二哈希值确定读取所述第一桶第二个对应的所述第二子桶中的所述第二对象;根据所述第三子信息和所述第二子桶,确定向所述第二服务器发送所述第二读指令。
[0224]
可选地,云存储系统900还可以包括位置服务器,所述位置服务器上配置有所述第一信息。
[0225]
相应地,所述第一ktcpvs还用于:从所述位置服务器获取所述第一信息。
[0226]
可选地,云存储系统900域名系统设备,相应地,所述位置服务器上还配置有第二信息,所述第二信息包括:所述第一桶对应的ktcpvs为所述第一ktcpvs。
[0227]
所述域名系统设备用于:接收所述客户端发送的第一统一资源定位符,所述第一统一资源定位符中包括所述第一写指令;根据所述第一统一资源定位符向所述位置服务器发送所述第一桶的信息;接收所述客户端发送的第二统一资源定位符,所述第二统一资源定位符中包括所述第二写指令;根据所述第二统一资源定位符向所述位置服务器发送所述第一桶的信息;接收所述客户端发送的第三统一资源定位符,所述第三统一资源定位符中包括所述第一读指令;根据所述第三统一资源定位符向所述位置服务器发送所述第一桶的信息;接收所述客户端发送的第四统一资源定位符,所述第四统一资源定位符中包括所述第二读指令;根据所述第四统一资源定位符向所述位置服务器发送所述第一桶的信息。
[0228]
所述位置服务器用于:接收所述域名系统设备发送的所述第一桶的信息;根据所述第二信息和所述第一桶的信息向所述域名系统发送第一指示信息,所述第一信息用于指示所述第一ktcpvs。
[0229]
所述域名系统还用于:接收所述位置服务器发送的所述第一指示信息;向所述客户端发送所述第一指示信息,以便于所述客户端根据所述第一指示信息向所述客户端发送所述第一写指令,以便于所述客户端根据所述第一指示信息向所述第一ktcpvs发送所述第二写指令,以便于所述客户端根据所述第一指示信息向所述第一ktcpvs发送所述第一读指令,以便于所述客户端根据所述第一指示信息向所述第一ktcpvs发送所述第二读指令。
[0230]
图9所示的云存储系统中的各个设备可以用于执行图2所示的对象处理方法200,此处不再赘述。
[0231]
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
[0232]
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0233]
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以
通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0234]
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0235]
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
[0236]
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
[0237]
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1