本发明涉及云存储领域,尤其涉及一种数据同步方法及存储系统。
背景技术:
现有技术中,在实现跨地域多资源池(存储系统)的数据一致性方面,通常采用最终一致性方案,在进行资源池建设时,会对需要保证多资源池一致性的多个资源池进行配置,待多个资源池上线使用后则不允许对相关规则做调整。
当多个资源池中的源资源池的数据写入成功后,会将数据变更消息推送至多个资源池中的目标资源池;而目标资源池在接收到数据变更消息后,会从源资源池中拉取之前写入源资源池的数据,从而实现源资源池与目标资源池的数据一致性。然而通常情况下,实现源资源池和目标资源池的数据一致性需要较长时间,因此,在此期间用户无法访问目标资源池中的数据,即在写入源资源池的数据未同步至目标资源池时,用户是无法从目标资源池感知或者获取数据的。
综上可知,现有技术中存储系统在实现数据同步时的效率低。
技术实现要素:
本发明实施例提供一种数据同步方法及存储系统,用以解决现有技术中存储系统在实现数据同步时的效率低的技术问题。
第一方面,本发明实施例提供一种数据同步方法,应用于第一存储系统,所述第一存储系统与第二存储系统连接,包括:
获取由第二存储系统发送的同步一实体数据的同步任务,其中,所述同步任务中包括用于指示所述实体数据的数据类型信息和所述实体数据在所述第二存储系统中的数据访问地址信息的元数据;
基于所述同步任务生成数据拉取任务,所述数据拉取任务用于指示所述第一存储系统从所述第二存储系统中调取所述元数据对应的实体数据;
基于所述数据拉取任务,获取所述实体数据。
本发明实施例中,第一存储系统首先获取的是第二存储系统发送的包括元数据的同步任务,而由于元数据指示了待同步的实体数据的数据类型信息和数据访问地址信息,因此第一存储系统可以根据该元数据从第二存储系统获取实体数据,进而即使用户在实体数据的同步过程中通过第一存储系统访问实体数据,第一存储系统也可以根据元数据从第二存储系统调取实体数据反馈给用户,提高了存储系统在实现数据同步时的效率。
在一种可能的实现方式中,在基于所述数据拉取任务,获取所述实体数据的同时或者之后,第一存储系统可以获取用户的数据访问请求,由于所述数据访问请求用于请求对所述元数据对应的实体数据进行写操作和/或读操作,因此如果第一存储系统中的所述实体数据未获取完成,则可以将所述数据访问请求发送至所述第二存储系统,以接收所述第二存储系统基于所述数据访问请求反馈的与所述元数据对应的实体数据,进而有效避免了由于第一存储系统与第二存储系统的数据同步时间较长,用户无法在此期间访问第一存储系统中的数据的缺陷。
在一种可能的实现方式中,在获取用户的数据访问请求之后,第一存储系统可以判断所述实体数据是否损坏;若所述实体数据已损坏,则将所述数据访问请求发送至所述第二存储系统,由第二存储系统根据数据访问请求中的元数据向第一存储系统反馈实体数据,避免无法访问第一存储系统中的数据的缺陷。
第二方面,本发明实施例提供一种数据同步方法,应用于第二存储系统,所述第二存储系统与第一存储系统连接,所述方法包括:
获取用户数据;
基于预设同步策略从所述用户数据中确定元数据和实体数据,其中,所述元数据用于指示所述实体数据的数据类型信息和所述实体数据在所述第二存储系统中的数据访问地址信息,所述预设同步策略包括存储空间级别、存储系统级别和用户级别中的至少一项;
基于所述元数据和所述实体数据,生成包括所述元数据、用于同步所述实体数据的同步任务;
将所述同步任务发送给所述第一存储系统;
接收所述第一存储系统基于所述同步任务生成的数据拉取任务,所述数据拉取任务用于从所述第二存储系统中调取所述元数据对应的实体数据;
基于所述数据拉取任务,向所述第一存储系统发送所述实体数据。
由于本发明实施例中,第二存储系统分别进行元数据层面和实体数据层面的数据同步,而元数据占用存储空间占比小,可降低对带宽的压力,同步速度快,可以大幅度降低第一存储系统和第二存储系统在进行读取和/或访问操作时发生数据不一致的概率,且由于元数据指示了实体数据的数据访问地址,因此避免用户无法访问数据的情况。
在一种可能的实现方式中,在将所述同步任务发送给所述第一存储系统之后,还包括:
获取由所述第一存储系统发送的数据访问请求,所述数据访问请求用于请求对所述元数据对应的实体数据进行写操作和/或读操作;
基于所述数据访问请求确定所述元数据指示的数据访问地址信息,并从所述数据访问地址确定所述实体数据;
将所述实体数据反馈给所述第一存储系统。
第三方面,本发明实施例提供第一存储系统,所述第一存储系统与第二存储系统连接,所述第一存储系统包括:
第一获取模块,用于获取由第二存储系统发送的同步一实体数据的同步任务,其中,所述同步任务中包括用于指示所述实体数据的数据类型信息和所述实体数据在所述第二存储系统中的数据访问地址信息的元数据;
生成模块,用于基于所述同步任务生成数据拉取任务,所述数据拉取任务用于指示所述第一存储系统从所述第二存储系统中调取所述元数据对应的实体数据;
第二获取模块,用于基于所述数据拉取任务,获取所述实体数据。
在一种可能的实现方式中,所述第一存储系统还包括:
第三获取模块,用于在所述第二获取模块基于所述数据拉取任务,获取所述实体数据的同时或者之后,获取用户的数据访问请求,所述数据访问请求用于请求对所述元数据对应的实体数据进行写操作和/或读操作;
若所述实体数据未获取完成,则将所述数据访问请求发送至所述第二存储系统;
接收所述第二存储系统基于所述数据访问请求反馈的与所述元数据对应的实体数据。
在一种可能的实现方式中,所述第一存储系统还包括:
判断模块,用于在所述第三获取模块获取用户的数据访问请求之后,判断所述第一存储系统中的所述实体数据是否损坏;
若所述实体数据已损坏,则将所述数据访问请求发送至所述第二存储系统。
第四方面,本发明实施例提供一种第二存储系统,所述第二存储系统与第一存储系统连接,所述第二存储系统包括:
获取模块,用于获取用户数据;
确定模块,用于基于预设同步策略从所述用户数据中确定元数据和实体数据,其中,所述元数据用于指示所述实体数据的数据类型信息和所述实体数据在所述第二存储系统中的数据访问地址信息,所述预设同步策略包括存储空间级别、存储系统级别和用户级别中的至少一项;
生成模块,用于基于所述元数据和所述实体数据,生成包括所述元数据、用于同步所述实体数据的同步任务;
第一发送模块,用于将所述同步任务发送给所述第一存储系统;
接收模块,用于接收所述第一存储系统基于所述同步任务生成的数据拉取任务,所述数据拉取任务用于从所述第二存储系统中调取所述元数据对应的实体数据;
第二发送模块,用于基于所述数据拉取任务,向所述第一存储系统发送所述实体数据。
在一种可能的实现方式中,所述第二存储系统还包括:
反馈模块,用于在所述第一发送模块将所述同步任务发送给所述第一存储系统之后,获取由所述第一存储系统发送的数据访问请求,所述数据访问请求用于请求对所述元数据对应的实体数据进行写操作和/或读操作;
基于所述数据访问请求确定所述元数据指示的数据访问地址信息,并从所述数据访问地址确定所述实体数据;
将所述实体数据反馈给所述第一存储系统。
第五方面,本发明实施例提供一种计算机装置,所述计算机装置包括:
至少一个处理器,以及
与所述至少一个处理器通信连接的存储器、通信接口;
其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述至少一个处理器通过执行所述存储器存储的指令,利用所述通信接口执行如第一方面或第二方面所述的方法。
第六方面,本发明实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行如第一方面或第二方面所述的方法。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍,显而易见地,下面所介绍的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例中数据同步方法的实施架构图;
图2为本发明实施例中数据同步方法的流程示意图;
图3为本发明实施例中第一存储系统的结构示意图;
图4为本发明实施例中第二存储系统的结构示意图;
图5为本发明实施例中计算机装置的结构示意图。
具体实施方式
为了使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。
本发明实施例中提供的数据同步方法,可以实现同一地域或者跨地域的多个存储系统之间的数据一致性,其中,存储系统可以为云存储系统等。当多个存储系统中的某个存储系统有数据写入时,该存储系统可以作为源资源池,而多个存储系统的其余存储系统可以作为目标资源池,即源资源池可以将写入的数据同步给目标资源池,以确保多个存储系统之间的数据一致性。当然,多个存储系统中的任一存储系统可以作为源资源池,或者也可以作为目标资源池。
本发明实施例为描述方便,将目标资源池称作第一存储系统,源资源池为第二存储系统,第一存储系统可以为一个或者多个。下面,以实现两个存储系统之间的数据一致性为例,对本发明实施例的数据同步方法进行介绍。
请参见图1,为本发明实施例中数据同步方法的实施架构图。图1中,第一存储系统或第二存储系统可以包括网关模块、多个存储设备、数据库、推(push)模块和拉取(pull)模块,其中,上述的这些模块之间可以相互连接,第二存储系统可以作为第一存储系统的源资源池。
而pull模块和push模块可以作为第一存储系统或第二存储系统中独立的模块(进程)存在,或者也可以作为第一存储系统或第二存储系统中的网关模块的子进程或线程存在,本发明实施例中不作限制。
在实际应用中,首次向第二存储系统写入数据之前,用户或者系统管理员可以进行资源池信息的配置,如需要实现指定存储系统之间的数据同步等,还可以添加同步规则,如需要实现指定类型的数据的同步等,用户或者系统管理员可以将资源池的配置、同步规则等信息保存在多个存储系统中,当然,这些信息在数据同步的过程中或者数据同步之后可以灵活调整,进而避免了现有技术中当配置文件损坏时,恢复难度大,且当后续有新存储系统加入时,变更难度大的缺陷。
需要理解的是,在本发明实施例的描述中,“第一”、“第二”等词汇,仅用于区分描述的目的,而不能理解为指示或暗示相对重要性,也不能理解为指示或暗示顺序。在本发明实施例的描述中“多个”,是指两个或两个以上。
本发明实施例中的术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
下面结合附图对本发明优选的实施例作详细的介绍。
请参见图2,为本发明实施例中实现第一存储系统和第二存储系统的数据一致性时,数据同步方法的流程示意图。需要说明的是,本发明实施例中的步骤s201、s202等,仅为了描述方便,并不是用于对数据同步方法的步骤先后顺序的限定。
请同时参见图1和图2,本发明实施例中在第二存储系统侧,数据同步方法的实现流程可以描述如下:
s201:获取用户数据;
s202:基于预设同步策略从用户数据中确定元数据和实体数据;
s203:基于元数据和实体数据,生成包括元数据、用于同步实体数据的同步任务。
在s201中,用户可以通过第二存储系统中的网关模块写入数据到第二存储系统中,其中,用户写入的数据,即用户数据,可以为上传的视频、图片、网页浏览记录等数据;然后,第二存储系统中的网关模块可以将用户数据写入到底层的存储设备中进行保存,并且将用户数据在数据库中进行记录。
然后进入s202,即可以根据预设同步策略从用户数据中确定元数据和实体数据,其中,元数据可以用于指示实体数据的数据类型信息和实体数据在第二存储系统中的数据访问地址信息,预设同步策略包括存储空间级别、存储系统级别和用户级别中的至少一项。
在实际应用中,元数据可以为描述实体数据的数据,可以用于描述数据属性,如存储位置、历史数据、资源查找、文件记录等,如可以是与实体数据相关的记录、名称、大小、类型等数据,而实体数据则是用户数据的基础数据。
举例来说,若用户数据为用户上传的一段视频,那么元数据可以包括这段视频的存储位置、名称、视频的总时长、视频数据的大小等,而实体数据可以是构成这段视频本身的基础数据;或者,若用户数据为用户的网络浏览记录,元数据可以包括文件记录、资源查找等,而实体数据则可以是网络浏览记录本身的一些基础数据,等等。
预设同步策略可以是由用户或者系统管理员进行自定义设置的。用户可以进行存储空间级别的跨资源池数据同步设置,可自定义数据一致性规则,如用户可以自定义设置第二存储系统将哪个存储设备中存储的数据同步给第一存储系统。
比如,第二存储系统包括存储设备a和存储设备b,这时,用户可以设定将存储设备a中存储的数据同步给第一存储设备。
存储系统的系统管理员可以进行存储系统级别的跨资源池数据同步设置,如可以设置多个存储系统中各个存储系统的同步级别,比如3个存储系统分别为存储系统1、存储系统2和存储系统3,则存储系统级别的设置可以为存储系统1>存储系统2>存储系统3,如此,假设存储系统2为源资源池,则存储系统2可以首先将数据同步给存储系统1,然后是存储系统3。
系统管理员也可以进行用户级别的跨资源池数据同步设置,如系统管理员可以指定哪些用户的用户数据可以进行跨资源池数据同步,哪些用户的用户数据不可以进行跨资源池数据同步。
在第二存储系统根据预设同步策略确定元数据和实体数据之后,可以进入s203,即第二存储系统中的push模块可以监听数据库中的待同步数据记录,然后根据元数据和实体数据,生成可以包括元数据的、用于同步实体数据的同步任务,在一种可能的实现方式中,同步任务还可以包括第一存储系统信息、第二存储系统信息,以及第一存储系统和第二存储系统之间的关联信息中的至少一项,可以确保第二存储系统准确的找到需要进行数据同步的第一存储系统。
进而,第二存储系统中的push模块可以将同步任务发送给第一存储系统,以触发第一存储系统可以进行数据的同步。
本发明实施例中在第一存储系统侧,数据同步方法的实现流程具体可以包括如下步骤:
s204:获取由第二存储系统发送的同步一实体数据的同步任务;
s205:基于同步任务生成数据拉取任务;
s207:基于数据拉取任务,获取实体数据。
在s204中,第一存储系统的网关模块可以获取第二存储系统的push模块发送的同步一实体数据的同步任务,由于同步任务中携带有元数据,因此,第一存储系统中的网关模块可以将元数据写入数据库中进行保存,并且可以将元数据的状态更新为同步中。
由于元数据在第一存储系统中相当于一个占位符,除了数据库记录外不占用额外的存储空间,因此元数据的同步速度较快。而由于元数据可以指示实体数据在第二存储系统中的数据访问地址信息,因此即便用户写入第二存储系统的数据量很大的大文件,且即使第一存储系统和第二存储系统在同步了元数据之后,实体数据需要很长时间,在此期间,用户也可以通过第一存储系统访问存储于第二存储系统的实体数据,进而有效避免了由于第一存储系统与第二存储系统的数据同步时间较长,会造成在第二存储系统数据写入成功后的一段时间内,用户无法在第一存储系统上读取和/或访问对应的数据的缺陷。
第一存储系统在获取第二存储系统发送的同步任务之后,可以进入s205,第二存储系统的网关模块可以根据同步任务生成数据拉取任务,并存入数据库中,其中,数据拉取任务可以用于指示第一存储系统从第二存储系统中调取元数据对应的实体数据。
第一存储系统中的pull模块在监听到数据库中的数据拉取任务后,可以将数据拉取任务发送给第二存储系统,即进入s206,第二存储系统接受第一存储系统发送的数据拉取任务,然后根据数据拉取任务,向第一存储系统发送实体数据。
然后进入s207,即第一存储系统可以根据数据拉取任务,接收第一存储系统发送的实体数据。
第一存储系统中的pull模块从第二存储系统拉取实体数据后,可以将实体数据写入第一存储系统的网关模块,自动覆盖之前写入的元数据占位符,数据写入完成后,pull模块更新拉取任务列表,并更新数据状态为可用状态。
现有的存储系统中,在进行数据同步时,不区分元数据和实体数据,一般视二者为整体,采用统一更新、存储的方法,造成在第二存储系统写入数据成功后的一段时间内,或者同步后的第一存储系统中的数据发生损坏或丢失时,无法为用户提供可访问数据或提示用户可访问的地址,进而导致用户无法在第一存储系统上读取和/或访问对应的数据。
基于上述现有技术的问题,本发明实施例中,采用分层同步的方法来确保第一存储系统和第二存储系统的数据一致性,即分别进行元数据层面和实体数据层面的数据同步,由于元数据占用存储空间占比小,可降低对带宽的压力,同步速度快,可以大幅度降低第一存储系统和第二存储系统在进行读取和/或访问操作时发生数据不一致的概率,且由于元数据指示了实体数据的数据访问地址,因此避免用户无法访问数据的情况。
在一种可能的实现方式中,在基于数据拉取任务,获取实体数据的同时或者之后,第一存储系统可以获取用户的数据访问请求,数据访问请求用于请求对元数据对应的实体数据进行写操作和/或读操作,然后,第一存储系统可以判断实体数据是否同步完成,即实体数据是否获取完成。
如果第一存储系统中的实体数据并未获取完成,则第一存储系统可以将数据访问请求发送至第二存储系统,即第一存储系统自动将访问请求重定向于第二存储系统,并接收第二存储系统基于数据访问请求反馈的与元数据对应的实体数据,进而将实体数据反馈给用户。
或者,在一种可能的实现方式中,在基于数据拉取任务,获取实体数据之后,第一存储系统还可以判断第一存储系统中的实体数据是否损坏,若实体数据已损坏,即第一存储系统中已获取的实体数据不可用时,可以将数据访问请求发送至第二存储系统,第二存储系统在获取数据访问请求后,可以根据数据访问请求确定元数据指示的数据访问地址信息,并从数据访问地址确定所述实体数据,然后将实体数据反馈给第一存储系统,使得第一存储系统可以接收第二存储系统反馈的与元数据对应的实体数据后,反馈给用户。
也就是说,由于第一存储系统的元数据记录中,会记录数据同步状态实体数据在第二存储系统中的数据访问地址,因此如果发生第一存储系统的数据副本不可用的情况,则可以自动将访问请求重定向至第二存储系统,进而实现数据的访问。
或者,在数据同步之后,若第二存储系统中的实体数据不可用时,若用户请求访问第二存储系统中的数据,则也可以将访问请求定向到第一存储系统中,进而实现数据访问,即本发明实施例中的第一存储系统和第二存储系统为独立的系统,用户可以在第一存储系统或第二存储系统上进行数据写操作和/或读操作。
综上所述,本发明实施例的一个或者多个技术方案,至少具有如下技术效果或者优点:
本发明实施例中,第一存储系统首先获取的是第二存储系统发送的包括元数据的同步任务,而由于元数据指示了待同步的实体数据的数据类型信息和数据访问地址信息,因此第一存储系统可以根据该元数据从第二存储系统获取实体数据,进而即使用户在实体数据的同步过程中通过第一存储系统访问实体数据,第一存储系统也可以根据元数据从第二存储系统调取实体数据反馈给用户,提高了存储系统在实现数据同步时的效率。
基于同一发明构思,请参见图3,本发明实施例提供第一存储系统,所述第一存储系统与第二存储系统连接,所述第一存储系统包括:
第一获取模块31,用于获取由第二存储系统发送的同步一实体数据的同步任务,其中,所述同步任务中包括用于指示所述实体数据的数据类型信息和所述实体数据在所述第二存储系统中的数据访问地址信息的元数据;
生成模块32,用于基于所述同步任务生成数据拉取任务,所述数据拉取任务用于指示所述第一存储系统从所述第二存储系统中调取所述元数据对应的实体数据;
第二获取模块33,用于基于所述数据拉取任务,获取所述实体数据。
在一种可能的实现方式中,所述第一存储系统还包括:
第三获取模块,用于在所述第二获取模块33基于所述数据拉取任务,获取所述实体数据的同时或者之后,所述网关模块还用于获取用户的数据访问请求,所述数据访问请求用于请求对所述元数据对应的实体数据进行写操作和/或读操作;
若所述实体数据未获取完成,则将所述数据访问请求发送至所述第二存储系统;
接收所述第二存储系统基于所述数据访问请求反馈的与所述元数据对应的实体数据。
在一种可能的实现方式中,所述第一存储系统还包括:
判断模块,用于在所述第三获取模块获取用户的数据访问请求之后,判断所述第一存储系统中的所述实体数据是否损坏;
若所述实体数据已损坏,则将所述数据访问请求发送至所述第二存储系统。
基于同一发明构思,请仍参见图4,本发明实施例提供一种第二存储系统,所述第二存储系统与第一存储系统连接,所述第二存储系统包括:
获取模块41,用于获取用户数据;
确定模块42,用于基于预设同步策略从所述用户数据中确定元数据和实体数据,其中,所述元数据用于指示所述实体数据的数据类型信息和所述实体数据在所述第二存储系统中的数据访问地址信息,所述预设同步策略包括存储空间级别、存储系统级别和用户级别中的至少一项;
生成模块43,用于基于所述元数据和所述实体数据,生成包括所述元数据、用于同步所述实体数据的同步任务;
第一发送模块44,用于将所述同步任务发送给所述第一存储系统;
接收模块45,用于接收所述第一存储系统基于所述同步任务生成的数据拉取任务,所述数据拉取任务用于从所述第二存储系统中调取所述元数据对应的实体数据;
第二发送模块46,用于基于所述数据拉取任务,向所述第一存储系统发送所述实体数据。
在一种可能的实现方式中,所述第二存储系统还包括:
反馈模块,用于在所述第一发送模块44将所述同步任务发送给所述第一存储系统之后,获取由所述第一存储系统发送的数据访问请求,所述数据访问请求用于请求对所述元数据对应的实体数据进行写操作和/或读操作;
基于所述数据访问请求确定所述元数据指示的数据访问地址信息,并从所述数据访问地址确定所述实体数据;
将所述实体数据反馈给所述第一存储系统。
请参见图5,基于同一发明构思,本发明实施例中提供一种计算机装置,包括至少一个处理器51,以及与所述至少一个处理器51通信连接的存储器52和通信接口53,图5中以示出一个处理器51为例。
其中,所述存储器52存储有可被所述至少一个处理器51执行的指令,所述至少一个处理器51通过执行所述存储器52存储的指令,利用所述通信接口53执行上述所述的方法。
基于同一发明构思,本发明实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行如上述所述的方法。
在具体的实施过程中,计算机可读存储介质包括:通用串行总线闪存盘(universalserialbusflashdrive,usb)、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的存储介质。
以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元/模块可以是或者也可以不是物理上分开的,作为单元/模块显示的部件可以是或者也可以不是物理单元/模块,即可以位于一个地方,或者也可以分布到多个网络单元/模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。