一种处理写请求的方法、装置和数据中心与流程

文档序号:19925306发布日期:2020-02-14 16:50阅读:131来源:国知局
一种处理写请求的方法、装置和数据中心与流程
本发明实施例涉及存储
技术领域
,尤其是一种处理写请求的方法、装置和数据中心。
背景技术
:如今社会,商业组织通常会维护一个或多个数据中心,用来存储和管理信息。出于灾备(disasterrecovery)的目的,一般都会建设2个(或多个)数据中心。一个是主数据中心用于承担用户的业务,一个是备份数据中心用于备份主数据中心的数据、配置、业务等。主备数据中心之间一般有热备、冷备、双活三种备份方式。其中,双活数据中心,是指两个数据中心都处于运行状态,可以同时承担相同业务,提高数据中心的整体服务能力和系统资源利用率。两个数据中心互为备份,当单数据中心故障时,业务能自动切换到另一数据中心,业务不中断。通常,双活数据中心的每个数据中心包括主机和存储设备。当双活数据中心中的某一数据中心(下述简称本端)的存储设备从主机接收到一个写i/o请求之后,在差异日志上记录本次写请求的偏移量及差异指示,以表明在该偏移量所示的地址范围内的数据是跟本次写请求之前有差异的。当双写成功之后,即,写入本端以及双活数据中心的另一个数据中心之后,将上述差异日志中记录的本次写请求相关的记录删除。由于每个写i/o的处理都会在存储介质上做一次差异日志的记录和删除,导致写i/o时延加长,降低了双活数据中心的性能。技术实现要素:有鉴于此,本申请提供了一种处理写请求的方法、装置和数据中心,让多个写请求共享一条或多条差异日志,从而减少对存储设备的读取次数,降低写i/o时延。第一方面,本申请提供了一种处理写请求的方法,该方法应用于双活数据中心,所述方法由本端数据中心中的阵列控制器执行,其特征在于,所述方法包括:阵列控制器接收主机发送的写i/o请求,所述写i/o请求包括待写入数据以及写入所述待写入数据的地址;根据所述待写入数据的地址计算所述写i/o请求的i/o地址偏移量,所述i/o地址偏移量是指i/o请求中的数据所占的全部地址以指定粒度划分后,基于该指定粒度的新地址;判断内存已存在与所述i/o地址偏移量相对应的差异日志时,将所述写i/o请求中的数据写入本端的存储设备,并向对端数据中心的阵列控制器发送所述写i/o请求。可以理解的是,本发明实施例中是将写入数据的数据中心称为本端数据中心,而将双活数据中心中另外的数据中心称为对端数据中心。“本端”“对端”的概念也适用于数据中心中的设备。比如,对端数据中心中的阵列控制器也可以称为对端阵列控制器。本发明实施例中,以i/o地址偏移量为粒度生成相应的差异日志,当收到一个写i/o请求的时候,如果在内存中已经存在了相应的差异日志,那么不再往本端的存储设备中写入或删除差异日志,从而减少对存储设备的读写次数,提高了数据中心的性能。在一种可能的设计中,判断内存已存在与所述i/o地址偏移量相对应的差异日志时,所述方法还包括:将内存中记录的所述差异日志的引用次数加1;相应的,接收到所述对端数据中心的阵列控制器返回的写入对端存储设备的成功响应消息之后,将内存中记录的所述差异日志的引用次数减1。这样一来,当一次双写完成的时候,差异日志的引用次数便恢复到初始值(比如0)。一方面,借此可以判断某个写i/o请求双写是否成功。另一方面,也可以基于此判断差异日志被引用的热度。比如某差异日志的引用次数是否一直为初始值,如果是的话,可以考虑认定该差异日志为无用日志。在一种可能的是设计中,该方法还包括:判断内存中不存在与所属i/o地址偏移量相对应的差异日志时,在内存中创建所述i/o地址偏移量的差异日志,并将所述创建的差异日志存储到所述本端存储设备中;将所述写i/o请求中的数据写入本端的存储设备,并向对端数据中心的阵列控制器发送所述写i/o请求。由此可见,对于首次双写的写i/o请求,将相应的差异日志保存一份在内存中,供后续参考。从而避免了每次写操作都要对存储设备进行读取。在一种可能的设计中,判断内存中不存在与所属i/o地址偏移量相对应的差异日志时,该方法进一步包括:将创建的差异日志的引用次数加1;接收到所述对端数据中心的阵列控制器返回的写入对端存储设备的成功响应消息之后,将内存中记录的所述差异日志的引用次数减1。在一种可能的设计中,上述的写i/o请求的地址包括所述写i/o请求的起始地址以及数据长度,那么计算写i/o请求的i/o地址偏移量的过程包括:根据所述起止地址及数据长度计算所述写i/o请求的结束地址,并分别将所述起始地址和结束地址除以指定粒度,对结果取整得到所述i/o地址偏移量。随着差异日志写入内存中的次数越来越多,在另外一种可能的设计中,判断内存中的第一差异日志的引用次数持续为初始值的时长超过预定时长,将所述内存中以及本端存储设备中存储的第一差异日志删除。也就是说,对于那些不常被引用的差异日志进行清理,提高内存资源的利用率。第二方面,本申请还提供了一种控制装置。该控制装置位于双活数据中心的某一数据中心内,与该数据中心的主机以及存储设备相通信,并且还与对端数据中心的控制装置相通信。该控制装置包括接收模块、处理模块和内存模块,其中,所述接收模块,用于接收主机发送的写i/o请求,所述写i/o请求包括待写入数据以及写入所述待写入数据的地址;所述处理模块,用于根据所述待写入数据的地址计算所述写i/o请求的i/o地址偏移量,判断内存模块中已存在与所述i/o地址偏移量相对应的差异日志时,将所述写i/o请求中的数据写入本端的存储设备,并向对端数据中心的阵列控制器发送所述写i/o请求,其中,所述i/o地址偏移量是指i/o请求中的数据所占的全部地址以指定粒度划分后,基于该指定粒度的新地址;所述的内存模块,用于存储i/o地址偏移量及相应的差异日志。在一种可能的设计中,所述处理模块,还用于在判断内存模块已存在与所述i/o地址偏移量相对应的差异日志时,将内存模块中存储的所述差异日志的引用次数加1;并在接收到所述对端数据中心的阵列控制器返回的写入对端存储设备的成功响应消息之后,将内存模块中存储的所述差异日志的引用次数减1。在一种可能的设计中,所述处理模块,还用于在判断内存模块中不存在与所属i/o地址偏移量相对应的差异日志时,在内存模块中创建所述i/o地址偏移量的差异日志,并将所述创建的差异日志存储到所述本端的存储设备中;将所述写i/o请求中的数据写入本端的存储设备,并向对端数据中心的阵列控制器发送所述写i/o请求。在一种可能的设计中,所述处理模块,还用于在判断内存模块中不存在与所属i/o地址偏移量相对应的差异日志时,将所述创建的差异日志的引用次数存为1;接收到所述对端数据中心的阵列控制器返回的写入对端存储设备的成功响应消息之后,将内存模块中存储的所述差异日志的引用次数减1。在一种可能的设计中,所述处理模块,还用于判断内存模块中的第一差异日志的引用次数持续为初始值的时长超过预定时长,将所述内存模块中以及本端存储设备中存储的所述第一差异日志删除。第三方面,本申请还提供了一种阵列控制,该阵列控制器包括前端接口、后端接口、处理器和内存,其中,所述前端接口,用于跟主机通信;所述后端接口,用于跟存储设备通信;所述内存,用于缓存差异日志以及差异日志的引用次数,以及存储程序指令,当所述程序指令被所述处理器调用并执行时,执行上述第一方面的方法。第四方面,本申请还提供了一种数据中心,该数据中心包括:主机,用于向阵列控制器发送写i/o请求,所述写i/o请求包括待写入数据以及写入所述待写入数据的地址;存储设备,用于存储数据;以及如上述第二方面的控制装置或第三方面的阵列控制器。第五方面,本发明实施例提供了一种程序产品,该程序产品包括指令,当该程序产品被计算机执行的时候,使得该计算机执行上述第一方面的方法。本申请的实施例中,以i/o地址偏移量为粒度生成相应的差异日志,当收到一个写i/o请求的时候,如果在内存中已经存在了相应的差异日志,那么不再往本端的存储设备中写入或删除差异日志,从而减少对存储设备的读写次数,提高了数据中心的性能。附图说明为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍。图1是一种数据中心实施例的结构示意图;图2是一种写请求处理方法实施例的流程示意图;图3是一种阵列控制器实施例的结构示意图;图4是一种控制装置实施例的结构示意图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例提供的技术方案进行描述。现有技术的方案中,每个写i/o的处理都会在存储设备上做一次差异日志的记录和一次差异日志的删除,导致写i/o时延加长,降低了双活数据中心的性能。为了改善这种情况,本发明实施例提出了一种处理写请求的方法、装置和数据中心。在本发明的实施例中,尽量让多个写i/o请求,共享一条或多条差异日志,从而减少对存储设备的读取次数。如图1所示,本发明实施例提供的双活数据中心包括数据中心100和数据中心200。数据中心100和数据中心200都处于运行状态,同时承担业务,当有一个数据中心故障时,业务能够从故障的数据中心切换到非故障的数据中心,使业务不中断。其中,数据中心100包括主机101、阵列控制器102,和存储设备103。阵列控制器102在主机101与存储设备103之间,可以是一种计算设备,如服务器、台式计算机等等。在阵列控制器上102上安装有操作系统以及其他应用程序。阵列控制器102接收来自主机101的写操作,即,写i/o请求,缓存写i/o请求中携带的数据,根据写i/o请求作一些处理,并在满足一定条件时将其保存的数据写入存储设备103中。阵列控制器102还将该写i/o请求转发到数据中心200的阵列控制器202,实现双写。数据中心200的结构与数据中心100的结构和功能一样。数据中心200包括主机201,阵列控制器202,存储设备203。需要说明书的是,存储设备103和203分别是由一个或多个存储介质组成。存储介质可以是保电内存,cache,nvdimm,ssd,hdd等。下面结合附图2,以数据中心100写入数据为例来阐述本发明实施例的一种写i/o请求处理方法。下文中,为便于描述,也会将数据中心100成为本端数据中心,而且其中的存储设备103称为本端存储设备,主机101称为本端主机;将数据中心200称为对端数据中心。201,阵列控制器102接收主机101的写i/o请求。通常来说,写i/o请求携带有需要写入的数据以及写入该数据的地址,该地址通常是以起始地址以及数据长度来表达。202,阵列控制器102根据接收到的写i/o请求计算该写i/o请求的i/o地址偏移量,并根据计算得到的i/o地址偏移量,判断内存中是否存在与接收到的i/o请求的i/o地址偏移量对应的差异日志。其中,i/o地址偏移量是指i/o请求中的数据所占的全部地址以指定长度为粒度进行划分后,基于该指定粒度的新地址。举一具体的例子来说明,假设,i/o请求中的起始地址为5678(扇区),长度为3500扇区,指定粒度为1mb(即2048扇区),则可以通过下述方法计算获得i/o地址偏移量。首先,将i/o请求中的起始地址除以指定粒度,即5678/2048,对结果取整得到2;根据i/o请求的起始地址和数据长度获得i/o请求的结束地址,将i/o请求的结束地址除以指定粒度,即(5678+3500)/2048,对结果取整得到4。由此可见,在指定粒度为1mb情况下,i/o请求中的数据占据了键值为2、3、4的三个地址。也就是说,i/o地址偏移量2、3、4。上述的指定粒度可以为最小i/o请求的任意倍数,也就是4kb的倍数。通常,指定粒度越大,可共享差异日志的i/o请求越多,但是,调用差异日志进行数据恢复时处理的数据量也越大。203,若阵列控制器102判断内存中不存在与接收到的i/o请求的i/o地址偏移量对应的差异日志,则在内存中创建该偏移量的差异日志,将该差异日志的引用次数加1,并且将该差异日志存储到存储设备103中;若阵列控制器102判断内存中已经存在与接收到的i/o请求的i/o地址偏移量对应的差异日志,则将内存中记录的该差异日志的引用次数加1。本发明实施例中的差异日志可以以key-value的方式记录。具体地,在上面的例子中,内存以及存储设备中记录的差异日志如表1所示,包括分别以2、3、4为键值的3条差异日志。value取值为特定值(此处为1)的时候,表示该偏移量所示的地址范围内的数据是有差异的。keyvalue213141表1204,阵列控制器102将接收到的写i/o请求中的数据写入存储设备103,同时向对端数据中心200中的阵列控制器202发送该写i/o请求。205-208,对端阵列控制器202接收到该写i/o请求后,将写i/o请求的数据写入对端的存储设备203,写成功后返回写成功响应消息给阵列控制器102。209,阵列控制器102接收到对端阵列控制器202返回的写成功响应消息后,将内存中记录的该写i/o请求的i/o地址偏移量对应的差异日志的引用次数减1。具体地,在上面的例子中,内存中的引用次数的记录方式可以如表2所示,包括分别以2、3、4为键值的3条差异日志的引用次数,假设差异日志的初始值为0,那么,在双写成功之后,引用次数由之前的1减去1,得到初始值0。可以理解的是,如果差异日志的初始值不为0,那么双写成功后,引用次数恢复到初始值。表2由此可见,相比于现有技术中,每次写i/o请求都需要访问存储介质两次,一次是写入差异日志,一次是删除差异日志。本发明的实施例中,大大地减少了对存储介质的访问。以上面的实施例为例,现有技术如果要通过4kb的i/o写请求来写入1mb的数据,需要与存储介质交互512次。而采用上述本发明的上述实施例,在最有利场景中只需要通过对存储介质的两次访问。换言之,如果指定粒度为1mb,那么在连续4kb写i/o请求的场景下,相比现有技术最多可以减少510次对存储介质的访问,大大提高i/o性能。随着写i/o请求的不停写入,存储在存储介质上的差异日志也会积累得越来越多。为避免差异日志占用过多的存储空间,还可以在上述实施例的基础上引入差异日志淘汰机制。本发明的一个实施例中,结合上述图2相应的实施例,日志淘汰机制具体过程是这样的:在双活数据中心启动时,阵列控制器102启动日志淘汰任务,直至双活数据中心停止运行,该日志淘汰任务一直处于有效状态。日志淘汰任务可以是由阵列控制器调用某一线程来实现。在日志淘汰任务处于有效时,阵列控制器102通过设置定时器监控内存中的差异日志。如果某一差异日志的引用次数持续为初始值(比如0)的时间超过特定时长(此处以5ms为例),则根据该某一差异日志的键值,在内存中查找到该键值对应的差异日志,将找到的差异日志删除。并且,根据该某一差异日志的键值,将存储介质中存储的与该键值对应的差异日志也删除。可以通过设置定时器的方式来判断某一差异日志的引用次数持续为0的时长。具体地,当首次收到某一个写i/o请求之后,会在内存中创建相应的差异日志。当该写写i/o请求双写成功后,引用次数恢复到初始值时,启动定时器。随着时间推移,若下次收到一个写i/o请求,需要将该差异日志加1,也就是说,根据接收到的写i/o请求计算出的i/o地址偏移量正好与该差异日志对应的i/o地址偏移量一样,此时定时器清零;若一直不需要将该差异日志加1,那么定时器一直会计时,直到超时。可以理解的是,双写也可能失败,也就是说,阵列控制器102一直没收到对端阵列控制器202返回的成功响应,或者接收到对端阵列控制器202返回的失败响应。这种情况下,数据中心100和数据中心200的双活关系结束。若在这之后,阵列控制器102再收到写i/o请求,阵列控制器102将其中的数据写入本地存储设备中,并且将每个写i/o请求对应的差异日志写入存储设备中(跟前面不同的是,此处的差异日志是对应于i/o请求的,而不是对应于由指定粒度计算出来的i/o地址偏移量的)。待故障恢复后,数据中心100和数据中心200之间恢复双活关系,此时,启动后台拷贝任务,读取存储设备上的差异日志,根据读取出来的差异日志对应的i/o地址和长度读取本端的数据,将读出来的数据拷贝到对端。同理,对端的数据中心也做此处理,这样,两个数据中心的数据再次同步。数据中心200写入数据的过程以及删除差异日志的过程与上述一样,不再赘述。接下来,本发明实施例还提供了一种阵列控制器102。参考上述图1,阵列控制器102位于数据中心100内,与主机101、本端的存储设备103、以及对端数据中心的阵列控制器202通信。如图3所示,阵列控制器102包括前端接口1021、后端接口1022、处理器1023和内存1024。前端接口1021用于跟主机101通信。后端接口1022用于和存储设备103通信。处理器1023可能是一个中央处理器cpu,或者是特定集成电路asic(applicationspecificintegratedcircuit),或者是被配置成实施本发明实施例的一个或多个集成电路。内存1024可以为动态随机存储器(全称:dynamicrandom-accessmemory,简称:dram)、静态随机存储器(全称:staticrandom-accessmemory,简称:dram)、随机存储器(全称:random-accessmemory,简称:ram)等非永久性性存储器。内存1024用于缓存差异日志及差异日志的引用次数;该内存1024还可以用来暂时存放从主机接收的写i/o请求的数据。在本发明的一个实施例中,内存1024中还存储有程序指令,当这些程序指令被处理器1023调用并执行的时候,执行上述实施例中阵列控制102所执行的步骤。简略地说,包括:接收写i/o请求,计算该写i/o请求的i/o地址偏移量,根据计算结果判断内存中是否已经存在与所接收到的i/o请求的i/o地址对应的差异日志,并根据不同的情况在内存或者存储设备上记录相应的信息。以及,将写i/o请求发送给对端数据中心,待双写成功后处理相应的差异日志以及差异日志的引用次数。内存1024中还可以存着另外一些程序指令,当这些存储指令被处理器1023调用并执行的时候,会执行日志淘汰任务。本实施例中的具体实现可以参考上一个实施例,在此不再赘述。本发明实施例还提供了一种控制装置,该控制装置可以上述实施例的数据中心100中,如上图1中所示,数据中心100和数据中心200组成了双活数据中心。下文中,也会将数据中心100中的存储设备103称为本端存储设备,而将数据中心100中的主机101称为本端主机;将数据中心200称为对端数据中心。该控制装置包括接收模块401、处理模块402和内存模块403,其中,接收模块401,用于接收本端主机发送的写i/o请求,所述写i/o请求包括待写入数据以及写入所述待写入数据的地址;处理模块402,用于根据所述待写入数据的地址计算所述写i/o请求的i/o地址偏移量,判断内存模块403中已存在与所述i/o地址偏移量相对应的差异日志时,将所述写i/o请求中的数据写入本端存储设备,并向对端数据中心中的阵列控制器202发送所述写i/o请求,其中,所述i/o地址偏移量是指i/o请求中的数据所占的全部地址以指定粒度划分后,基于该指定粒度的新地址;所述的内存模块403,用于存储i/o地址偏移量及相应的差异日志。在一种可能的实现中,处理模块402,还用于在判断内存模块403已存在与所述i/o地址偏移量相对应的差异日志时,将内存模块403中存储的所述差异日志的引用次数加1;并在接收到所述对端数据中心的阵列控制器202返回的写入对端存储设备203的成功响应消息之后,将内存模块中存储的所述差异日志的引用次数减1。在一种可能的实现中,处理模块402,还用于在判断内存模块403中不存在与所属i/o地址偏移量相对应的差异日志时,在内存模块403中创建所述i/o地址偏移量的差异日志,并将所述创建的差异日志存储到所述本端的存储设备103中;将所述写i/o请求中的数据写入本端的存储设备103,并向对端数据中心的阵列控制器202发送所述写i/o请求。在一种可能的实现中,处理模块402,还用于在判断内存模块403中不存在与所属i/o地址偏移量相对应的差异日志时,将所述创建的差异日志的引用次数存为1;接收到所述对端数据中心的阵列控制器202返回的写入对端存储设备203的成功响应消息之后,将内存模块403中存储的所述差异日志的引用次数减1。在一种可能的实现中,处理模块402,还用于判断内存模块403中的第一差异日志的引用次数持续为0的时长超过预定时长,将所述第一差异日志删除。本发明实施例还提供了一种数据中心100,包括主机101,用于向阵列控制器102发送写i/o请求,所述写i/o请求包括待写入数据以及写入所述待写入数据的地址;阵列控制器102,用于根据所述待写入数据的地址计算所述写i/o请求的i/o地址偏移量,判断内存模块中已存在与所述i/o地址偏移量相对应的差异日志时,将所述写i/o请求中的数据写入本端的存储设备,并向对端数据中心的阵列控制器发送所述写i/o请求,其中,所述i/o地址偏移量是指i/o请求中的数据所占的全部地址以指定粒度划分后,基于该指定粒度的新地址;存储设备103,用于存储所述写i/o请求中的数据。在一种可能的实现中,所述阵列控制器102还用于在判断内存中已存在与所述i/o地址偏移量相对应的差异日志时,将内存中存储的所述差异日志的引用次数加1;并在接收到所述对端数据中心的阵列控制器202返回的写入对端存储设备203的成功响应消息之后,将内存中存储的所述差异日志的引用次数减1。在一种可能的实现中,所述阵列控制器102还用于在判断内存中不存在与所属i/o地址偏移量相对应的差异日志时,在内存中创建所述i/o地址偏移量的差异日志,并将所述创建的差异日志存储到所述存储设备103中;将所述写i/o请求中的数据写入本端的存储设备103,并向对端数据中心的阵列控制器202发送所述写i/o请求。在一种可能的实现中,所述阵列控制器102还用于在判断内存模块中不存在与所属i/o地址偏移量相对应的差异日志时,将所述创建的差异日志的引用次数存为1;接收到所述对端数据中心的阵列控制器202返回的写入对端存储设备的成功响应消息之后,将内存中存储的所述差异日志的引用次数减1。在另外一种可能的实现中,所述阵列控制器102还用于判断内存中的第一差异日志的引用次数持续为0的时长超过预定时长,将所述第一差异日志删除。可以理解的是,双活数据中心是可以有两个上述实施例所描述的数据中心来组成。本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明实施例所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。上述本发明实施例的功能也可以是由包括指令的计算机程序产品来实现,当该程序产品被计算机执行的时候,使得该计算机执行上述方法实施例中的部分或者全部步骤。最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的保护范围。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1