本发明涉及分布式存储,特别是涉及一种数据同步方法、装置、系统、电子设备及可读存储介质。
背景技术:
1、存储桶为对象存储针对用户可用的逻辑上的存放对象的容器,每个桶在创建的时候都会创建出固定数量的桶分片。目前分布式对象存储系统支持存储规模为千亿的存储桶,也即分布式对象存储系统支持千亿桶功能。该功能需要在创建桶之前开启千亿桶特性开关,这样创建的桶称为千亿桶,理论上可以支持千亿对象的存储。
2、相关技术的目标站点对分布式对象存储系统的桶分片进行全量同步时,首先向源站点发送列举对象索引请求,根据列举到的对象索引,再向源站点发送获取对象请求,从而将对象同步到目标站点。而由于千亿桶在创建时,其桶分片数量较少,当桶分片上的对象索引增加至预设阈值时,桶分片会自动分裂。当目标站点的桶分片在执行全量同步时,若源站点上的对应桶分片发生了自动分裂,相关技术中的目标站点就无法列举到已经迁移到新桶分片上的对象索引,从而导致千亿桶的全量同步出现少对象的情况。
3、鉴于此,实现目标站点在对分布式对象存储系统的千亿桶全量同步时与源站点的数据完全一致,是所属领域技术人员需要解决的技术问题。
技术实现思路
1、本发明提供了一种数据同步方法、装置、系统、电子设备及可读存储介质,能够实现目标站点在对分布式对象存储系统的千亿桶全量同步时与源站点的数据完全一致。
2、为解决上述技术问题,本发明提供以下技术方案:
3、本发明第一方面提供了一种数据同步方法,应用于同步源站点的千亿桶数据的目标站点,包括:
4、当检测到千亿桶的桶分片处于全量同步状态,向所述源站点发送源桶分片的分裂状态查询请求,并从存储池中获取所述源桶分片的同步进度对象数据;
5、根据所述源桶分片的分裂状态和所述同步进度对象数据确定是否满足新桶分片全量同步触发条件;
6、当满足新桶分片全量同步触发条件,对所述源桶分片的新桶分片进行全量同步;
7、其中,所述新桶分片为所述源桶分片自动分裂的桶分片,所述同步进度对象数据为解析所述源站点实时主动发送的桶分片分裂完成通知请求,并将解析得到的新分裂桶分片数据存储至所述存储池所得;所述新桶分片全量同步触发条件用于表示源桶分片在全量同步过程中发生自动分裂。
8、在第一种示例性的实施方式中,所述根据所述源桶分片的分裂状态和所述同步进度对象数据确定是否满足新桶分片全量同步触发条件,包括:
9、当所述源桶分片为分裂完成状态,判断所述同步进度对象数据是否存在新桶分片;
10、若所述同步进度对象数据存在新桶分片,则满足新桶分片全量同步触发条件;
11、若所述同步进度对象数据不存在新桶分片,则不满足新桶分片全量同步触发条件。
12、在第二种示例性的实施方式中,所述根据所述源桶分片的分裂状态和所述同步进度对象数据确定是否满足新桶分片全量同步触发条件,包括:
13、当所述源桶分片的分裂状态处于未分裂状态和正在分裂状态,则不满足新桶分片全量同步触发条件。
14、在第三种示例性的实施方式中,所述根据所述源桶分片的分裂状态和所述同步进度对象数据确定是否满足新桶分片全量同步触发条件之后,还包括:
15、若所述源桶分片处于正在分裂状态,则退出当前全量同步流程;
16、若所述源桶分片未处于正在分裂状态,且不满足新桶分片全量同步触发条件,则向所述源站点的源桶分片发送列举对象索引请求,并根据列举到的对象索引同步相应对象。
17、在第四种示例性的实施方式中,所述检测到千亿桶的桶分片处于全量同步状态,包括:
18、向源站点的源桶分片发送列举对象索引请求;
19、若所述源站点的源桶分片没有对象索引,则所述源桶分片处于增量同步状态;
20、若所述源站点的源桶分片有对象索引,则所述源桶分片处于全量同步状态。
21、在第五种示例性的实施方式中,还包括:
22、预先在开始从源站点同步数据的启动时刻,为所述源站点当前各初始源桶分片在存储池中创建对应的对象;
23、当接收到所述源站点主动发送的桶分片分裂完成通知请求,通过解析所述桶分片分裂完成通知请求得到新分裂桶分片数据;
24、将所述新分裂桶分片数据,存储至所述新分裂桶分片所属初始桶分片对应的对象中。
25、在第六种示例性的实施方式中,所述通过解析所述桶分片分裂完成通知请求得到新分裂桶分片数据,包括:
26、根据预先设置的待存储标识信息,从所述桶分片分裂完成通知请求中读取所述待存储标识信息对应的待存储数据;
27、按照预设对象存储格式,从所述待存储数据中读取源站点标识、初始源桶标识、源桶分片标识及新桶分片标识,并将所述新桶分片标识作为新分裂桶分片数据。在第七种示例性的实施方式中,所述将所述新分裂桶分片数据,存储至所述新分裂桶分片所属初始桶分片对应的对象中,包括:
28、判断所述源桶分片标识对应的对象是否存在;
29、若所述源桶分片标识对应的对象存在,则按照所述初始源桶标识:所述源桶分片标识:所述新桶分片标识的格式,将所述新桶分片标识以数据的形式写入至所述源桶分片标识对应的对象中。
30、本发明第二方面提供了一种数据同步方法,应用于支持千亿桶功能的源站点,包括:
31、预先在创建桶之前,开启千亿桶功能;
32、每当检测到桶分片自动分裂完成,则主动向目标站点发送桶分片分裂完成通知请求,以使所述目标站点通过解析所述桶分片分裂完成通知请求,并将解析得到的新分裂桶分片数据存储至存储池;
33、其中,所述目标站点通过执行如前所述数据同步方法的步骤从所述源站点同步数据。
34、在第一种示例性的实施方式下,所述每当检测到桶分片自动分裂完成,则主动向目标站点发送桶分片分裂完成通知请求,包括:
35、当检测到源桶分片上的对象索引数量达到预设索引阈值,则为所述源桶分片设置分裂标识,并确定自动分裂的新桶分片号;所述分裂标识用于记录当前桶分片的分裂状态;
36、根据所述新桶分片号创建新桶分片,将所述源桶分片的至少一个对象索引迁移至所述新桶分片,并将所述源桶分片的分裂标识修改为已完成;
37、当检测到所述源桶分片的分裂标识为已完成,则根据所述源桶分片和对应自动分裂的新桶分片生成桶分片分裂完成通知请求。
38、在第二种示例性的实施方式下,所述每当检测到桶分片自动分裂完成,则主动向目标站点发送桶分片分裂完成通知请求,包括:
39、获取源站点标识、初始源桶标识、源桶分片标识及新桶分片标识;
40、将所述源站点标识、所述初始源桶标识、所述源桶分片标识及所述新桶分片标识,按照预设对象存储格式拼接为字符串;
41、基于预先设置的待存储标识信息,根据所述字符串生成桶分片分裂完成通知请求。
42、本发明第三方面提供了一种数据同步装置,应用于同步源站点的千亿桶数据的目标站点,包括:
43、数据获取模块,用于当检测到千亿桶的桶分片处于全量同步状态,向所述源站点发送源桶分片的分裂状态查询请求,并从存储池中获取所述源桶分片的同步进度对象数据;其中,所述同步进度对象数据为解析所述源站点实时主动发送的桶分片分裂完成通知请求,并将解析得到的新分裂桶分片数据存储至所述存储池所得;
44、触发检测模块,用于根据所述源桶分片的分裂状态和所述同步进度对象数据确定是否满足新桶分片全量同步触发条件;其中,所述新桶分片全量同步触发条件用于表示源桶分片在全量同步过程中发生自动分裂;
45、数据同步模块,用于当满足新桶分片全量同步触发条件,对所述源桶分片的新桶分片进行全量同步;其中,所述新桶分片为所述源桶分片自动分裂的桶分片。
46、本发明第四方面提供了一种数据同步装置,应用于支持千亿桶功能的源站点,包括:
47、功能开启模块,用于预先在创建桶之前,开启千亿桶功能;
48、请求自动发送模块,用于每当检测到桶分片自动分裂完成,则主动向目标站点发送桶分片分裂完成通知请求,以使所述目标站点通过解析所述桶分片分裂完成通知请求,并将解析得到的新分裂桶分片数据存储至存储池;其中,所述目标站点通过执行如前所述数据同步方法的步骤从所述源站点同步数据。
49、本发明第五方面提供了一种电子设备,包括处理器和存储器,所述处理器用于执行所述存储器中存储的计算机程序时实现如前任一项所述数据同步方法的步骤。
50、本发明第六方面还提供了一种可读存储介质,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如前任一项所述数据同步方法的步骤。
51、本发明第七方面提供了一种数据同步系统,包括源站点和目标站点;
52、所述源站点和所述目标站点为分布式存储对象系统中的存储系统,所述源站点包括源存储网关,所述目标站点包括目标存储网关,所述目标站点通过所述目标存储网关与所述源站点的源存储网关进行数据交互;
53、所述源站点执行存储器中存储的计算机程序时实现如前任一项所述数据同步方法的步骤;所述目标站点执行存储器中存储的计算机程序时实现如前任一项所述数据同步方法的步骤。
54、本发明提供的技术方案的优点在于,源站点发生自动分裂的桶分片在分裂完成后主动将分裂信息通知到目标站点,目标站点接收到通知请求后,将解析后的信息存储在存储池中供同步线程全量同步桶分片时查看,以决定是否触发针对分裂后新的桶分片的全量同步,这样当目标站点在执行桶分片的全量同步时,即使源桶分片发生了自动分裂,依然能保证迁移到新桶分片上的对象能正确被同步到目标站点,从而有效解决当前阶段千亿桶全量同步导致的少对象问题,实现目标站点在对分布式对象存储系统的千亿桶全量同步时与源站点的数据完全一致,有效增强千亿桶数据同步的健壮性和稳定性,有利于提高千亿桶和多站点数据同步的兼容性,提升用户使用体验,提升分布式对象存储系统的存储性能。
55、此外,本发明还针对数据同步方法提供了相应的实现装置、系统、电子设备及可读存储介质,进一步使得所述方法更具有实用性,所述装置、系统、电子设备及可读存储介质具有相应的优点。
56、应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本发明。