CN104202375B - 同步数据的方法及系统 - Google Patents
同步数据的方法及系统 Download PDFInfo
- Publication number
- CN104202375B CN104202375B CN201410417950.4A CN201410417950A CN104202375B CN 104202375 B CN104202375 B CN 104202375B CN 201410417950 A CN201410417950 A CN 201410417950A CN 104202375 B CN104202375 B CN 104202375B
- Authority
- CN
- China
- Prior art keywords
- data
- server
- cluster
- storage server
- written
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Abstract
本发明公开了一种同步数据的方法及系统,属于网络技术领域。所述方法包括:代理服务器集群接收终端发送的第一写数据请求,第一写数据请求中携带第一待写入数据和第一数据标识;代理服务器集群对第一数据标识进行哈希运算,得到第一待写入数据对应的第一存储服务器的编号;代理服务器集群根据第一存储服务器的编号,将第一写数据请求发送给第一存储服务器;代理服务器集群向队列服务器集群发送第一同步数据请求,第一同步数据请求中携带第一待写入数据和第一数据标识;队列服务器集群将第一同步数据请求发送给第二机房包括的队列服务器集群,以同步多个机房的存储服务器集群中存储的数据。本发明提高了分布式系统的处理性能和可用性。
Description
技术领域
本发明涉及网络技术领域,特别涉及一种同步数据的方法及系统。
背景技术
在多机房、多机器、多进程部署的分布式系统内,可能会对多个业务进程访问的数据进行频繁读写操作处理。同时,为了保证每个机房均可以向业务进程提供服务,需要对每个机房中存储的数据进行同步处理。
目前,同步数据的过程具体可以为:终端向主redis服务器发送写数据请求,该写数据请求中携带待写入数据和数据标识,主redis服务器位于该多个机房中的任一机房。当主redis服务器接收到该写数据请求时,根据该数据标识,对待写入数据执行写操作。此外,该主redis服务器还可以向从redis服务器发送同步数据请求,该同步数据请求中携带待写入数据和该数据标识,且该从redis服务器位于其他机房中,从而同步多个机房中存储的数据。
通过上述方法同步数据时,由于redis服务器同步数据时是单方向的,即,一旦确定主redis服务器和从redis服务器之后,只能将主redis服务器中的数据同步到从redis服务器中,无法将从redis服务器中的数据同步到主redis服务器中;并且,上述方法中每个机房中只包括一个redis服务器,限制了分布式系统的处理性能和可用性。
发明内容
为了解决现有技术的问题,本发明实施例提供了一种同步数据的方法及系统。所述技术方案如下:
第一方面,提供了一种同步数据的方法,所述方法应用于分布式系统中,所述分布式系统包括多个机房,且每个机房中包括代理服务器集群、存储服务器集群和队列服务器集群,所述方法包括:
代理服务器集群接收终端发送的第一写数据请求,所述第一写数据请求中携带第一待写入数据和第一数据标识,所述代理服务器集群位于第一机房中,且所述第一机房为所述多个机房中的任一机房;
所述代理服务器集群对所述第一数据标识进行哈希运算,得到所述第一待写入数据对应的第一存储服务器的编号,所述第一存储服务器包含于存储服务器集群中,所述存储服务器集群也位于所述第一机房中;
所述代理服务器集群根据所述第一存储服务器的编号,将所述第一写数据请求发送给所述第一存储服务器,使所述第一存储服务器根据所述第一数据标识,写入所述第一待写入数据;
所述代理服务器集群向队列服务器集群发送第一同步数据请求,所述第一同步数据请求中携带所述第一待写入数据和所述第一数据标识,所述队列服务器集群也位于所述第一机房中;
当所述队列服务器集群接收到所述第一同步数据请求时,所述队列服务器集群将所述第一同步数据请求发送给第二机房包括的队列服务器集群,以同步所述多个机房的存储服务器集群中存储的数据,所述第二机房为所述多个机房中除所述第一机房之外的机房。
可选地,所述代理服务器集群对所述第一数据标识进行哈希运算,得到所述第一待写入数据对应的第一存储服务器的编号之后,还包括:
所述代理服务器集群根据所述第一存储服务器的编号、所述第一待写入数据和所述第一数据标识,从所述第一存储服务器中获取所述第一待写入数据的元数据;
所述代理服务器集群根据所述元数据,判断是否执行对应的写操作;
如果判断出执行所述写操作,则所述代理服务器集群执行根据所述第一存储服务器的编号,将所述第一写数据请求发送给所述第一存储服务器的步骤。
可选地,所述代理服务器集群根据所述第一存储服务器的编号、所述第一待写入数据和所述第一数据标识,从所述第一存储服务器中获取所述第一待写入数据的元数据,包括:
所述代理服务器集群获取所述第一待写入数据的数据类型;
如果所述第一待写入数据的数据类型为第一数据类型,则所述代理服务器集群根据所述第一存储服务器的编号和所述第一数据标识,从所述第一存储服务器中获取所述第一待写入数据的元数据;
如果所述第一待写入数据的数据类型为第二数据类型,则所述代理服务器集群将所述第一待写入数据拆分为多个待写入子数据,并基于所述多个待写入子数据,将所述第一数据标识拆分为多个数据子标识,所述待写入子数据与所述数据子标识一一对应;
所述代理服务器集群根据所述第一存储服务器的编号和所述多个数据子标识,从所述第一存储服务器中获取所述多个待写入子数据的元数据。
可选地,所述代理服务器集群根据所述第一存储服务器的编号和所述第一数据标识,从所述第一存储服务器中获取所述第一待写入数据的元数据,包括:
所述代理服务器集群根据所述第一存储服务器的编号,向所述第一存储服务器发送第一元数据获取请求,所述第一元数据获取请求中携带所述第一数据标识;
当所述第一存储服务器接收到所述第一元数据获取请求时,所述第一存储服务器根据所述第一数据标识,从数据标识与元数据之间的对应关系中获取对应的元数据;
所述第一存储服务器将获取的所述元数据发送给所述代理服务器集群。
可选地,所述代理服务器集群根据所述第一存储服务器的编号和所述多个数据子标识,从所述第一存储服务器中获取所述多个待写入子数据的元数据,包括:
对于所述多个待写入子数据中的任一待写入子数据,所述代理服务器集群根据所述第一存储服务器的编号,向所述第一存储服务器发送第二元数据获取请求,所述第二元数据获取请求中携带所述待写入子数据对应的数据子标识;
当所述第一存储服务器接收到所述第二元数据获取请求时,所述第一存储服务器根据所述数据子标识,从数据标识与元数据之间的对应关系中获取对应的元数据;
所述第一存储服务器将获取的所述元数据发送给所述代理服务器集群。
可选地,所述代理服务器集群根据所述元数据,判断是否执行对应的写操作,包括:
当所述元数据为本地时间戳时,所述代理服务器集群读取当前时间,并将读取的时间确定为所述写操作的操作时间戳;
所述代理服务器集群比较所述操作时间戳和所述本地时间戳;
如果所述操作时间戳晚于所述本地时间戳,则所述代理服务器集群确定执行所述写操作。
可选地,所述方法还包括:
所述队列服务器集群接收所述第二机房包括的队列服务器集群发送的第二同步数据请求,所述第二同步数据请求中携带第二待写入数据和第二数据标识;
所述队列服务器集群将所述第二同步数据请求发送给所述代理服务器集群;
当所述代理服务器集群接收到所述第二同步数据请求时,所述代理服务器集群对所述第二数据标识进行哈希运算,得到所述第二待写入数据对应的第二存储服务器的编号,所述第二存储服务器包含于所述存储服务器集群中;
所述代理服务器集群根据所述第二存储服务器的编号,向所述第二存储服务器发送第二写数据请求,所述第二写数据请求中携带所述第二待写入数据和所述第二数据标识,使所述第二存储服务器根据所述第二数据标识,写入所述第二待写入数据。
可选地,所述方法还包括:
当部署新机房时,所述存储服务器集群将存储的数据同步给新存储服务器集群;
所述队列服务器集群将缓存的同步数据请求同步给新队列服务器集群;
所述代理服务器集群向所述存储服务器集群发送测试数据写请求,所述测试数据写请求中携带待写入的测试数据和测试数据标识;
当所述存储服务器集群接收到所述测试数据写请求时,所述存储服务器集群根据所述测试数据标识,写入所述待写入的测试数据;
所述存储服务器集群将所述测试数据同步给所述新存储服务器集群,以测试所述新存储服务器中是否同步上所述存储服务器集群中存储的数据;
如果所述新存储服务器集群中同步上所述存储服务器集群中存储的数据,则启动新代理服务器集群,并基于所述新存储服务器集群同步的数据,处理所述新队列服务器集群中的同步数据请求;
其中,所述新存储服务器集群、所述新队列服务器集群和所述新代理服务器集群位于所述新机房中。
第二方面,提供了一种分布式系统中,所述分布式系统包括多个机房,且每个机房中包括代理服务器集群、存储服务器集群和队列服务器集群,
代理服务器集群,用于接收终端发送的第一写数据请求,所述第一写数据请求中携带第一待写入数据和第一数据标识,所述代理服务器集群位于第一机房中,且所述第一机房为所述多个机房中的任一机房;
所述代理服务器集群,还用于对所述第一数据标识进行哈希运算,得到所述第一待写入数据对应的第一存储服务器的编号,所述第一存储服务器包含于存储服务器集群中,所述存储服务器集群也位于所述第一机房中;
所述代理服务器集群,还用于根据所述第一存储服务器的编号,将所述第一写数据请求发送给所述第一存储服务器,使所述第一存储服务器根据所述第一数据标识,写入所述第一待写入数据;
所述代理服务器集群,还用于向队列服务器集群发送第一同步数据请求,所述第一同步数据请求中携带所述第一待写入数据和所述第一数据标识,所述队列服务器集群也位于所述第一机房中;
当所述队列服务器集群,用于接收到所述第一同步数据请求时,所述队列服务器集群将所述第一同步数据请求发送给第二机房包括的队列服务器集群,以同步所述多个机房的存储服务器集群中存储的数据,所述第二机房为所述多个机房中除所述第一机房之外的机房。
可选地,
所述代理服务器集群,还用于根据所述第一存储服务器的编号、所述第一待写入数据和所述第一数据标识,从所述第一存储服务器中获取所述第一待写入数据的元数据;
所述代理服务器集群,还用于根据所述元数据,判断是否执行对应的写操作;
所述代理服务器集群,还用于如果判断出执行所述写操作,则执行根据所述第一存储服务器的编号,将所述第一写数据请求发送给所述第一存储服务器的步骤。
可选地,
所述代理服务器集群,还用于获取所述第一待写入数据的数据类型;
所述代理服务器集群,还用于如果所述第一待写入数据的数据类型为第一数据类型,则根据所述第一存储服务器的编号和所述第一数据标识,从所述第一存储服务器中获取所述第一待写入数据的元数据;
所述代理服务器集群,还用于如果所述第一待写入数据的数据类型为第二数据类型,则将所述第一待写入数据拆分为多个待写入子数据,并基于所述多个待写入子数据,将所述第一数据标识拆分为多个数据子标识,所述待写入子数据与所述数据子标识一一对应;
所述代理服务器集群,还用于根据所述第一存储服务器的编号和所述多个数据子标识,从所述第一存储服务器中获取所述多个待写入子数据的元数据。
可选地,
所述代理服务器集群,还用于根据所述第一存储服务器的编号,向所述第一存储服务器发送第一元数据获取请求,所述第一元数据获取请求中携带所述第一数据标识;
所述第一存储服务器,用于当所述第一存储服务器接收到所述第一元数据获取请求时,根据所述第一数据标识,从数据标识与元数据之间的对应关系中获取对应的元数据;
所述第一存储服务器,还用于将获取的所述元数据发送给所述代理服务器集群。
可选地,
所述代理服务器集群,还用于对于所述多个待写入子数据中的任一待写入子数据,根据所述第一存储服务器的编号,向所述第一存储服务器发送第二元数据获取请求,所述第二元数据获取请求中携带所述待写入子数据对应的数据子标识;
所述第一存储服务器,还用于当所述第一存储服务器接收到所述第二元数据获取请求时,根据所述数据子标识,从数据标识与元数据之间的对应关系中获取对应的元数据;
所述第一存储服务器,还用于将获取的所述元数据发送给所述代理服务器集群。
可选地,
所述代理服务器集群,还用于当所述元数据为本地时间戳时,读取当前时间,并将读取的时间确定为所述写操作的操作时间戳;
所述代理服务器集群,还用于比较所述操作时间戳和所述本地时间戳;
所述代理服务器集群,还用于如果所述操作时间戳晚于所述本地时间戳,则确定执行所述写操作。
可选地,所述系统还包括:
所述队列服务器集群,还用于接收所述第二机房包括的队列服务器集群发送的第二同步数据请求,所述第二同步数据请求中携带第二待写入数据和第二数据标识;
所述队列服务器集群,还用于将所述第二同步数据请求发送给所述代理服务器集群;
所述代理服务器集群,还用于当所述代理服务器集群接收到所述第二同步数据请求时,对所述第二数据标识进行哈希运算,得到所述第二待写入数据对应的第二存储服务器的编号,所述第二存储服务器包含于所述存储服务器集群中;
所述代理服务器集群,还用于根据所述第二存储服务器的编号,向所述第二存储服务器发送第二写数据请求,所述第二写数据请求中携带所述第二待写入数据和所述第二数据标识,使所述第二存储服务器根据所述第二数据标识,写入所述第二待写入数据。
可选地,所述系统还包括:
所述存储服务器集群,还用于当部署新机房时,将存储的数据同步给新存储服务器集群;
所述队列服务器集群,还用于将缓存的同步数据请求同步给新队列服务器集群;
所述代理服务器集群,还用于向所述存储服务器集群发送测试数据写请求,所述测试数据写请求中携带待写入的测试数据和测试数据标识;
所述存储服务器集群,还用于当所述存储服务器集群接收到所述测试数据写请求时,根据所述测试数据标识,写入所述待写入的测试数据;
所述存储服务器集群,还用于将所述测试数据同步给所述新存储服务器集群,以测试所述新存储服务器中是否同步上所述存储服务器集群中存储的数据;
新代理服务器集群,还用于如果所述新存储服务器集群中同步上所述存储服务器集群中存储的数据,则启动,并基于所述新存储服务器集群同步的数据,处理所述新队列服务器集群中的同步数据请求;
其中,所述新存储服务器集群、所述新队列服务器集群和所述新代理服务器集群位于所述新机房中。
在本发明实施例中,对于多个机房中的任一机房,当该机房中的代理服务器集群接收到终端发送的第一写数据请求时,代理服务器集群不仅可以将该第一写数据请求发送给该机房中的存储服务器集群,使存储服务器集群对该第一写数据请求进行处理,还可以基于第一写数据请求,向该机房中的队列服务器集群发送第一同步数据请求,使该队列服务器集群将该第一同步数据请求发送给其他机房中的队列服务器集群,如此,实现多个机房中存储的数据的互相同步,即,不仅可以将第一机房包括的存储服务器集群中的数据同步到第二机房包括的存储服务器集群中,还可以将第二机房包括的存储服务器集群中的数据同步到第一机房包括的存储服务器集群中。另外,本发明实施例采用代理服务器集群、存储服务器集群和队列服务器集群,相比单个服务器,提高了分布式系统处理数据请求的处理性能,并且当这些集群中的某个服务器出现故障时,还可以由该集群中的其他服务器进行替代,提高了分布式系统的可用性。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种同步数据的系统架构图;
图2是本发明实施例提供的一种同步数据的方法流程图;
图3是本发明实施例提供的另一种同步数据的方法流程图;
图4是本发明实施例提供的一种同步数据的系统结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
图1是本发明实施例提供的一种同步数据的系统机构图。该系统包括终端侧和网络侧,网络侧可以部署为分布式系统。该分布式系统可以包括多个机房,每个机房中包括代理服务器集群、队列服务器集群和存储服务器集群。对于该多个机房中的任一机房,终端可以与该机房中的代理服务器集群之间通过网络连接,该代理服务器集群与该机房中的队列服务器集群之间连接,该代理服务器集群还与该机房中的存储服务器集群之间连接,且任意两个机房中的队列服务器集群之间也连接,以实现两个机房的连接。
其中,终端中可以安装并运行多个业务进程,当终端运行业务进程时可以与网络侧进行交互,使网络侧为该业务提供服务。代理服务器集群用于对终端交互时发送的请求进行初步处理,并隔离终端与存储服务器,当存储服务器中存在业务进程的数据变化时,不影响终端中的业务进程。队列服务器集群用于同步两个机房之间的数据。存储服务器用于存储业务进程对应的数据。
图2是本发明实施例提供的一种同步数据的方法流程图。方法应用于分布式系统中,该分布式系统包括多个机房,且每个机房中包括一个代理服务器集群、一个存储服务器集群和一个队列服务器集群。参见图2,该方法包括:
步骤201:代理服务器集群接收终端发送的第一写数据请求,第一写数据请求中携带第一待写入数据和第一数据标识,代理服务器集群位于第一机房中,且第一机房为多个机房中的任一机房。
步骤202:代理服务器集群对第一数据标识进行哈希运算,得到第一待写入数据对应的第一存储服务器的编号,第一存储服务器包含于存储服务器集群中,存储服务器集群也位于第一机房中。
步骤203:代理服务器集群根据第一存储服务器的编号,将第一写数据请求发送给第一存储服务器,使第一存储服务器根据第一数据标识,写入第一待写入数据。
步骤204:代理服务器集群向队列服务器集群发送第一同步数据请求,第一同步数据请求中携带第一待写入数据和第一数据标识,队列服务器集群也位于第一机房中。
步骤205:当队列服务器集群接收到第一同步数据请求时,队列服务器集群将第一同步数据请求发送给第二机房包括的队列服务器集群,以同步多个机房的存储服务器集群中存储的数据,第二机房为多个机房中除第一机房之外的机房。
在本发明实施例中,对于多个机房中的任一机房,当该机房中的代理服务器集群接收到终端发送的第一写数据请求时,代理服务器集群不仅可以将该第一写数据请求发送给该机房中的存储服务器集群,使存储服务器集群对该第一写数据请求进行处理,还可以基于第一写数据请求,向该机房中的队列服务器集群发送第一同步数据请求,使该队列服务器集群将该第一同步数据请求发送给其他机房中的队列服务器集群,如此,实现多个机房中存储的数据的互相同步,即,不仅可以将第一机房包括的存储服务器集群中的数据同步到第二机房包括的存储服务器集群中,还可以将第二机房包括的存储服务器集群中的数据同步到第一机房包括的存储服务器集群中。另外,本发明实施例采用代理服务器集群、存储服务器集群和队列服务器集群,相比单个服务器,提高了分布式系统处理数据请求的处理性能,并且当这些集群中的某个服务器出现故障时,还可以由该集群中的其他服务器进行替代,提高了分布式系统的可用性。
可选地,代理服务器集群对第一数据标识进行哈希运算,得到第一待写入数据对应的第一存储服务器的编号之后,还包括:
代理服务器集群根据第一存储服务器的编号、第一待写入数据和第一数据标识,从第一存储服务器中获取第一待写入数据的元数据;
代理服务器集群根据元数据,判断是否执行对应的写操作;
如果判断出执行写操作,则代理服务器集群执行根据第一存储服务器的编号,将第一写数据请求发送给第一存储服务器的步骤。
可选地,代理服务器集群根据第一存储服务器的编号、第一待写入数据和第一数据标识,从第一存储服务器中获取第一待写入数据的元数据,包括:
代理服务器集群获取第一待写入数据的数据类型;
如果第一待写入数据的数据类型为第一数据类型,则代理服务器集群根据第一存储服务器的编号和第一数据标识,从第一存储服务器中获取第一待写入数据的元数据;
如果第一待写入数据的数据类型为第二数据类型,则代理服务器集群将第一待写入数据拆分为多个待写入子数据,并基于多个待写入子数据,将第一数据标识拆分为多个数据子标识,待写入子数据与数据子标识一一对应;
代理服务器集群根据第一存储服务器的编号和多个数据子标识,从第一存储服务器中获取多个待写入子数据的元数据。
可选地,代理服务器集群根据第一存储服务器的编号和第一数据标识,从第一存储服务器中获取第一待写入数据的元数据,包括:
代理服务器集群根据第一存储服务器的编号,向第一存储服务器发送第一元数据获取请求,第一元数据获取请求中携带第一数据标识;
当第一存储服务器接收到第一元数据获取请求时,第一存储服务器根据第一数据标识,从数据标识与元数据之间的对应关系中获取对应的元数据;
第一存储服务器将获取的元数据发送给代理服务器集群。
可选地,代理服务器集群根据第一存储服务器的编号和多个数据子标识,从第一存储服务器中获取多个待写入子数据的元数据,包括:
对于多个待写入子数据中的任一待写入子数据,代理服务器集群根据第一存储服务器的编号,向第一存储服务器发送第二元数据获取请求,第二元数据获取请求中携带待写入子数据对应的数据子标识;
当第一存储服务器接收到第二元数据获取请求时,第一存储服务器根据数据子标识,从数据标识与元数据之间的对应关系中获取对应的元数据;
第一存储服务器将获取的元数据发送给代理服务器集群。
可选地,代理服务器集群根据获取的元数据,判断是否执行对应的写操作,包括:
当元数据为本地时间戳时,代理服务器集群读取当前时间,并将读取的时间确定为写操作的操作时间戳;
代理服务器集群比较操作时间戳和本地时间戳;
如果操作时间戳晚于本地时间戳,则代理服务器集群确定执行写操作。
可选地,该方法还包括:
队列服务器集群接收第二机房包括的队列服务器集群发送的第二同步数据请求,第二同步数据请求中携带第二待写入数据和第二数据标识;
队列服务器集群将第二同步数据请求发送给代理服务器集群;
当代理服务器集群接收到第二同步数据请求时,代理服务器集群对第二数据标识进行哈希运算,得到第二待写入数据对应的第二存储服务器的编号,第二存储服务器包含于存储服务器集群中;
代理服务器集群根据第二存储服务器的编号,向第二存储服务器发送第二写数据请求,第二写数据请求中携带第二待写入数据和第二数据标识,使第二存储服务器根据第二数据标识,写入第二待写入数据。
可选地,该方法还包括:
当部署新机房时,存储服务器集群将存储的数据同步给新存储服务器集群;
队列服务器集群将缓存的同步数据请求同步给新队列服务器集群;
代理服务器集群向存储服务器集群发送测试数据写请求,测试数据写请求中携带待写入的测试数据和测试数据标识;
当存储服务器集群接收到测试数据写请求时,存储服务器集群根据测试数据标识,写入待写入的测试数据;
存储服务器集群将测试数据同步给新存储服务器集群,以测试新存储服务器中是否同步上存储服务器集群中存储的数据;
如果新存储服务器集群中同步上存储服务器集群中存储的数据,则启动新代理服务器集群,并基于新存储服务器集群同步的数据,处理新队列服务器集群中的同步数据请求;
其中,新存储服务器集群、新队列服务器集群和新代理服务器集群位于新机房中。
上述所有可选技术方案,均可按照任意结合形成本发明的可选实施例,在此不再一一赘述。
图3是本发明实施例提供的一种同步数据的方法流程图。该方法应用于分布式系统中,该分布式系统包括多个机房,且每个机房中包括代理服务器集群、存储服务器集群和队列服务器集群。每个机房中的代理服务器集群、存储服务器集群和队列服务器集群可以是单独的服务器集群,也可以是同一服务器上的不同功能模块。参见图3,该方法包括:
步骤301:终端加载本地配置文件,并从本地配置文件中获取需要访问的代理服务器集群的标识。
其中,在终端中可以对于不同的业务进程,事先存储不同的本地配置文件。且本地配置文件是存储在指定目录下的。当终端运行安装的任一业务进程时,终端可以根据该业务进程对应的指定目录,查找该业务进程对应的本地配置文件。当查找到对应的本地配置文件时,该终端可以加载该本地配置文件,并从该本地配置文件中获取需要访问的代理服务器集群的标识。
其中,代理服务器集群的标识可以为该代理服务器集群在分布式系统包括的代理服务器集群中的编号,还可以为该代理服务器集群所在机房的编号,当然,还可以为该代理服务器集群的名称,本发明实施例对此不做具体限定。
需要补充说明的是,本地配置文件中不仅存储终端需要访问的代理服务器集群的标识,还可以存储该业务进程运行过程中需要的其他配置信息。由于其他配置信息在本发明实施例中并未涉及,所以,在此不再对其他配置信息进行一一阐述。
另外,在分布式系统中也可以不用部署多个代理服务器进行集群化处理,可以只部署一个代理服务器。但是,当业务进程较多时,考虑到代理服务器的负载问题,可以优选地部署多个代理服务器构成代理服务器集群。当部署多个代理服务器时,如果某个代理服务器宕机,其他的代理服务器还可以继续提供服务,提高了分布式系统的可用性。
步骤302:终端根据该代理服务器集群的标识,向该代理服务器集群发送第一写数据请求,第一写数据请求中携带第一待写入数据和第一数据标识,该代理服务器集群位于第一机房中,且第一机房为多个机房中的任一机房。
具体地,终端根据该代理服务器集群的标识,通过终端提供的访问接口向该代理服务器集群发送第一写数据请求。
其中,终端可以提供一个访问接口,当终端发送消息时,可以通过该访问接口进行发送。
另外,写数据请求对应写操作,而写操作可以包括插入操作、更新操作和删除操作。其中,当写操作为删除操作时,第一待写入数据可以为空。
其中,第一数据标识可以为第一待写入数据的地址,也可以为第一待写入数据的名称,本发明实施例对此不做具体限定。
步骤303:当代理服务器集群接收到该第一写数据请求时,代理服务器集群对第一数据标识进行哈希运算,得到第一待写入数据对应的第一存储服务器的编号,第一存储服务器包含于存储服务器集群中,该存储服务器集群也位于第一机房中。
具体地,当代理服务器集群接收到第一写数据请求时,代理服务器集群可以对第一数据标识进行哈希运算,得到运算数值。将运算数值确定为第一待写入数据对应的第一存储服务器的编号。
其中,存储服务器集群中包括多个存储服务器,可以事先对该多个存储服务器进行编号。当代理服务器集群对第一数据标识进行哈希运算,得到第一存储服务器的编号时,可以将第一待写入数据写入第一存储服务器,如此,保证同一个数据标识对应的数据,可以写入同一个存储服务器中,减少了时间冲突。
由于代理服务器集群中部署了多个代理服务器,所以,可以通过轮询的方式均衡每个代理服务器的负载。比如,该代理服务器集群中包括3个代理服务器,当接收到第一个写数据请求时,可以分配代理服务器1对该写数据请求进行处理;当接收到第二个写数据请求时,可以分配代理服务器2对该写数据请求进行处理;当接收到第三个写数据请求时,可以分配代理服务器3对该写数据请求进行处理。
步骤304:代理服务器集群根据第一存储服务器的编号、第一待写入数据和第一数据标识,从第一存储服务器中获取第一待写入数据的元数据。
具体地,本步骤可以通过如下(1)-(4)的步骤来实现,包括:
(1)、代理服务器集群获取第一待写入数据的数据类型。
具体地,代理服务器集群可以对第一待写入数据进行类型检测,得到第一待写入数据的数据类型。
其中,在本发明实施例中,数据类型可以包括第一数据类型和第二数据类型。第一数据类型为最基本的非集合数据类型,比如,string类型。第二数据类型为集合数据类型,比如,set、sorted set、hash等类型。
(2)、如果第一待写入数据的数据类型为第一数据类型,则代理服务器集群根据第一存储服务器的编号和第一数据标识,从第一存储服务器中获取第一待写入数据的元数据。
具体地,如果第一待写入数据的数据类型为第一数据类型,则代理服务器集群根据第一存储服务器的编号,向第一存储服务器发送第一元数据获取请求,第一元数据获取请求中携带第一数据标识。当第一存储服务器接收到第一元数据获取请求时,第一存储服务器根据第一数据标识,从数据标识与元数据之间的对应关系中获取对应的元数据。第一存储服务器将获取的元数据发送给代理服务器集群。
其中,元数据是对第一待写入数据进行描述的数据,也就是说,是第一待写入数据的属性数据,用于管理第一待写入数据。例如,元数据可以为数据长度、时间戳等等。本发明实施例以元数据为时间戳为例进行说明。
例如,第一存储服务器的编号为2,则代理服务器集群根据第一存储服务器的编号2,向第一存储服务器发送第一元数据获取请求,第一元数据获取请求中携带第一数据标识key0。当第一存储服务器接收到第一元数据获取请求时,第一存储服务器根据第一数据标识key0,可以从如下表1所示的数据标识与元数据之间的对应关系中获取对应的元数据为2014.6.23-14:00。第一存储服务器可以将获取的元数据2014.6.23-14:00发送给代理服务器集群。
表1
数据标识 | 元数据 |
key0 | 2014.6.23-14:00 |
key1 | 2014.6.23-5:12 |
key2 | 2014.6.23-5:13 |
key3 | 2014.6.23-5:15 |
需要补充说明的是,在实际应用中,上述表1中时间的精确度可以达到微秒的64位整数,而在本发明实施例中,为了举例方便,仅以上述表1中的时间精确度为例进行说明。
(3)、如果第一待写入数据的数据类型为第二数据类型,则代理服务器集群将第一待写入数据拆分为多个待写入子数据,并基于多个待写入子数据,将第一数据标识拆分为多个数据子标识,待写入子数据与数据子标识一一对应。
其中,当第一待写入数据的数据类型为第二数据类型时,则表明第一待写入数据是一个数据集合,也就是说,第一待写入数据中包括多个待写入子数据,该多个待写入子数据是针对多个成员的单独写操作对应的数据。所以,可以基于每个成员,将第一待写入数据拆分为多个待写入子数据,并基于多个待写入子数据,将第一数据标识拆分为多个数据子标识。其中,待写入子数据与数据子标识一一对应。
例如,第一待写入数据为数据集合{value1、value2、value3},代理服务器集群将第一待写入数据拆分为3个待写入子数据value1、value2和value3。同时,基于该3个待写入子数据,将第一数据标识{key1、key2、key3}拆分为3个数据子标识key1、key2和key3。其中,value1和key1对应,value2和key2对应,value3和key3对应。
(4)、代理服务器集群根据第一存储服务器的编号和多个数据子标识,从第一存储服务器中获取多个待写入子数据的元数据。
具体地,对于多个待写入子数据中的任一待写入子数据,代理服务器集群根据第一存储服务器的编号,向第一存储服务器发送第二元数据获取请求,第二元数据获取请求中携带待写入子数据对应的数据子标识;当第一存储服务器接收到第二元数据获取请求时,第一存储服务器根据数据子标识,从数据标识与元数据之间的对应关系中获取对应的元数据;第一存储服务器将获取的元数据发送给代理服务器集群。
其中,对于多个待写入子数据中的其他待写入子数据,也可以按照上述方法获取其对应的元数据,在此不再详细赘述。
例如,对于3个待写入子数据中的待写入子数据value2,代理服务器集群根据第一存储服务器的编号2,向第一存储服务器发送第二元数据获取请求,第二元数据获取请求中携带待写入子数据value2对应的数据子标识key2。当第一存储服务器接收到第二元数据获取请求时,第一存储服务器根据数据标识key2,从上述表1所述的数据标识与元数据之间的对应关系中获取对应的元数据为2014.6.23-5:13。第一存储服务将获取的元数据2014.6.23-5:13发送给代理服务器集群。
步骤305:代理服务器集群根据获取的元数据,判断是否执行对应的写操作。
具体地,当元数据为本地时间戳时,代理服务器集群读取当前时间,并将读取的时间确定为写操作的操作时间戳;代理服务器集群比较操作时间戳和本地时间戳;如果操作时间戳晚于本地时间戳,则代理服务器集群确定执行写操作。
其中,该写操作为第一写数据请求对应的操作。
进一步地,如果操作时间戳早于本地时间戳,则代理服务器集群确定不执行该写操作。该代理服务器集群直接将该写操作丢弃,也即是,直接将第一写数据请丢弃。
基于上述第一待写入数据的数据类型为第一数据类型的例子,第一待写入数据的元数据为2014.6.23-14:00,此时,代理服务器集群读取当前时间为2014.6.25-10:00,也即是,写操作的操作时间戳为2014.6.25-10:00,操作时间戳2014.6.25-10:00晚于本地时间戳2014.6.23-14:00,则代理服务器集群确定执行该写操作。
进一步地,如果操作时间戳晚于本地时间戳,则代理服务器集群确定执行写操作之后,还包括:代理服务器集群将操作时间戳发送给第一存储服务器,使第一存储服务器将本地时间戳替换为操作时间戳。
需要说明的是,第一存储服务器将本地时间戳替换为操作时间戳可以在此步骤执行,还可以在写入第一待写入数据之后执行,本发明实施例对此不做具体限定。
延续上述例子,代理服务器集群将操作时间戳2014.6.25-10:00发送给第一存储服务器。当第一存储服务器接收到该操作时间戳2014.6.25-10:00,第一存储服务器根据第一数据标识key0,将上述表1中,第一数据标识key0对应的元数据,也即是,第一数据标识key0对应的本地时间戳2014.6.23-14:00替换为操作时间戳2014.6.25-10:00,如下表2所示。
表2
数据标识 | 元数据 |
key0 | 2014.6.25-10:00 |
key1 | 2014.6.23-5:12 |
key2 | 2014.6.23-5:13 |
key3 | 2014.6.23-5:15 |
步骤306:如果判断出执行该写操作,则代理服务器集群根据第一存储服务器的编号,将第一写数据请求发送给第一存储服务器。
其中,代理服务器集群可以通过网络协议接口,根据第一存储服务器的编号,将第一写数据请求发送给第一存储服务器。
步骤307:当第一存储服务器接收到第一写数据请求时,第一存储服务器根据第一数据标识,写入第一待写入数据。
其中,第一存储服务器可以为redis服务器,由于redis服务器是将数据存储在内存中,可以快速地实现数据的访问。所以,当第一存储服务器接收到第一写数据请求时,第一存储服务器可以根据第一数据标识,将第一待写入数据写入内存中,可以提高数据访问的速度,进而提高数据访问的效率和分布式系统的处理性能。
其中,当该写操作为插入操作时,可以直接根据第一数据标识,将第一待写入数据写入第一存储服务器的内存中。当该写操作为更新操作时,可以根据第一数据标识,从第一存储器的内存中获取对应的数据,将获取的数据替换为第一待写入数据。当该写操作为删除操作时,可以根据第一数据标识,从第一存储的内存中获取对应的数据,并将获取的数据删除。
进一步地,当第一存储服务器写入第一待写入数据之后,第一存储服务器可以向代理服务器集群发送写数据响应消息,使代理服务器集群将该写数据响应消息发送给终端,以确定写数据成功。
步骤308:代理服务器集群向队列服务器集群发送第一同步数据请求,第一同步数据请求中携带第一待写入数据和第一数据标识,该队列服务器集群也位于第一机房中。
队列服务器集群中包括多个队列服务器,每个队列服务器中均包括一个消息队列,为了保证同步数据请求不丢失,当队列服务器接收到第一同步数据请求时,该队列服务器可以将第一同步数据请求缓存到该消息队列中。其中,队列服务器中的消息队列是存储在硬盘中的,实现了对同步数据请求的持久化,防止队列服务器重启后同步数据请求丢失,提高了同步数据的可靠性。
另外,代理服务器集群可以将第一同步数据请求发送给队列服务器集群中的任一队列服务器。当该队列服务器接收到第一同步数据请求时,该队列服务器可以将第一同步数据请求发送给其他的队列服务器,实现消息队列在队列服务器集群中的镜像,防止某个队列服务器宕机时无法同步数据,更进一步提高同步数据的可靠性。
其中,当队列服务器集群中的某个队列服务器宕机时,在宕机期间,可以由其他队列服务器继续提供服务。当该队列服务器宕机恢复后,其他的队列服务器可以将恢复时间之后的同步数据请求发送给该队列服务器,并在其他的队列服务器将宕机期间的同步数据请求处理完成之后,该队列服务器也可以开始继续提供服务。
可选地,第一同步数据请求中还可以携带操作时间戳。
需要补充说明的是,步骤308可以在步骤303之后的任一步骤执行,也可以与步骤303同时执行,在本发明实施例中,以在第一存储服务器中执行完写操作之后执行步骤308为例进行说明。
步骤309:当队列服务器集群接收到第一同步数据请求时,该队列服务器集群将第一同步数据请求发送给第二机房包括的队列服务器集群,以同步多个机房的存储服务器集群中存储的数据,第二机房为该多个机房中除第一机房之外的机房。
进一步地,当队列服务器集群接收到该第一同步数据请求时,该队列服务器集群可以向代理服务器集群发送同步数据响应,以确定同步数据成功。
进一步地,该队列服务器集群不仅可以向第二机房同步数据,当然,还可以同步第二机房中的数据,具体为:队列服务器集群接收第二机房包括的队列服务器集群发送的第二同步数据请求,第二同步数据请求中携带第二待写入数据和第二数据标识;队列服务器集群将第二同步数据请求发送给代理服务器集群;当代理服务器集群接收到第二同步数据请求时,代理服务器集群对第二数据标识进行哈希运算,得到第二待写入数据对应的第二存储服务器的编号,第二存储服务器包含于存储服务器集群中;代理服务器集群根据第二存储服务器的编号,向第二存储服务器发送第二写数据请求,第二写数据请求中携带第二待写入数据和第二数据标识,使第二存储服务器根据第二数据标识,写入第二待写入数据。
其中,代理服务器集群根据第二存储服务器的编号,向第二存储服务器发送第二写数据请求之前,代理服务器集群还可以根据第二存储服务器的编号、第二待写入数据和第一数据标识,从第二存储服务器中获取第二待写入数据的元数据;然后,根据第二待写入数据的元数据,判断是否执行对应的写操作等步骤。而上述这些步骤的具体实现方式,与步骤304和步骤305中的方法同理,在此不再详细赘述。
需要补充说明的是,第二同步数据请求中有可能携带本地时间戳,所以,在此可以不用获取第二待写入数据的元数据,直接判定是否执行对应的写操作步骤即可。
进一步地,当业务较多时,现有的机房不够用,可以部署新的机房,实现对分布式系统的升级扩容,具体地,该升级扩容的方法为如下(1)-(6)的步骤,包括:
(1)、当部署新机房时,存储服务器集群将存储的数据同步给新存储服务器集群。
具体地,当部署新机房时,存储服务器集群可以通过消息的方式,将存储的数据同步给新存储服务器集群。
其中,存储服务器集群将存储的数据同步给新存储服务器集群的方式包括多种,在本发明实施例对此不进行详细阐述。
(2)、队列服务器集群将缓存的同步数据请求同步给新队列服务器集群。
具体地,队列服务器集群可以按照缓存的同步数据请求的顺序,将缓存的同步数据请求同步给新队列服务器集群。
(3)、代理服务器集群向存储服务器集群发送测试数据写请求,测试数据写请求中携带待写入的测试数据和测试数据标识。
其中,待写入的测试数据可以为任一个数据,本发明实施例对此不做具体限定。
(4)、当存储服务器集群接收到测试数据写请求时,存储服务器集群根据测试数据标识,写入待写入的测试数据。
其中,代理服务器集群可以将测试数据写请求发送给存储服务器集群中的任一个存储服务器。当该存储服务器接收到该测试数据写请求时,根据测试数据标识,写入待写入的测试数据的方法与写入第一待写入数据的方法同理。
(5)、存储服务器集群将测试数据同步给新存储服务器集群,以测试新存储服务器中是否同步上存储服务器集群中存储的数据。
具体地,存储服务器集群将测试数据同步给新存储服务器集群之后,存储服务器集群可以根据测试数据标识,从新存储服务器集群中读取对应的测试数据。判断读取的测试数据和待写入的测试数据是否相同,如果两者相同,则确定新存储服务器集群中同步上了存储服务器集群中存储的数据。如果两者不同,则确定新存储服务器集群中没有同步上存储服务器集群中存储的数据。
(6)、如果新存储服务器集群中同步上存储服务器集群中存储的数据,则启动新代理服务器集群,并基于新存储服务器集群同步的数据,处理新队列服务器集群中的同步数据请求。
其中,新存储服务器集群、新队列服务器集群和新代理服务器集群位于新机房中。
其中,在本发明实施例中,当第一机房的代理服务器集群中的某个代理服务器宕机时,或者,第一机房中的网络不可用时,可以配置该业务进程访问第二机房,使第二机房为该业务进程提供服务。当该代理服务器宕机恢复后,可以按照上述升级扩容的方法对第一机房中的代理服务器集群、存储服务器集群和队列服务器集群进行处理,在此不再进行详细阐述。
进一步地,本发明实施例不仅可以通过上述方法处理终端的写数据请求,还可以处理终端的读数据请求,具体为:终端根据需要访问的代理服务器集群的标识,向该代理服务器集群发送读数据请求,该读数据请求中携带第三数据标识。当代理服务器集群接收到该读数据请求时,该代理服务器集群对第三数据标识进行哈希运算,得到该第三数据标识对应的第三存储服务器的编号。该代理服务器集群根据第三存储服务器的编号,将该读数据请求发送给第三存储服务器。当第三存储服务器接收到该读数据请求时,第三存储服务器根据第三数据标识,从内存中读取该第三数据标识对应的数据,并将读取的数据发送给代理服务器集群,使代理服务器集群将读取的数据发送给该终端。
其中,本发明实施例提供的分布式系统中,存储服务器集群可以采用redis服务器,redis服务器可以提供高速度的数据访问,并且采用代理服务器集群对读写数据请求进行初步处理,以及采用队列服务器对写数据请求进行同步,从而可以支撑业务运营时对大量数据的频繁读写。
优选地,在本发明实施例中,各个机房中的代理服务器集群可以定期在存储服务集群中随机抽取预设数值个数据标识,并根据抽取的数据标识,读取对应的数据。然后,分别比较各个机房中读取的数据,如果读取的数据存在不同,则可以人为地进行校正,保证数据的一致性。
在本发明实施例中,对于多个机房中的任一机房,当该机房中的代理服务器集群接收到终端发送的第一写数据请求时,代理服务器集群不仅可以将该第一写数据请求发送给该机房中的存储服务器集群,使存储服务器集群对该第一写数据请求进行处理,还可以基于第一写数据请求,向该机房中的队列服务器集群发送第一同步数据请求,使该队列服务器集群将该第一同步数据请求发送给其他机房中的队列服务器集群,如此,实现多个机房中存储的数据的互相同步,即,不仅可以将第一机房包括的存储服务器集群中的数据同步到第二机房包括的存储服务器集群中,还可以将第二机房包括的存储服务器集群中的数据同步到第一机房包括的存储服务器集群中。另外,本发明实施例采用代理服务器集群、存储服务器集群和队列服务器集群,相比单个服务器,提高了分布式系统处理数据请求的处理性能,并且当这些集群中的某个服务器出现故障时,还可以由该集群中的其他服务器进行替代,提高了分布式系统的可用性。
图4是本发明实施例提供的一种同步数据的系统,该系统应用于分布式系统中,分布式系统包括多个机房,且每个机房中包括代理服务器集群、存储服务器集群和队列服务器集群,该系统包括:代理服务器集群401、存储服务器集群402和队列服务器集群403;
代理服务器集群401,用于接收终端发送的第一写数据请求,第一写数据请求中携带第一待写入数据和第一数据标识,代理服务器集群位于第一机房中,且第一机房为多个机房中的任一机房;
代理服务器集群401,还用于对第一数据标识进行哈希运算,得到第一待写入数据对应的第一存储服务器的编号,第一存储服务器包含于存储服务器集群中,存储服务器集群也位于第一机房中;
代理服务器集群401,还用于根据第一存储服务器的编号,将第一写数据请求发送给第一存储服务器,使第一存储服务器根据第一数据标识,写入第一待写入数据;
代理服务器集群401,还用于向队列服务器集群发送第一同步数据请求,第一同步数据请求中携带第一待写入数据和第一数据标识,队列服务器集群也位于第一机房中;
当队列服务器集群403,用于接收到第一同步数据请求时,队列服务器集群将第一同步数据请求发送给第二机房包括的队列服务器集群,以同步多个机房的存储服务器集群中存储的数据,第二机房为多个机房中除第一机房之外的机房。
可选地,
代理服务器集群401,还用于根据第一存储服务器的编号、第一待写入数据和第一数据标识,从第一存储服务器中获取第一待写入数据的元数据;
代理服务器集群401,还用于根据元数据,判断是否执行对应的写操作;
代理服务器集群401,还用于如果判断出执行写操作,则执行根据第一存储服务器的编号,将第一写数据请求发送给第一存储服务器的步骤。
可选地,
代理服务器集群401,还用于获取第一待写入数据的数据类型;
代理服务器集群401,还用于如果第一待写入数据的数据类型为第一数据类型,则根据第一存储服务器的编号和第一数据标识,从第一存储服务器中获取第一待写入数据的元数据;
代理服务器集群401,还用于如果第一待写入数据的数据类型为第二数据类型,则将第一待写入数据拆分为多个待写入子数据,并基于多个待写入子数据,将第一数据标识拆分为多个数据子标识,待写入子数据与数据子标识一一对应;
代理服务器集群401,还用于根据第一存储服务器的编号和多个数据子标识,从第一存储服务器中获取多个待写入子数据的元数据。
可选地,
代理服务器集群401,还用于根据第一存储服务器的编号,向第一存储服务器发送第一元数据获取请求,第一元数据获取请求中携带第一数据标识;
第一存储服务器,用于当第一存储服务器接收到第一元数据获取请求时,根据第一数据标识,从数据标识与元数据之间的对应关系中获取对应的元数据;
第一存储服务器,还用于将获取的元数据发送给代理服务器集群。
可选地,
代理服务器集群401,还用于对于多个待写入子数据中的任一待写入子数据,根据第一存储服务器的编号,向第一存储服务器发送第二元数据获取请求,第二元数据获取请求中携带待写入子数据对应的数据子标识;
第一存储服务器,还用于当第一存储服务器接收到第二元数据获取请求时,根据数据子标识,从数据标识与元数据之间的对应关系中获取对应的元数据;
第一存储服务器,还用于将获取的元数据发送给代理服务器集群。
可选地,
代理服务器集群401,还用于当元数据为本地时间戳时,读取当前时间,并将读取的时间确定为写操作的操作时间戳;
代理服务器集群401,还用于比较操作时间戳和本地时间戳;
代理服务器集群401,还用于如果操作时间戳晚于本地时间戳,则确定执行写操作。
可选地,该系统还包括:
队列服务器集群403,还用于接收第二机房包括的队列服务器集群发送的第二同步数据请求,第二同步数据请求中携带第二待写入数据和第二数据标识;
队列服务器集群403,还用于将第二同步数据请求发送给代理服务器集群;
代理服务器集群401,还用于当代理服务器集群接收到第二同步数据请求时,对第二数据标识进行哈希运算,得到第二待写入数据对应的第二存储服务器的编号,第二存储服务器包含于存储服务器集群中;
代理服务器集群401,还用于根据第二存储服务器的编号,向第二存储服务器发送第二写数据请求,第二写数据请求中携带第二待写入数据和第二数据标识,使第二存储服务器根据第二数据标识,写入第二待写入数据。
可选地,该系统还包括:
存储服务器集群402,还用于当部署新机房时,将存储的数据同步给新存储服务器集群;
队列服务器集群403,还用于将缓存的同步数据请求同步给新队列服务器集群;
代理服务器集群401,还用于向存储服务器集群发送测试数据写请求,测试数据写请求中携带待写入的测试数据和测试数据标识;
存储服务器集群402,还用于当存储服务器集群接收到测试数据写请求时,根据测试数据标识,写入待写入的测试数据;
存储服务器集群402,还用于将测试数据同步给新存储服务器集群,以测试新存储服务器中是否同步上存储服务器集群中存储的数据;
新代理服务器集群,还用于如果新存储服务器集群中同步上存储服务器集群中存储的数据,则启动,并基于新存储服务器集群同步的数据,处理新队列服务器集群中的同步数据请求;
其中,新存储服务器集群、新队列服务器集群和新代理服务器集群位于新机房中。
在本发明实施例中,对于多个机房中的任一机房,当该机房中的代理服务器集群接收到终端发送的第一写数据请求时,代理服务器集群不仅可以将该第一写数据请求发送给该机房中的存储服务器集群,使存储服务器集群对该第一写数据请求进行处理,还可以基于第一写数据请求,向该机房中的队列服务器集群发送第一同步数据请求,使该队列服务器集群将该第一同步数据请求发送给其他机房中的队列服务器集群,如此,实现多个机房中存储的数据的互相同步,即,不仅可以将第一机房包括的存储服务器集群中的数据同步到第二机房包括的存储服务器集群中,还可以将第二机房包括的存储服务器集群中的数据同步到第一机房包括的存储服务器集群中。另外,本发明实施例采用代理服务器集群、存储服务器集群和队列服务器集群,相比单个服务器,提高了分布式系统处理数据请求的处理性能,并且当这些集群中的某个服务器出现故障时,还可以由该集群中的其他服务器进行替代,提高了分布式系统的可用性。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (14)
1.一种同步数据的方法,所述方法应用于分布式系统中,所述分布式系统包括多个机房,且每个机房中包括代理服务器集群、存储服务器集群和队列服务器集群,其特征在于,所述方法包括:
代理服务器集群接收终端发送的第一写数据请求,所述第一写数据请求中携带第一待写入数据和第一数据标识,所述代理服务器集群位于第一机房中,且所述第一机房为所述多个机房中的任一机房;
所述代理服务器集群对所述第一数据标识进行哈希运算,得到所述第一待写入数据对应的第一存储服务器的编号,所述第一存储服务器包含于存储服务器集群中,所述存储服务器集群也位于所述第一机房中;
所述代理服务器集群根据所述第一存储服务器的编号、所述第一待写入数据和所述第一数据标识,从所述第一存储服务器中获取所述第一待写入数据的元数据;
所述代理服务器集群根据所述元数据,判断是否执行对应的写操作;
如果判断出执行所述写操作,则所述代理服务器集群根据所述第一存储服务器的编号,将所述第一写数据请求发送给所述第一存储服务器,使所述第一存储服务器根据所述第一数据标识,写入所述第一待写入数据;
所述代理服务器集群向队列服务器集群发送第一同步数据请求,所述第一同步数据请求中携带所述第一待写入数据和所述第一数据标识,所述队列服务器集群也位于所述第一机房中;
当所述队列服务器集群接收到所述第一同步数据请求时,所述队列服务器集群将所述第一同步数据请求发送给第二机房包括的队列服务器集群,以同步所述多个机房的存储服务器集群中存储的数据,所述第二机房为所述多个机房中除所述第一机房之外的机房。
2.如权利要求1所述的方法,其特征在于,所述代理服务器集群根据所述第一存储服务器的编号、所述第一待写入数据和所述第一数据标识,从所述第一存储服务器中获取所述第一待写入数据的元数据,包括:
所述代理服务器集群获取所述第一待写入数据的数据类型;
如果所述第一待写入数据的数据类型为第一数据类型,则所述代理服务器集群根据所述第一存储服务器的编号和所述第一数据标识,从所述第一存储服务器中获取所述第一待写入数据的元数据,所述第一数据类型为非集合数据类型;
如果所述第一待写入数据的数据类型为第二数据类型,则所述代理服务器集群将所述第一待写入数据拆分为多个待写入子数据,并基于所述多个待写入子数据,将所述第一数据标识拆分为多个数据子标识,所述待写入子数据与所述数据子标识一一对应,所述第二数据类型为集合数据类型;
所述代理服务器集群根据所述第一存储服务器的编号和所述多个数据子标识,从所述第一存储服务器中获取所述多个待写入子数据的元数据。
3.如权利要求2所述的方法,其特征在于,所述代理服务器集群根据所述第一存储服务器的编号和所述第一数据标识,从所述第一存储服务器中获取所述第一待写入数据的元数据,包括:
所述代理服务器集群根据所述第一存储服务器的编号,向所述第一存储服务器发送第一元数据获取请求,所述第一元数据获取请求中携带所述第一数据标识;
当所述第一存储服务器接收到所述第一元数据获取请求时,所述第一存储服务器根据所述第一数据标识,从数据标识与元数据之间的对应关系中获取对应的元数据;
所述第一存储服务器将获取的所述元数据发送给所述代理服务器集群。
4.如权利要求3所述的方法,其特征在于,所述代理服务器集群根据所述第一存储服务器的编号和所述多个数据子标识,从所述第一存储服务器中获取所述多个待写入子数据的元数据,包括:
对于所述多个待写入子数据中的任一待写入子数据,所述代理服务器集群根据所述第一存储服务器的编号,向所述第一存储服务器发送第二元数据获取请求,所述第二元数据获取请求中携带所述待写入子数据对应的数据子标识;
当所述第一存储服务器接收到所述第二元数据获取请求时,所述第一存储服务器根据所述数据子标识,从数据标识与元数据之间的对应关系中获取对应的元数据;
所述第一存储服务器将获取的所述元数据发送给所述代理服务器集群。
5.如权利要求1-4任一权利要求所述的方法,其特征在于,所述代理服务器集群根据所述元数据,判断是否执行对应的写操作,包括:
当所述元数据为本地时间戳时,所述代理服务器集群读取当前时间,并将读取的时间确定为所述写操作的操作时间戳;
所述代理服务器集群比较所述操作时间戳和所述本地时间戳;
如果所述操作时间戳晚于所述本地时间戳,则所述代理服务器集群确定执行所述写操作。
6.如权利要求1所述的方法,其特征在于,所述方法还包括:
所述队列服务器集群接收所述第二机房包括的队列服务器集群发送的第二同步数据请求,所述第二同步数据请求中携带第二待写入数据和第二数据标识;
所述队列服务器集群将所述第二同步数据请求发送给所述代理服务器集群;
当所述代理服务器集群接收到所述第二同步数据请求时,所述代理服务器集群对所述第二数据标识进行哈希运算,得到所述第二待写入数据对应的第二存储服务器的编号,所述第二存储服务器包含于所述存储服务器集群中;
所述代理服务器集群根据所述第二存储服务器的编号,向所述第二存储服务器发送第二写数据请求,所述第二写数据请求中携带所述第二待写入数据和所述第二数据标识,使所述第二存储服务器根据所述第二数据标识,写入所述第二待写入数据。
7.如权利要求1所述的方法,其特征在于,所述方法还包括:
当部署新机房时,所述存储服务器集群将存储的数据同步给新存储服务器集群;
所述队列服务器集群将缓存的同步数据请求同步给新队列服务器集群;
所述代理服务器集群向所述存储服务器集群发送测试数据写请求,所述测试数据写请求中携带待写入的测试数据和测试数据标识;
当所述存储服务器集群接收到所述测试数据写请求时,所述存储服务器集群根据所述测试数据标识,写入所述待写入的测试数据;
所述存储服务器集群将所述测试数据同步给所述新存储服务器集群,以测试所述新存储服务器中是否同步上所述存储服务器集群中存储的数据;
如果所述新存储服务器集群中同步上所述存储服务器集群中存储的数据,则启动新代理服务器集群,并基于所述新存储服务器集群同步的数据,处理所述新队列服务器集群中的同步数据请求;
其中,所述新存储服务器集群、所述新队列服务器集群和所述新代理服务器集群位于所述新机房中。
8.一种分布式系统,所述分布式系统包括多个机房,且每个机房中包括代理服务器集群、存储服务器集群和队列服务器集群,其特征在于,
代理服务器集群,用于接收终端发送的第一写数据请求,所述第一写数据请求中携带第一待写入数据和第一数据标识,所述代理服务器集群位于第一机房中,且所述第一机房为所述多个机房中的任一机房;
所述代理服务器集群,还用于对所述第一数据标识进行哈希运算,得到所述第一待写入数据对应的第一存储服务器的编号,所述第一存储服务器包含于存储服务器集群中,所述存储服务器集群也位于所述第一机房中;
所述代理服务器集群,还用于根据所述第一存储服务器的编号、所述第一待写入数据和所述第一数据标识,从所述第一存储服务器中获取所述第一待写入数据的元数据;
所述代理服务器集群,还用于根据所述元数据,判断是否执行对应的写操作;
所述代理服务器集群,还用于如果判断出执行所述写操作,则根据所述第一存储服务器的编号,将所述第一写数据请求发送给所述第一存储服务器,使所述第一存储服务器根据所述第一数据标识,写入所述第一待写入数据;
所述代理服务器集群,还用于向队列服务器集群发送第一同步数据请求,所述第一同步数据请求中携带所述第一待写入数据和所述第一数据标识,所述队列服务器集群也位于所述第一机房中;
所述队列服务器集群,用于当接收到所述第一同步数据请求时,将所述第一同步数据请求发送给第二机房包括的队列服务器集群,以同步所述多个机房的存储服务器集群中存储的数据,所述第二机房为所述多个机房中除所述第一机房之外的机房。
9.如权利要求8所述的系统,其特征在于,
所述代理服务器集群,还用于获取所述第一待写入数据的数据类型;
所述代理服务器集群,还用于如果所述第一待写入数据的数据类型为第一数据类型,则根据所述第一存储服务器的编号和所述第一数据标识,从所述第一存储服务器中获取所述第一待写入数据的元数据,所述第一数据类型为非集合数据类型;
所述代理服务器集群,还用于如果所述第一待写入数据的数据类型为第二数据类型,则将所述第一待写入数据拆分为多个待写入子数据,并基于所述多个待写入子数据,将所述第一数据标识拆分为多个数据子标识,所述待写入子数据与所述数据子标识一一对应,所述第二数据类型为集合数据类型;
所述代理服务器集群,还用于根据所述第一存储服务器的编号和所述多个数据子标识,从所述第一存储服务器中获取所述多个待写入子数据的元数据。
10.如权利要求9所述的系统,其特征在于,
所述代理服务器集群,还用于根据所述第一存储服务器的编号,向所述第一存储服务器发送第一元数据获取请求,所述第一元数据获取请求中携带所述第一数据标识;
所述第一存储服务器,用于当所述第一存储服务器接收到所述第一元数据获取请求时,根据所述第一数据标识,从数据标识与元数据之间的对应关系中获取对应的元数据;
所述第一存储服务器,还用于将获取的所述元数据发送给所述代理服务器集群。
11.如权利要求10所述的系统,其特征在于,
所述代理服务器集群,还用于对于所述多个待写入子数据中的任一待写入子数据,根据所述第一存储服务器的编号,向所述第一存储服务器发送第二元数据获取请求,所述第二元数据获取请求中携带所述待写入子数据对应的数据子标识;
所述第一存储服务器,还用于当所述第一存储服务器接收到所述第二元数据获取请求时,根据所述数据子标识,从数据标识与元数据之间的对应关系中获取对应的元数据;
所述第一存储服务器,还用于将获取的所述元数据发送给所述代理服务器集群。
12.如权利要求9-11任一权利要求所述的系统,其特征在于,
所述代理服务器集群,还用于当所述元数据为本地时间戳时,读取当前时间,并将读取的时间确定为所述写操作的操作时间戳;
所述代理服务器集群,还用于比较所述操作时间戳和所述本地时间戳;
所述代理服务器集群,还用于如果所述操作时间戳晚于所述本地时间戳,则确定执行所述写操作。
13.如权利要求8所述的系统,其特征在于,所述系统还包括:
所述队列服务器集群,还用于接收所述第二机房包括的队列服务器集群发送的第二同步数据请求,所述第二同步数据请求中携带第二待写入数据和第二数据标识;
所述队列服务器集群,还用于将所述第二同步数据请求发送给所述代理服务器集群;
所述代理服务器集群,还用于当所述代理服务器集群接收到所述第二同步数据请求时,对所述第二数据标识进行哈希运算,得到所述第二待写入数据对应的第二存储服务器的编号,所述第二存储服务器包含于所述存储服务器集群中;
所述代理服务器集群,还用于根据所述第二存储服务器的编号,向所述第二存储服务器发送第二写数据请求,所述第二写数据请求中携带所述第二待写入数据和所述第二数据标识,使所述第二存储服务器根据所述第二数据标识,写入所述第二待写入数据。
14.如权利要求8所述的系统,其特征在于,所述系统还包括:
所述存储服务器集群,还用于当部署新机房时,将存储的数据同步给新存储服务器集群;
所述队列服务器集群,还用于将缓存的同步数据请求同步给新队列服务器集群;
所述代理服务器集群,还用于向所述存储服务器集群发送测试数据写请求,所述测试数据写请求中携带待写入的测试数据和测试数据标识;
所述存储服务器集群,还用于当所述存储服务器集群接收到所述测试数据写请求时,根据所述测试数据标识,写入所述待写入的测试数据;
所述存储服务器集群,还用于将所述测试数据同步给所述新存储服务器集群,以测试所述新存储服务器中是否同步上所述存储服务器集群中存储的数据;
新代理服务器集群,还用于如果所述新存储服务器集群中同步上所述存储服务器集群中存储的数据,则启动,并基于所述新存储服务器集群同步的数据,处理所述新队列服务器集群中的同步数据请求;
其中,所述新存储服务器集群、所述新队列服务器集群和所述新代理服务器集群位于所述新机房中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410417950.4A CN104202375B (zh) | 2014-08-22 | 2014-08-22 | 同步数据的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410417950.4A CN104202375B (zh) | 2014-08-22 | 2014-08-22 | 同步数据的方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104202375A CN104202375A (zh) | 2014-12-10 |
CN104202375B true CN104202375B (zh) | 2017-10-24 |
Family
ID=52087600
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410417950.4A Active CN104202375B (zh) | 2014-08-22 | 2014-08-22 | 同步数据的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104202375B (zh) |
Families Citing this family (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105162879B (zh) * | 2015-09-24 | 2019-03-12 | 北京奇虎科技有限公司 | 实现多机房数据一致性的方法、装置及系统 |
CN105843911B (zh) * | 2016-03-24 | 2019-05-17 | 新浪网技术(中国)有限公司 | 数据缓存实现方法、系统及数据服务器 |
CN105721612B (zh) * | 2016-04-19 | 2019-05-07 | 北京百度网讯科技有限公司 | 数据传输方法和装置 |
CN105933153A (zh) * | 2016-04-25 | 2016-09-07 | 乐视控股(北京)有限公司 | 集群故障监测方法及装置 |
CN106331147B (zh) * | 2016-09-09 | 2019-09-06 | 深圳市彬讯科技有限公司 | 一种redis分布式调用方法 |
CN107979629B (zh) * | 2016-10-25 | 2021-05-25 | 北京京东尚科信息技术有限公司 | 分布式缓存系统及其数据缓存方法和装置 |
CN108241656A (zh) * | 2016-12-23 | 2018-07-03 | 深圳市优朋普乐传媒发展有限公司 | 一种数据读写方法及装置 |
CN108512877B (zh) * | 2017-02-28 | 2022-03-18 | 腾讯科技(北京)有限公司 | 一种服务器集群中分享数据的方法和装置 |
CN107704490A (zh) * | 2017-08-22 | 2018-02-16 | 贵州白山云科技有限公司 | 一种基于对等存储的数据处理方法及装置 |
CN112422630A (zh) * | 2017-09-28 | 2021-02-26 | 华为技术有限公司 | 云存储系统和云存储系统中的对象处理方法 |
CN107465767B (zh) * | 2017-09-29 | 2020-06-23 | 网宿科技股份有限公司 | 一种数据同步的方法和系统 |
CN107888666B (zh) * | 2017-10-27 | 2021-02-12 | 北京奇艺世纪科技有限公司 | 一种跨地域数据存储系统以及数据同步方法和装置 |
CN108011929B (zh) * | 2017-11-14 | 2020-08-25 | 平安科技(深圳)有限公司 | 数据请求处理方法、装置、计算机设备和存储介质 |
CN108415792B (zh) * | 2018-01-15 | 2022-04-29 | 创新先进技术有限公司 | 容灾系统、方法、装置及设备 |
CN110309224B (zh) * | 2018-03-14 | 2021-08-31 | 华为技术有限公司 | 一种数据复制方法及装置 |
CN110377577B (zh) | 2018-04-11 | 2022-03-04 | 北京嘀嘀无限科技发展有限公司 | 数据同步方法、装置、系统和计算机可读存储介质 |
CN109684406A (zh) * | 2018-11-13 | 2019-04-26 | 北京达佳互联信息技术有限公司 | 跨机房的redis集群备份数据的方法、装置、设备及存储介质 |
CN109688225B (zh) * | 2019-01-08 | 2021-11-16 | 网易(杭州)网络有限公司 | 一种通信方法及装置 |
CN110309231B (zh) * | 2019-07-12 | 2022-07-29 | 焦点科技股份有限公司 | 一种跨机房的数据同步方法及系统 |
CN110597467B (zh) * | 2019-09-19 | 2023-04-07 | 中国工商银行股份有限公司 | 高可用数据零丢失存储系统及方法 |
WO2021189283A1 (zh) * | 2020-03-25 | 2021-09-30 | 深圳市欢太科技有限公司 | 数据处理方法、装置、电子装置及存储介质 |
CN111506587A (zh) * | 2020-03-31 | 2020-08-07 | 紫光云技术有限公司 | 一种基于Redis的异地双活方法 |
CN112417043A (zh) * | 2020-11-19 | 2021-02-26 | 百果园技术(新加坡)有限公司 | 数据处理系统及方法 |
CN112653753B (zh) * | 2020-12-18 | 2023-04-07 | 平安银行股份有限公司 | 基于rpc的多机房独立多活方法、系统及电子设备 |
CN112866406B (zh) * | 2021-02-04 | 2023-03-24 | 中国建设银行股份有限公司 | 一种数据存储方法、系统、装置、设备及存储介质 |
CN113407637A (zh) * | 2021-07-13 | 2021-09-17 | 上海浦东发展银行股份有限公司 | 一种数据同步方法、装置、电子设备以及存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101231652A (zh) * | 2007-01-24 | 2008-07-30 | 国际商业机器公司 | 用于数据存储再同步的系统和方法 |
CN201726424U (zh) * | 2009-08-18 | 2011-01-26 | 升东网络科技发展(上海)有限公司 | 分布式存储系统 |
CN102035865A (zh) * | 2009-09-30 | 2011-04-27 | 阿里巴巴集团控股有限公司 | 数据存储及数据寻址方法、系统和设备 |
CN102033912A (zh) * | 2010-11-25 | 2011-04-27 | 北京北纬点易信息技术有限公司 | 一种分布式数据库访问方法及系统 |
CN102752387A (zh) * | 2012-06-29 | 2012-10-24 | 用友软件股份有限公司 | 数据存储处理系统和数据存储处理方法 |
CN102780763A (zh) * | 2012-06-29 | 2012-11-14 | 华中科技大学 | 一种分布式hss数据存储方法和分布式hss数据提取方法 |
CN103678523A (zh) * | 2013-11-28 | 2014-03-26 | 华为技术有限公司 | 分布式高速缓存cache数据访问方法和装置 |
CN103875229A (zh) * | 2013-12-02 | 2014-06-18 | 华为技术有限公司 | 异步复制方法、装置与系统 |
-
2014
- 2014-08-22 CN CN201410417950.4A patent/CN104202375B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101231652A (zh) * | 2007-01-24 | 2008-07-30 | 国际商业机器公司 | 用于数据存储再同步的系统和方法 |
CN201726424U (zh) * | 2009-08-18 | 2011-01-26 | 升东网络科技发展(上海)有限公司 | 分布式存储系统 |
CN102035865A (zh) * | 2009-09-30 | 2011-04-27 | 阿里巴巴集团控股有限公司 | 数据存储及数据寻址方法、系统和设备 |
CN102033912A (zh) * | 2010-11-25 | 2011-04-27 | 北京北纬点易信息技术有限公司 | 一种分布式数据库访问方法及系统 |
CN102752387A (zh) * | 2012-06-29 | 2012-10-24 | 用友软件股份有限公司 | 数据存储处理系统和数据存储处理方法 |
CN102780763A (zh) * | 2012-06-29 | 2012-11-14 | 华中科技大学 | 一种分布式hss数据存储方法和分布式hss数据提取方法 |
CN103678523A (zh) * | 2013-11-28 | 2014-03-26 | 华为技术有限公司 | 分布式高速缓存cache数据访问方法和装置 |
CN103875229A (zh) * | 2013-12-02 | 2014-06-18 | 华为技术有限公司 | 异步复制方法、装置与系统 |
Also Published As
Publication number | Publication date |
---|---|
CN104202375A (zh) | 2014-12-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104202375B (zh) | 同步数据的方法及系统 | |
CN108205569B (zh) | 用于更新配置管理数据库的方法和装置 | |
CN104580226B (zh) | 一种共享会话数据的系统和方法 | |
CN106815218B (zh) | 数据库访问方法、装置和数据库系统 | |
CN108255647B (zh) | 一种samba服务器集群下的高速数据备份方法 | |
CN105187464B (zh) | 一种分布式存储系统中的数据同步方法、装置及系统 | |
CN105306585B (zh) | 一种多数据中心的数据同步方法 | |
CN107181686B (zh) | 路由表的同步方法、装置及系统 | |
CN109379432A (zh) | 数据处理方法、装置、服务器及计算机可读存储介质 | |
US20170031948A1 (en) | File synchronization method, server, and terminal | |
CN107291750A (zh) | 一种数据迁移方法和装置 | |
EP3364627B1 (en) | Adaptive session intelligence extender | |
CN105208058A (zh) | 基于web会话共享的信息交互系统 | |
CN104348859B (zh) | 文件同步方法、装置、服务器、终端及系统 | |
CN110781083B (zh) | 一种h5客户端代码设置多环境测试方法和系统 | |
CN107018185A (zh) | 云存储系统的同步方法和装置 | |
CN109739708A (zh) | 测试压力的方法、装置和系统 | |
CN107040576A (zh) | 信息推送方法及装置、通讯系统 | |
WO2017097181A1 (zh) | 数据推送方法及装置 | |
CN106339387A (zh) | 一种数据库集群中新增服务器的数据同步方法及装置 | |
CN106603610A (zh) | 一种数据获取方法及装置 | |
CN107180034A (zh) | MySQL数据库的集群系统 | |
CN104915376A (zh) | 一种云存储中文件的归档压缩方法 | |
Serrano et al. | An autonomic approach for replication of internet-based services | |
US10447807B1 (en) | Dynamic middleware source selection for optimizing data retrieval from network nodes |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: 511446 Guangzhou City, Guangdong Province, Panyu District, South Village, Huambo Business District Wanda Plaza, block B1, floor 28 Applicant after: Guangzhou Huaduo Network Technology Co., Ltd. Address before: 510655, Guangzhou, Whampoa Avenue, No. 2, creative industrial park, building 3-08, Applicant before: Guangzhou Huaduo Network Technology Co., Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |