本申请涉及数据存储领域,特别涉及一种写入请求处理方法、装置及设备。
背景技术:
随着信息技术的不断发展,基于数据中心的信息系统在各行业中承担的关键业务也越来越多越多,一旦数据中心崩溃或出错,将造成重要数据的丢失。为了提高数据的安全性,目前的信息系统通常会设置主数据中心和备份数据中心来进行数据的保存和备份,同时为了提高硬件利用率,这两个数据中心可以同时处理业务请求,比如写入请求、读取请求以及数据同步请求等。上述同时处理业务请求的主备两个数据中心通常被称作双活数据中心。
数据中心在处理业务请求时,需要对写入请求做特定的处理,以避免写入请求与写入请求,或者写入请求与数据同步请求之间的地址冲突。在相关技术中,双活数据中心对写入请求的处理方式如下:
双活数据中心基于同一组逻辑地址提供业务处理服务,且在主数据中心设置锁服务器。主数据中心或者备份数据中心中的终端对某个逻辑地址发起写入时,首先向锁服务器发送锁定请求,以请求对该逻辑地址进行锁定,若该逻辑地址当前处于未锁定状态,则锁服务器锁定该逻辑地址并向终端返回锁定通知。该终端接收到锁定通知后,向两个数据中心的存储设备分别发送写入请求,由两个数据中心的存储设备各自在请求的逻辑地址中写入相同的数据。
在实际应用中,为了达到较好的备灾效果,主数据中心和备份数据中心通常在地理位置上相隔较远,而在上述方案中,备份数据中心中的终端每次写入数据之前,都需要先向锁服务器发送锁定请求并接收返回的锁定通知,且该锁定请求和锁定通知均为跨数据中心传输,导致备份数据中心中的终端从发送锁定请求到接收锁定通知之间的时延较高,对备份数据中心的处理性能影响较大。
技术实现要素:
为了提高双活数据中心中的备份数据中心的处理性能,本申请的实施例提供了一种写入请求处理方法、装置及设备。
第一方面,提供了一种写入请求处理方法,该方法用于包括第一数据中心和第二数据中心的存储系统中,第一数据中心包含第一存储设备,第二数据中心包含第二存储设备,第一数据中心和/或第二数据中心还包含至少两个终端,该方法由该至少两个终端中的第一终端执行,该方法包括:
第一终端向该第一存储设备和所述第二存储设备分别发送写入请求,该写入请求用于指示第一存储设备和第二存储设备在各自的存储空间的相同逻辑地址中写入相同数据;第一终端接收存储设备返回的拒绝响应,该存储设备是第一存储设备或者第二存储设备,该拒绝响应用于指示该写入请求对应的逻辑地址中的全部或部分地址已被锁定或即将被锁定;第一终端向触发该全部或部分地址锁定的第二终端转发该写入请求,使得第二终端在该全部或部分地址的锁定被解除后,向该第一存储设备和该第二存储设备分别发送该写入请求。
本方案提供的方法,当第一终端同时向第一存储设备和第二存储设备发送写入请求时,若第二终端已经触发或即将触发该第一存储设备和第二存储设备对应该写入请求的逻辑地址锁定,则该第一终端将写入请求转发给第二终端,由第二终端在该写入请求对应的逻辑地址解除锁定后,将该写入请求发送给第一存储设备和第二存储设备进行处理,任意存储设备中的终端都不需要在每次发送写入请求之前都跨数据中心请求地址锁定,备份数据中心中的终端发送写入请求时,也就不存在从发送锁定请求到接收锁定通知之间的时延,从而在避免写入请求的地址与其它写入请求或数据同步请求的地址产生冲突的同时,极大的提高了备份数据中心的处理性能。
可选的,所述方法包括:第一终端向第二终端转发第一写入请求,具体包括:第一终端获取该拒绝响应中携带的第二终端的标识,第一终端根据第二终端的标识,向第二终端转发第一写入请求。
第二方面,提供了一种写入请求处理方法,该方法用于包括第一数据中心和第二数据中心的存储系统中,第一数据中心包含第一存储设备,第二数据中心包含第二存储设备,第一数据中心和/或第二数据中心还包含至少两个终端,该方法由第一存储设备和第二存储设备中的任一存储设备执行,该方法包括:
存储设备接收该至少两个终端中的第一终端发送的写入请求;当该写入请求对应的逻辑地址中的全部或部分地址已被锁定或即将被锁定时,存储设备向第一终端发送拒绝响应,使得第一终端向第二终端转发该写入请求,第二终端是该至少两个终端中触发锁定该全部或部分地址的终端;存储设备接收第二终端在该全部或部分地址的锁定被解除后发送的该写入请求。
可选的,当该写入请求对应的逻辑地址中的全部或部分地址已被锁定或即将被锁定时,存储设备向第一终端发送拒绝响应,具体包括:存储设备检测存储设备的存储空间对应的逻辑地址中,已被锁定的地址是否包含该全部或部分地址;若检测结果为该已被锁定的地址包含该全部或部分地址,则存储设备向第一终端发送所述拒绝响应。
该方案通过检测存储设备的存储空间对应的逻辑地址中,已被锁定的地址是否包含该全部或部分地址,明确了写入请求和当前已锁定的地址产生冲突的条件,使得存储设备明确地确定产生冲突的写入请求,并对该写入请求生成拒绝响应。
可选的,当该写入请求对应的逻辑地址中的全部或部分地址已被锁定或即将被锁定时,存储设备向第一终端发送拒绝响应,具体包括:若检测结果为已被锁定的地址不包含所述全部或部分地址,则存储设备检测是否接收到第二终端发送的目标业务请求,目标业务请求对应的逻辑地址与该写入请求对应的逻辑地址中包含相同地址;若检测结果为接收到该目标业务请求,则存储设备获取该写入请求和该目标业务请求的优先级;当该目标业务请求的优先级高于该写入请求的优先级时,存储设备向第一终端发送所述拒绝响应。
该方案中,存储设备通过检测目标业务请求对应的逻辑地址与该写入请求对应的逻辑地址中包含相同地址,并在存在相同地址的情况下,通过目标业务请求的优先级来确定优先执行哪一个目标业务请求,使得分布式双活存储系统中的备份数据中心在减小时延的基础上,能够根据不同的优先级确定方式灵活执行优先级相对较高的目标业务请求,提高了系统优先响应较重要的任务的能力。
可选的,该目标业务请求用于请求在目标业务请求对应的逻辑地址中写入数据,且目标业务请求对应的逻辑地址包含该全部或部分地址;或者,该目标业务请求用于请求将目标业务请求对应的逻辑地址中的数据同步至第一存储设备和第二存储设备中的另一存储设备,且目标业务请求对应的逻辑地址包含全部或部分地址。
可选的,当目标业务请求的优先级高于写入请求的优先级时,存储设备处理目标业务请求,并在处理该目标业务请求的过程中,锁定存储设备的存储空间中对应该目标业务请求的逻辑地址。
该方案中,存储设备在处理业务请求时锁定了该业务请求对应的逻辑地址,使得该业务请求能够不被其他操作干扰而正确地执行。
可选的,存储设备向对应的备份存储设备发送该目标业务请求以及锁定指示信息,该锁定指示信息用于指示该备份存储设备在处理该目标业务请求的过程中,锁定该备份存储设备的存储空间中对应该目标业务请求的逻辑地址。
该方案中,存储设备通过向对应的备份存储设备发送该目标业务请求以及锁定指示信息,使得存储设备在发生故障时,备份存储设备能够准确的继承对逻辑地址的锁定。
可选的,该存储设备向第一终端发送拒绝响应,包括:存储设备向第一终端返回包含有第二终端的标识的该拒绝响应。
第三方面,提供了一种终端,该终端包括:处理器和通信接口,所述通信接口被配置为由所述处理器控制;该处理器用于实现上述第一方面及第一方面的可选方案所提供的写入请求处理方法。
第四方面,提供了一种存储设备,该设备包括:处理器和通信接口,该通信接口被配置为由该处理器控制;该设备中的处理器用于实现上述第二方面及第二方面的任意一种可选方案所提供的写入请求处理方法。
第五方面,提供了一种写入请求处理装置,该装置包括至少一个单元,该至少一个单元用于实现上述第一方面及第一方面的可选方案所提供的写入请求处理方法;或者,该至少一个单元用于实现上述第二方面或第二方面的任意一种可选方案所提供的写入请求处理方法。
第六方面,提供了一种计算机可读存储介质,该计算机可读存储介质存储有用于实现上述第一方面及第一方面的可选方案所提供的写入请求处理方法的可执行程序,或者,该计算机可读存储介质存储有用于实现上述第二方面或第二方面的任意一种可选方案所提供的写入请求处理方法的可执行程序。
附图说明
图1是本申请所涉及的存储系统的架构图;
图2是本申请一示例性实施例提供的存储控制设备的结构示意图;
图3是本申请一示例性实施例提供的存储控制设备的结构示意图;
图4是本申请一示例性实施例提供的写入请求处理方法的流程图;
图5是图4所示实施例涉及的逻辑地址冲突的示意图;
图6是图4所示实施例涉及的一种写入请求处理示意图;
图7是图4所示实施例涉及的另一种写入请求处理示意图;
图8是本申请一示例性实施例提供的一种写入请求处理装置的结构方框图;
图9是本申请一示例性实施例提供的一种写入请求处理装置的结构方框图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
图1是本申请实施例所涉及的存储系统的架构图。该存储系统包括第一数据中心100和第二数据中心110,该第一数据中心100和第二数据中心110组成双活数据中心。
可选的,在本申请的实施例中的第一数据中心100和第二数据中心110可以根据数据中心所在的实际地理区域进行区别,例如北京数据中心和上海数据中心。第一数据中心100通过网络接口106和第二数据中心110中的网络接口116进行通信,该网络接口是有线网络的线缆插口,该线缆可以是光纤、双绞线或同轴电缆。
可选的,在本申请中的第一数据中心100和第二数据中心110的具体实现时,都可以包括物理服务器,该物理服务器可以用于为第一数据中心100或第二数据中心110提供存储、计算和网络资源。在本申请的实施例主要通过使用该物理服务器中的存储功能来实现。对于物理服务器,可以按照上述功能进行分类。比如,用于提供计算和网络资源的物理服务器可以称之为计算节点,在一个数据中心中,若干个计算节点可以组成计算节点集群。用于提供存储资源的物理服务器可以称之为存储设备,若干个存储设备可以组成存储节点集群,例如图1中的第一数据中心100包含有第一存储设备102a和第三存储设备102b,第二数据中心包含有第二存储设备112a和第四存储设备112b。其中,为了提高被存储的数据的安全性,可选定其中一个存储设备作为主存储设备,并且设置另外一个或若干个存储设备与该主存储节点保存同样的数据,即作为该主存储设备的副本,作为备份的副本可称为备份存储设备。例如图1中的第三存储设备102b是第一存储设备102a的副本,第四存储设备112b是第二存储设备112a的副本。
第一数据中心100和第二数据中心110中还至少包括两个终端。本存储系统具体设置上述两个终端时,可以将该至少两个终端均设置在第一数据中心100中;也可以将该至少两个终端均设置在第二数据中心110中;还可以在该第一数据中心100和该第二数据中心110中各设置至少一个终端。
如图1所示,第一数据中心100中包含终端104在内的至少一个终端,第二数据中心110中包含第二终端114在内的至少一个终端。上述终端104和终端114都可以向第一数据中心100或第二数据中心110中的存储设备发起包括写入请求、读取请求或者数据同步请求等业务请求。具体的,终端104能够通过网络接口106与第二数据中心110进行跨数据中心通信,同时也可以通过第一数据中心100内部的数据线缆与第一数据中心100中的存储设备(比如第一存储设备102a)进行数据中心内通信。同理,终端114能够通过网络接口116与第一数据中心100进行跨数据中心通信,同时也能通过第二数据中心110内部的数据线缆与第二数据中心110中的存储设备(比如第二存储设备112a)进行数据中心内通信。
需要说明的是,本存储系统中的终端104和终端114以及其它运行在两个数据中心中的终端可以是实际的硬件设备,比如通用计算机设备,也可以是虚拟的软件应用,比如运行在计算机设备上的客户端,该客户端可以是虚拟机、虚拟机软件或者数据库软件等等。
其中,在图1所示的存储系统中,第一存储设备102a和第二存储设备112a可以被配置为一个跨数据中心的虚拟存储单元,该存储单元称为双活卷。对于使用该存储系统的用户而言,其可将需要存储的数据写入该双活卷中,而无需关注该数据具体存储在哪一个数据中心的物理存储设备中。对于该存储系统而言,当有数据写入该双活卷时,第一存储设备102a和第二存储设备112a按照相同的逻辑地址分别在本地写入相同的数据。
其中,图1中的各个存储设备都可包含存储管理软件,存储管理软件可以对该存储设备上的物理存储芯片进行管理,比如判断物理存储芯片中相应的数据地址是否已被锁定。上述存储设备可以是网络连接式存储(Network Attached Storage,NAS)设备,还可以是存储网络(Storage Area Network,SAN)设备,例如,该存储设备可以是SAN设备,该SAN设备的存储空间具体可以由逻辑单元(Logical Unit Number,LUN)表示,该LUN是一存储阵列形式显示的逻辑磁盘,每台终端可以运行在在该SAN设备的一个或者多个LUN上。该SAN设备的存储管理软件可以控制对该LUN的读写操作,也可以对该LUN的信息进行管理。
另外,在本申请的实施例的一种实现方式中,当该存储系统实现为双活数据存储系统时,第一数据中心100和第二数据中心110可以互为容灾数据中心,当其中一个数据中心发生故障导致其服务的终端停止工作后,另一个数据中心继续工作并记录差异信息。在发生故障的数据中心恢复工作后,记录差异信息的数据中心作为容灾数据中心对其进行差量信息同步,使恢复工作后的数据中心中存储的信息和容灾数据中心中存储的信息一致。
请参考图2,其示出了本申请的一个示例性实施例提供的终端的结构示意图。该终端20可以是上述图1所示的数据中心中的终端,或者,当上述图1所示终端是虚拟的软件应用时,该终端20也可以是运行上述图1所示的终端的计算机设备。
该终端20可以包括:处理器21和通信接口24。
处理器21可以包括一个或者一个以上处理单元,该处理单元可以是中央处理单元(英文:central processing unit,CPU)或者网络处理器(英文:network processor,NP)等。
通信接口24可以包括本地接口以及网络接口,其中,本地接口用于连接与该终端处于同一数据中心中的存储设备或者其它终端,网络接口用于连接其他数据中心中的存储设备或者数据中心。
可选地,该终端20还可以包括存储器23,处理器21可以通过总线与存储器23和通信接口24相连。存储器23可用于存储软件程序,该软件程序可以由处理器21执行。此外,该存储器23中还可以存储各类业务数据或者用户数据。
可选地,该终端20还可以包括输出设备25以及输入设备27。输出设备25和输入设备27与处理器21相连。输出设备25可以是用于显示信息的显示器、播放声音的功放设备或者打印机等,输出设备25还可以包括输出控制器,用以提供输出到显示屏、功放设备或者打印机。输入设备27可以是用于用户输入信息的诸如鼠标、键盘、电子触控笔或者触控面板之类的设备,输入设备27还可以包括输出控制器以用于接收和处理来自鼠标、键盘、电子触控笔或者触控面板等设备的输入。
请参考图3,其示出了本申请一个示例性实施例提供的存储设备的结构示意图。该存储设备30可以是上述图1所示的各个存储设备中的任意一个设备。
该设备30可以包括:处理器31和通信接口34。
处理器31可以包括一个或者一个以上处理单元,该处理单元可以是中央处理单元(英文:central processing unit,CPU)或者网络处理器(英文:network processor,NP)等。
通信接口34可以包括本地接口以及网络接口,其中,本地接口用于连接与该存储设备处于同一数据中心中的存储设备或者其它终端,网络接口用于连接其他数据中心中的存储设备或者数据中心。
该存储设备30还可以包括存储器33,处理器31可以通过总线与存储器33和通信接口34相连。存储器33可用于存储软件程序,该软件程序可以由处理器31执行。此外,该存储器33中还可以存储各类业务数据或者用户数据。
请参考图4,其示出了本申请一个示例性实施例提供的写入请求处理方法的流程图。该方法可以用于图1所示的存储系统中。如图4所示,该数据存储方法可以包括:
步骤401,第一终端生成写入请求。
其中,该第一终端可以是图1所示的存储系统中的终端104、终端114或者其它未示出的任一终端,即该第一终端可以是第一数据中心的终端,也可以是第二数据中心中的终端。在本申请实施例中,第一终端在需要发起数据写入时,首先生成一个写入请求。
该步骤可以由图2所示的终端中的处理器来实现。
步骤402,第一终端根据数据存储系统视图,向第一存储设备和第二存储设备分别发送写入请求。
其中,该第一存储设备可以是图1所示的存储系统中的第一存储设备102a,第二存储设备可以是第二存储设备中的第二存储设备112a,该写入请求用于指示第一存储设备和第二存储设备在各自的存储空间的相同逻辑地址中写入相同数据。
在本申请实施例中,第一存储设备和第二存储设备组成一个双活卷。该第一终端生成写入请求后,其会向第一存储设备和第二存储设备分别发送该写入请求。该写入请求中可以包含待写入的数据以及待写入的逻辑地址。
该步骤可以由图2所示的终端中的处理器控制通信接口来实现。
步骤403,存储设备接收第一终端发送的写入请求。
该步骤中的存储设备可以是第一存储设备和第二存储设备中的任意一个存储设备。在本申请的实施例实现的过程中,第一存储设备和第二存储设备可以分别执行步骤403。即步骤403可以是第一存储设备接收该第一终端发送的写入请求以及第二存储设备接收该第一终端发送的写入请求的两个并列步骤。
该步骤可以由图3所示的存储设备中的处理器控制通信接口来实现。
步骤404,当该写入请求对应的逻辑地址中的全部或部分地址已被锁定或即将被锁定时,存储设备向该第一终端发送拒绝响应。
在本申请实施例中,当存储设备中某一个逻辑地址正在被写入数据,或者,正在进行数据同步(比如,将该逻辑地址中的数据同步至其它存储设备中同样的逻辑地址中)时,存储设备可以将该逻辑地址锁定,其中,存储设备锁定该逻辑地址的方式可以称为乐观锁。该乐观锁用于锁定指定逻辑地址对应的存储空间,并使得该指定逻辑地址对应的存储空间仅能由拥有该乐观锁的终端读写,并禁止其它终端对该逻辑地址的写操作。
存储设备(图4中仅示出了第一存储设备角度的图示说明,在实际应用中,第二存储设备同时也执行相同的步骤)接收到写入请求后,可以检测该写入请求对应的逻辑地址中的部分或全部地址是否已经被锁定或者即将被锁定,若是,则存储设备拒绝该写入请求,并向第一终端发送拒绝响应。
可选的,在本申请实施例中,当该写入请求对应的逻辑地址中的全部或部分地址已被锁定或即将被锁定时,存储设备还可以获取触发锁定该全部或部分地址的第二终端的标识,并将该第二终端的标识携带在拒绝响应中发送给第一终端。
其中,该第二终端可以是与第一终端处于同一数据中心的终端,或者,该第二终端也可以是与第一终端处于不同的数据中心的终端。
该步骤可以由图3所示的存储设备中的处理器控制通信接口来实现。
如图4所示,在本申请实施例的一种可能实现的方式中,存储设备在检测写入请求对应的逻辑地址中的全部或部分地址是否已被锁定时,可以执行步骤404a和步骤404b。
步骤404a,存储设备检测该存储设备的存储空间对应的逻辑地址中,已被锁定的地址是否包含该写入请求对应的逻辑地址的全部或部分地址。
该步骤可以由图3所示的存储设备中的处理器来实现。
步骤404b,若检测结果为该已被锁定的地址包含该全部或部分地址,则存储设备向第一终端发送拒绝响应。
在本申请实施例中,存储设备在接收到该第一终端发送的写入请求之前,若已经接收到第二终端发送的目标业务请求并开始处理该目标业务请求,则存储设备可以在处理该目标业务请求的过程中将该目标业务请求对应的逻辑地址锁定,即在开始处理该目标业务请求时该目标业务请求对应的逻辑地址锁定,并在处理完成该目标业务请求时,将对该目标业务请求对应的逻辑地址的锁定解除。存储设备在处理该目标业务请求的过程中,若接收到第一终端发送的写入请求,且目标业务请求对应的逻辑地址与该写入请求对应的逻辑地址中包含相同地址(即上述全部或者部分地址),即意味着这两个请求的逻辑地址之间存在冲突,此时,存储设备向第一终端发送包含第二终端的标识的拒绝响应。
上述逻辑地址冲突的情形可以分为三种:第一种是写入请求对应的逻辑地址与目标业务请求对应的逻辑地址重叠,第二种是写入请求对应的逻辑地址被目标业务请求对应的逻辑地址完全覆盖,第三种是写入请求对应的逻辑地址与目标业务请求对应的逻辑地址交叉覆盖。具体可参见图5,其示出了本申请实施例涉及的逻辑地址冲突的示意图。
重叠指两个或两个以上的请求对应的逻辑地址完全相同。如图5中的重叠示意图510所示,假设写入请求对应的逻辑地址511的LBA值为0x1000至0x1004,且目标业务请求对应的逻辑地址512的LBA值同样是0x1000至0x1004,则第写入请求对应的逻辑地址511与目标业务请求对应的逻辑地址512重叠。
覆盖指两个写入请求中的一个写入请求对应的逻辑地址包含于另一个写入请求对应的逻辑地址中,如图5中的完全覆盖示意图520所示,假设写入请求对应的逻辑地址522的LBA值是0x1000至0x1002,而目标业务请求对应的逻辑地址521的LBA值是0x1001至0x1004,则目标业务请求对应的逻辑地址521覆盖写入请求对应的逻辑地址522。
交叉覆盖指存在一段逻辑地址,该逻辑地址分别是两个业务请求对应的逻辑地址的一部分,且这两个业务请求对应的逻辑地址之间还存在不同的部分,如图5中的交叉覆盖示意图530所示,假设写入请求对应的逻辑地址531的LBA值是0x1000至0x1004,且目标业务请求对应的逻辑地址532的LBA值是0x1003至0x1006,则写入请求对应的逻辑地址531和目标业务请求对应的逻辑地址532交叉覆盖,交叉部分的LBA值为0x1003至0x1004。
可选的,在本申请实施例中,该目标业务请求可以用于请求在该目标业务请求对应的逻辑地址中写入数据。
或者,该目标业务请求也可以用于请求将该存储设备中,该目标业务请求对应的逻辑地址中的数据同步至第一存储设备和第二存储设备中的另一个存储设备。例如,以执行该步骤的存储设备是第一存储设备为例,在第二数据中心中的第二存储设备发生故障并恢复后,第二终端在后台同步时,向第一存储设备发送数据同步请求,该数据同步请求用于请求将第二存储设备发生故障过程中,第一存储设备中写入的差异数据同步至第二存储设备。
该步骤可以由图3所示的存储设备中的处理器控制通信接口来实现。
可选的,存储设备在执行步骤404a时,若检测出已被锁定的地址不包含该写入请求对应的逻辑地址的全部或部分地址,则存储设备可以进一步检测写入请求对应的逻辑地址中的全部或部分地址是否即将被锁定时,即执行步骤404c、步骤404d和步骤404e。
步骤404c,存储设备检测是否接收到第二终端发送的目标业务请求。
在本申请实施例中,存储设备也有可能同时接收到第一终端发送的写入请求和第二终端发送的该目标业务请求,而写入请求和目标业务请求的逻辑地址又存在冲突,无法同时处理,此时,存储设备需要执行步骤404c,以确定先处理哪一个请求。
该步骤可以由图3所示的存储设备中的处理器来实现。
步骤404d,若检测结果为接收到该目标业务请求,则该存储设备获取该写入请求和该目标业务请求的优先级。
在本申请实施例中,一个存储设备接收到的一个业务请求的优先级可以包括该业务请求对应的业务类型的优先级、发送该业务请求的终端所在的数据中心的优先级以及发送该业务请求的终端的优先级中的至少一种。
可选的,该写入请求和目标业务请求中可以携带各自的优先级,存储设备直接从接收到的写入请求和目标业务请求中解析出写入请求和目标业务请求的优先级。
或者,存储设备也可以获取写入请求和目标业务请求的业务类型、发送终端以及发送终端所在的数据中心等信息,并根据获取到的信息查询该写入请求和目标业务请求各自的优先级。
该步骤可以由图3所示的存储设备中的处理器来实现。
存储设备在执行完成步骤404c时,若检测出没有接收到该目标业务请求,则存储设备可以执行后续步骤409。
步骤404e,当目标业务请求的优先级高于写入请求的优先级时,存储设备向所述第一终端发送拒绝响应。可选的,该拒绝响应中包含有该第二终端的标识。此时,本发明实施例将执行步骤405。
获取到写入请求和目标业务请求各自的优先级后,存储设备可以比较写入请求和目标业务请求各自的优先级的高低,当目标业务请求的优先级高于写入请求的优先级时,存储设备将优先处理目标业务请求,并向第一终端发送拒绝响应;当写入请求的优先级高于目标业务请求的优先级时,存储设备将优先处理该写入请求,并执行后续步骤409。
可选的,当业务请求的优先级包含两种或两种以上的优先级时,存储设备可以按照预定的顺序依次比较写入请求和目标业务请求的各种优先级,直至确定出写入请求和目标业务请求的优先级的高低为止。
比如,以业务请求的优先级包含上述业务请求对应的业务类型的优先级、发送该业务请求的终端所在的数据中心的优先级以及发送该业务请求的终端的优先级为例,存储设备获取到写入请求和目标业务请求各自的优先级后,首先比对写入请求的业务类型的优先级和目标业务请求的业务类型的优先级,若目标业务请求的业务类型的优先级高于写入请求的业务类型的优先级(比如,目标业务请求是数据同步请求,且数据同步的优先级高于写入的优先级),则存储设备确定目标业务请求的优先级高于写入请求的优先级;若目标业务请求的业务类型的优先级低于写入请求的业务类型的优先级(比如,目标业务请求是数据同步请求,且数据同步的优先级低于写入的优先级),则存储设备确定目标业务请求的优先级低于写入请求的优先级。若目标业务请求的业务类型的优先级与写入请求的业务类型的优先级(比如,目标业务请求也是一个写入请求),则存储设备进一步比较第一终端所在的数据中心的优先级与第二终端所在的数据中心的优先级的高低,若第一终端所在的数据中心的优先级高于第二终端所在的数据中心的优先级的高低(比如,假设第一终端处于第一数据中心,第二终端处于第二数据中心,且第一数据中心的优先级高于第二数据中心的优先级),则确定写入请求的优先级高于目标业务请求的优先级;若第一终端所在的数据中心的优先级低于第二终端所在的数据中心的优先级的高低(比如,假设第一终端处于第一数据中心,第二终端处于第二数据中心,且第一数据中心的优先级低于第二数据中心的优先级),则确定写入请求的优先级低于目标业务请求的优先级;若第一终端所在的数据中心的优先级与第二终端所在的数据中心的优先级的相同(比如,假设第一终端和第二终端处于同一个第一数据中心),则存储设备进一步比较第一终端和第二终端的优先级,若第一终端的优先级高于第二终端的优先级,则存储设备确定写入请求的优先级高于目标业务请求的优先级,若第一终端的优先级低于第二终端的优先级,则存储设备确定写入请求的优先级低于目标业务请求的优先级。可选的,在本申请实施例中,处于同一个数据中心中的不同终端之间可以设置不同的优先级。
该步骤可以由图3所示的存储设备中的处理器控制通信接口来实现。
当目标业务请求的优先级高于写入请求的优先级时,存储设备处理目标业务请求,并在处理目标业务请求的过程中,锁定存储设备的存储空间中对应目标业务请求的逻辑地址。其中,存储设备处理目标业务请求,并在处理目标业务请求的过程中,锁定目标业务请求的逻辑地址的步骤,可以由图3所示的存储设备中的处理器控制通信接口来实现。
可选的,存储设备在处理完目标业务请求并解除对目标业务请求对应的逻辑地址的锁定之后,还可以向第二终端发送目标业务请求处理完成的响应,以指示该第二终端该目标业务请求已经处理完成,写入请求中的部分或者全部地址的锁定已经解除。
可选的,该存储设备还可以将该目标业务请求以及锁定指示信息发送到其对应的备份存储设备中,其中,该锁定指示信息用于指示备份存储设备在处理目标业务请求的过程中,锁定备份存储设备的存储空间中对应目标业务请求的逻辑地址。在存储设备处理完成该目标业务请求并解除对该目标业务请求对应的逻辑地址的锁定后,存储设备将向第二终端发送用于指示该目标业务请求处理完成的响应,以指示第二终端该目标业务请求处理已经完成,该返回给第二终端的响应目的在于使目标业务请求的发送方能够确定自身的请求已经被执行完成,以保证目标业务请求的处理满足分布式强一致性复制协议。相应的,第二终端在获知存储设备执行完成该目标业务请求后,可以认为该目标业务请求对应的逻辑地址已解除锁定。
其中,分布式强一致性复制协议是为保证双活数据中心中的各个副本数据的数据一致性而引入的协议。本申请实施例涉及的双活数据中心支持该协议。该协议具体要求双活数据中心在指定数据更新操作完成时,两个保存数据的数据中心均要保证指定数据更新成功。并且,该分布式强一致性复制要求在保存指定数据的副本发生故障时,需要在该发生故障的副本中的数据和其它各个保存该指定数据的副本中的数据恢复到一致后,才允许将该发生过故障的副本重新投入到业务处理中。
步骤405,该第一终端接收存储设备返回的拒绝响应。
在本申请的实施例中,在接收到第一存储设备或者第二存储设备中任意一个存储设备发送的拒绝响应时,第一终端可以视为第一存储设备和第二存储设备都发出了拒绝响应。
其中,在该第一终端接收存储设备返回的拒绝响应时,该第一终端可以获取该拒绝响应中携带的第二终端的标识。
该步骤可以由图2所示的终端中的处理器控制通信接口来实现。
步骤406,第一终端向第二终端转发该写入请求。
可选的,第一终端可以获取拒绝响应中携带的第二终端的标识,并根据第二终端的标识向第二终端转发该写入请求。
该步骤可以由图2所示的终端中的处理器控制通信接口来实现。
步骤407,第二终端接收第一终端转发的该写入请求。
该步骤可以由图2所示的终端中的处理器控制通信接口来实现。
步骤408,第二终端在该全部或部分地址的锁定被解除后,向该第一存储设备和该第二存储设备分别发送该写入请求。
可选的,在本申请实施例所涉及的存储系统运行时,如果第二终端中在接收到第一终端转发的写入请求的同时,还接收到了其它终端转发的写入请求,则第二终端可以根据发送写入请求的终端的优先级确定先发送哪一个写入请求。
该步骤可以由图2所示的终端中的处理器控制通信接口来实现。
相应的,存储设备接收该写入请求。存储设备在接收到该写入请求后,继续监测该写入请求的逻辑地址中的部分或者全部地址是否已锁定或即将被锁定,如果该写入请求的逻辑地址中的部分或者全部地址已锁定或即将被锁定,则向第二终端返回拒绝响应,否则该存储设备将执行步骤409。
该存储设备接收写入请求的动作,可以由实现为第一存储设备或第二存储设备的存储控制设备中的处理器控制通信接口来实现。
步骤409,存储设备按照该写入请求对应的逻辑地址写入该写入请求指示的数据。
需要特别说明的是,当步骤409是由组成双活卷的两个存储设备一同执行的,在本申请所示实施例中可以视为第一存储设备和第二存储设备在各自的存储空间的相同逻辑地址中写入相同数据。在第一存储设备和第二存储设备均存储完成该相同的数据后,步骤409视为执行完成。
该步骤可以由图3所示的存储设备中的处理器来实现。
步骤410,存储设备锁定该存储设备的存储空间中对应该写入请求的逻辑地址。
该步骤可以由图3所示的存储设备中的处理器来实现。
步骤411,存储设备向对应的备份存储设备发送该写入请求以及锁定指示信息,该锁定指示信息用于指示该备份存储设备在处理该写入请求的过程中,锁定该备份存储设备的存储空间中对应该写入请求的逻辑地址。
可选的,为了防止存储设备因故障造成该存储设备中存储的数据丢失,在该存储设备按照写入请求写入数据时,该存储设备向对应的备份存储设备发送该写入请求以及锁定指示信息。
可选的,该存储设备向对应的备份存储设备发送该正在处理的业务请求(比如写入请求或者目标业务请求)时,也可以不发送锁定指示信息,由备份存储设备在接收并处理该业务请求时,自动将该业务请求对应的逻辑地址锁定。
可选的,按照分布式强一致性复制要求,备份存储设备在完成对业务请求的处理时,将向发出该业务请求的终端返回处理成功的响应。
该步骤可以由图3所示的存储设备中的处理器控制通信接口来实现。
下面,通过两个具体的数据写入例子介绍本申请能够实现的两个写入请求处理流程。
在本申请能够实现的一个数据写入案例中,以图1所示的存储系统的架构为例,请参考图6,其示出了本申请实施例涉及的一种写入请求处理示意图,如图6所示,本数据写入案例可分为以下步骤来实现。
1)第一数据中心中的第一终端在接收到写入数据的指令时,生成写入请求1。
2)该第一终端根据存储系统视图获取到该写入请求1对应的逻辑地址,将该写入请求1分别发送到第一存储设备和第二存储设备中进行处理。当第一存储设备接收到该写入请求1后,对该写入请求1对应的逻辑地址进行锁定,并按照该写入请求1的指示写入数据;同时,当第二存储设备接收到该写入请求1后,对该写入请求1对应的逻辑地址也进行锁定,并按照该写入请求1的指示写入数据。由于第三存储设备是第一存储设备的备份设备,第四存储设备是第二消息设备的备份设备,所以第三存储设备与第一存储设备锁定了相同的逻辑地址并按照相同的写入请求1写入了数据,同理,第四存储设备也执行了与第二存储设备相同的操作。
3)第二终端生成另一个写入请求2,该第二终端生成的写入请求2和第一终端生成的写入请求1对应的逻辑地址部分或全部相同。
4)第二终端将生成的写入请求2分别发送给第一存储设备和第二存储设备。
5)当第一存储设备和第二存储设备接收到该写入请求2后,两个存储设备都将检测已被锁定的逻辑地址中是否和该第二终端发送来的写入请求2对应的逻辑地址相同。由于该第二终端发送来的写入请求2和第一终端发送的写入请求1部分或全部相同,所以第一存储设备和第二存储设备都将生成拒绝响应,并将该拒绝响应反馈给第二终端。同时,上述两个存储设备在生成的拒绝响应中添加第一终端的标识。
6)第二终端在接收到拒绝响应后,获取该拒绝响应中的第一终端的标识,将写入请求2转发给该第一终端。
7)第一终端在接收到该第二终端转发来的写入请求2后,将其排入到任务队列中,第一终端接收到第一存储设备和第二存储设备执行完写入请求1后发出的完成响应。
8)第一终端向用户反馈该写入请求1已完成的响应。
9)第一终端将写入请求2分别发送给第一存储设备和第二存储设备。
可选的,在本例中还可以以后台数据同步请求作为终端发出的请求,第一存储设备和第二存储设备仍将锁定相同的逻辑地址,差异仅在于其中一个存储设备锁定的逻辑地址中的数据是用于被读取数据的,而另一个存储设备锁定的逻辑地址是用于写入数据。
在本申请能够实现的另一个数据写入案例中,本申请能够通过数据游标的方式来避免数据写入和后台数据同步之间因逻辑地址相同产生的冲突。按照图1所示的存储系统架构,请参考图7,其示出了本申请实施例涉及的另一种写入请求处理示意图。如图7所示,该处理过程具体如下:
1)第一终端发起后台数据同步。
在第一终端发起后台同步时,第一终端指示第一存储设备以数据游标当前与双活卷空间的逻辑地址对齐的位置为起点,以数据游标的粒度大小为基准,读取待同步的数据。例如,当游标粒度为1MB时,第一存储设备锁定从当前数据游标所在位置对齐的1MB的逻辑地址,并读取该1MB内的数据,同时第三存储设备锁定同样的1MB对应的逻辑地址。
2)第一存储设备将读取到的1MB数据发送给第一终端。
3)第一终端向第二数据中心中的第二存储设备发送写入请求1,该写入请求1用于请求该1MB数据写入第二存储设备中的相同逻辑地址,第二存储设备接收到该1MB数据后,将锁定该1MB数据对应的逻辑地址,并将该1MB数据写入到该第二存储设备中的对应的逻辑地址中,同时第四存储设备锁定同样的1MB对应的逻辑地址,并将该1MB数据写入到该第四存储设备中的对应的逻辑地址中。
4)第二终端生成写入请求2。
5)第二终端将该写入请求2分别发送到第一存储设备和第二存储设备中。第一存储设备和第二存储设备分别检测该写入请求2对应的逻辑地址是否和当前1MB锁定的逻辑地址相同,若完全不同,则直接执行该写入请求2。
6)当该写入请求2对应的逻辑地址和当前1MB锁定的逻辑地址部分相同或者完全相同,第一存储设备和第二存储设备获取触发锁定该逻辑地址的第一终端的标识,并将携带有该第一终端的标识的拒绝响应返回给第二终端。
7)第二终端在接收到该拒绝响应后,向该第一终端转发该写入请求2。
8)第二存储设备完成写入该1MB数据并解除了该1MB对应的逻辑地址的锁定后,将解除该1MB对应的逻辑地址的锁定,并向该第一终端返回写入成功的响应。
9)第一终端分别向第一存储设备和第二存储设备发送第二终端转发的写入请求2。
第一存储设备和第二存储设备在接收到上述第二终端转发的写入请求2后,处理该第二终端转发来的写入请求2。
可选的,在上述后台数据同步的案例中,由于一次同步的数据量可能较大,例如10GB数据,若直接将该为10GB的数据锁定来进行数据同步,则会对该存储系统中其它需要对该数据段读写的业务造成影响。为了避免上述影响,本申请在进行后台数据同步时,利用数据游标的方式对需要同步的数据进行更新。具体执行时可将需要同步的数据分割为若干段长为游标长度的数据段,依次锁定每一段游标所对应的逻辑地址并进行同步,当同步完成一个数据段后,读写两侧的存储设备都将解除该数据段对应的逻辑地址,并将紧随该数据段的下一个数据段对应的读写两侧存储设备中的逻辑地址锁定,进行该数据段的同步工作。
需要说明的是,需要同步的数据段在双活卷空间中可以是连续存在的,也可以是不连续存在的。例如,数据游标长为1MB,需要同步的数据为3MB,以游标当前所对齐的双活卷空间位置为起点,该需要同步的数据分别在第3MB、第5MB和第7MB所在的双活卷空间位置。则数据游标会在第1MB和第2MB的分别进行检测,未检测到需要同步的数据后其会移动到第3MB的位置,由于该位置的数据需要同步,所以该数据指示第一存储设备和第二存储设备分别锁定该逻辑地址,并进行该位置的数据同步工作。在同步完该第3MB位置的数据后,数据游标将接收分别到第一存储设备和第二存储设备完成同步的相应,之后数据游标将检测依次检测第4MB、第5MB…直到其确定预先设定的3MB长度的待同步数据都同步完成后,结束同步工作,并向发起该同步工作的终端返回同步成功的响应。
综上所述,本申请实施例所示的一种写入请求处理方法,通过第一终端获取数据写入请求,并根据数据存储系统视图向第一存储设备和第二存储设备分别发送写入请求,第一存储设备和第二存储设备分别接收到该写入请求后,将各自检测该写入请求对应的逻辑地址中的全部或部分地址是否已被锁定或即将锁定;当检测结果为否定时,将各自锁定该写入请求对应的逻辑地址并执行该写入请求,同时为了备份第一存储设备和第二存储设备中的数据,还将指示第三消息设备执行与第一存储设备完全相同的操作,并指示第四存储设备执行与第二存储设备完全相同的操作;当检测结果为肯定时,向发出该写入请求的第一终端返回带有触发该写入请求对应的全部或部分逻辑地址锁定或即将锁定的第二终端的标识,由该第一终端将该写入请求转发到该第二终端中,第二终端检测到该写入请求对应的逻辑地址解除锁定后,将该写入请求分别发送给第一存储设备和第二存储设备,指示这两个存储设备执行该写入请求。在本申请中,由于任意存储设备中的终端都不需要在每次发送写入请求之前都跨数据中心请求地址锁定,备份数据中心中的终端发送写入请求时,也就不存在从发送锁定请求到接收锁定通知之间的时延,从而在避免写入请求的地址与其它写入请求或数据同步请求的地址产生冲突的同时,极大的提高了备份数据中心的处理性能。
另外,由于本申请实施例在存储设备检测到当前写入请求对应的逻辑地址已被部分或者全部锁定时,再行检测锁定该逻辑地址的终端的标识,通过将该当前写入请求转发给锁定该逻辑地址的终端,使得产生写入冲突的请求转变为串行处理,在减小了分布式双活存储系统的时延的基础上,保证了无差错地执行逻辑地址冲突的写入请求。
下述为本申请的装置实施例,可以用于执行本申请的方法实施例。对于本申请的装置实施例中未披露的细节,请参照本申请的方法实施例。
图8是本申请的实施例提供的一种写入请求处理装置的结构方框图,该写入请求处理装置可以通过硬件电路或者软件硬件的结合实现成为写入请求处理设备的部分或者全部。该写入请求处理装置可以包括:写入请求发送单元801、拒绝响应接收对应802和转发单元803。
写入请求发送单元801,用于执行与上述步骤402相同或者相似的步骤。
拒绝响应接收单元802,用于执行与上述步骤405中的部分相同或者相似的步骤。
转发单元803,用于执行与上述步骤406相同或者相似的步骤。
图9是本申请的实施例提供的另一种写入请求处理装置的结构方框图,该写入请求处理装置可以通过硬件电路或者软件硬件的结合实现成为存储设备的部分或者全部。该写入请求处理装置可以包括:写入请求接收单元901、拒绝响应发送单元902、处理锁定单元903和锁定指示发送单元904。
写入请求接收单元901,用于执行与上述步骤403相同或相似的步骤,以及用于执行存储设备接收写入请求。
拒绝响应发送单元902,用于执行与上述步骤404(包括步骤404a、404b、404c、404d和404e)相同或相似的步骤。
处理锁定单元903,用于执行与上述步骤404下,存储设备处理目标业务请求,并在处理目标业务请求的过程中,锁定目标业务请求的逻辑地址的步骤相同或相似的步骤,或者,用于与上述步骤409及410相同或相似的步骤。
锁定指示发送单元904,用于执行与上述步骤411相同或相似的步骤。
需要说明的是:上述实施例提供的写入请求处理装置在存储数据时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的写入请求处理装置与写入请求处理方法的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
上述本申请的实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例由处理器执行的全部或部分步骤可以通过硬件来完成,也可以通过指令来控制相关的硬件完成,所述的指令可以存储于一种计算机可读存储介质中,上述提到的计算机可读存储介质可以是只读存储器,磁盘或光盘等。
以上所述,仅为本申请能够实现的一种具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应该以权利要求的保护范围为准。