掌桥专利:专业的专利平台
掌桥专利
首页

多租户存储系统中的基于组的数据复制

文献发布时间:2023-06-19 09:29:07


多租户存储系统中的基于组的数据复制

背景技术

分布式存储系统通常包括路由器、交换机、网桥和其他物理网络设备,这些设备经由有线或无线网络链路互连大量服务器、网络存储设备和其他类型的计算设备。个体服务器可以托管一个或多个虚拟机、容器或其他类型的虚拟化组件,以提供用户或租户可访问的各种云计算服务。例如,将个体服务器被配置为向多个用户或租户提供数据存储服务。用户可以通过位于同一地点的云计算服务、网络应用程序编程接口(API)、或经由使用这样的网络API的应用来访问这样的数据存储服务。

发明内容

提供本“发明内容”是为了以简化的形式介绍一些概念,这些概念将在下面的“具体实施方式”中进一步描述。本“发明内容”不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。

分布式存储系统是现代在线计算服务的重要构建块。为了保护数据可用性和完整性,分布式存储系统通常在不同的服务器或存储节点上维持每个存储的数据对象的多个副本(copies)或副本(replicas)。分布式存储系统还依赖于复制的事务来确保对所存储的数据对象的所有副本进行更新的一致性和原子应用。但是,这样的复制的事务可能会导致较大的不可预测的处理延迟,并且从而影响分布式存储系统和对应存储服务的整体性能。

为了解决上述困难,已经开发了几种技术。例如,一种技术涉及在分布式存储系统中的复制事务期间将远程直接存储器访问(RDMA)应用于网络操作。RDMA涉及利用网络适配器(例如,网络接口卡或“NIC”)直接向/从应用存储器传输数据,并且从而消除在应用存储器与操作系统(OS)中的数据缓冲器之间复制数据。另一种技术涉及集成非易失性存储器(NVM)以绕过OS的存储堆栈以减少存储处理延迟。

尽管前述技术可以提高独立存储服务器的性能,但是这样的技术可能无法为多租户分布式存储系统中的复制事务提供低且可预测的延迟。例如,前述技术通常依赖于服务器的CPU来进行输入/输出(I/O)轮询。但是,在多租户分布式存储系统中,由于各种租户对CPU的处理要求,这种CPU依赖性可能会在处理延迟方面产生大量成本。

其次,即使没有I/O轮询,在服务器上的复制事务期间,服务器的CPU通常也会参与很多操作。在RDMA操作期间,通常使用CPU来实现所存储的数据对象的原子性、一致性、隔离性和持久性(ACID)中的一项或多项。例如,CPU可以用于(i)日志记录对数据对象的数据更新(“日志”或“存储日志”),处理日志记录,并且截断日志,以确保复制事务中的修改是原子发生的(即,全部或全无);(ii)运行一致性协议,以确保在向存储应用发送确认通知(ACK)之前,所有副本均达到相同状态;(iii)锁定所有副本以隔离不同的复制事务;iv)和/或确保在发送ACK之前,来自网络堆栈的所有复制数据均到达持久性存储介质。

为了确保上述ACID属性,通常在每个复制阶段暂停复制事务以使CPU完成上面讨论的某些任务。不幸的是,在多租户分布式存储系统中,成百上千个存储实例(例如,数据库实例)可能位于一个存储节点上。在这样的分布式存储系统中,服务器的CPU可能会频繁执行进程或上下文的切换。因此,由于CPU延迟,服务器上的复制事务可能具有较高的处理延迟和不可预测的性能。

所公开的技术的几个实施例旨在通过减少并且甚至消除在复制事务期间保持副本的存储节点的CPU上放置的工作量来提高分布式存储系统中的可预测性并且减少数据复制延迟。与发起复制事务的“主存储节点”相反,保存有副本的存储节点在本文中称为“副本存储节点”。可以将由CPU先前在副本存储节点上执行的操作或任务卸载到耦合到一个或多个NVM的一个或多个支持RDMA的NIC(RNIC)以进行存储。在某些实现中,提供了用于NVM访问的基于组的NIC卸载功能或原语。利用这种原语,原始存储节点可以对被存储在一组副本存储节点中的数据对象执行在逻辑上相同的存储器操作,而无需涉及副本存储节点的CPU。这样,可以在副本存储节点上的CPU使用率较低甚至没有的情况下实现可预测和有效的复制事务性能。

为了实现前述技术效果,所公开的技术的一个方面涉及一种用于预先发布RDMA数据操作的技术,诸如数据发送操作(SEND)、数据接收操作(RECV)和具有RDMA条件执行操作(即,WAIT)的数据写入操作(WRITE),该操作引起RNIC等待某些事件,然后再执行工作队列中的对应的RDMA数据操作。例如,可以预先发布RNIC,在RNIC的工作队列中,在WAIT之后是以RECV为条件的WRITE。因此,WAIT以RECV为条件,而WRITE在FIFO工作队列中在WAIT之后,并且因此被WAIT阻塞或以WAIT为条件。在操作中,一旦RNIC完成RECV,就可以在RNIC处自动触发WAIT,以允许执行预先发布的WRITE,以经由RDMA网络将数据块写入另一副本存储节点。

所公开技术的另一方面涉及一种用于允许一个存储节点处的RNIC入队或修改其他存储节点处的其他RNIC上的RDMA数据操作的参数的技术。在某些实现中,每个存储节点处的NIC驱动器可以注册存储器区域(称为“元数据区域”),该存储器区域从复制存储群集中的一个或多个其他NIC是RDMA可访问的。元数据区域可以被配置为保存一个或多个工作队列,每个工作队列包含各种RDMA数据操作和/或RDMA条件执行操作。这样,第一存储节点处的RNIC因此可以入队第二存储节点的第二RNIC中的RDMA数据操作。第二RNIC还可以执行入队第三存储节点的第三RNIC中的RDMA数据操作。通过结合上述两种技术,一个存储节点处的RNIC可以对其他存储节点处的一组其他RNIC进行编程,以执行复制事务,如下面更详细描述的。

在一种实现中,主存储节点可以被配置为以菊花链方式将数据复制到复制组中的一个或多个副本存储节点。主存储节点可以包括第一RNIC,第一RNIC具有带有WRITE和SEND的工作队列。WRITE可以被配置为经由第二RNIC将数据块(例如,512KB)从主存储节点的存储器中的存储器位置写入副本存储节点处的另一存储器中的另一存储器位置。副本存储节点可以在第一工作队列中包括RECV,在第二工作队列中包括一系列WAIT、WRITE和SEND。RECV被操作地耦合到WAIT,使得在第一工作队列中的RECV的完成触发第二工作队列中的WRITE和SEND。

在操作中,第一RNIC执行对应的工作队列中的WRITE,以将数据块写入副本存储节点处的存储器中的存储器位置。然后,第一RNIC执行SEND,以将写入的数据块的元数据发送到第二RNIC。元数据可以包括数据块的存储器位置(例如,存储器地址)和数据长度(例如,以千字节、兆字节等为单位)。响应于来自第一RNIC的SEND,第二RNIC执行第一工作队列中的RECV,以接收元数据,并且根据所接收的元数据更新第二工作队列中的WRITE和SEND的参数(例如,存储器描述符)。在第一工作队列中的RECV完成之后,第二工作队列中的WAIT将被自动触发。在触发WAIT之后,副本存储节点处的第二RNIC可以执行第二工作队列中的WRITE,以将数据块的副本从由来自副本存储节点的元数据标识的存储器位置写入另一副本存储节点。一旦执行了WRITE,副本存储节点就可以执行第二工作队列中的SEND,以将数据块的其他元数据发送到另一副本存储节点,以触发该副本存储节点处的其他WRITE和SEND操作,如上所述。

这样,通过顺序地执行用于写入的数据块的WRITE和用于发送所写入的数据块的元数据的SEND,可以按照菊花链方式在复制组中复制该数据块,而无需在副本存储节点的CPU上施加过多的工作负荷。使用上述技术的实现进行的几个示例实验表明,数据插入/更新操作减少了79%,数据复制的平均延迟与第99%的延迟之间的差距减少了81%,而副本存储节点上的CPU使用率则从通常的充分利用降低到了近0%。因此,与其他复制技术相比,通过将复制事务从副本存储节点的CPU卸载到对应RNIC,可以减少副本组中复制事务的延迟以及副本存储节点的CPU上的工作负载。

附图说明

图1是示出根据所公开的技术的实施例的实现基于组的数据复制的分布式存储系统的示意图。

图2A至图2D是示出根据所公开的技术的实施例的在基于组的数据复制期间图1的分布式存储系统的某些硬件/软件组件的示意图。

图3A和图3B是示出根据所公开的技术的实施例的在存储器WRITE期间图1的分布式存储系统的某些硬件/软件组件的示意图。

图4A至图4C是示出根据所公开的技术的实施例的在原子操作期间图1的分布式存储系统的某些硬件/软件组件的示意图。

图5和图6是示出根据所公开的技术的实施例的用于基于组的数据复制过程的流程图。

图7是适合于图1中的分布式存储系统的某些组件的计算设备。

具体实施方式

下面描述用于数据中心或其他合适的分布式存储系统中的基于组的数据复制的系统、设备、组件、模块、例程、数据结构和过程的某些实施例。在以下描述中,包括组件的特定细节以提供对所公开的技术的某些实施例的透彻理解。相关领域的技术人员还将理解,该技术可以具有其他实施例。该技术也可以在没有下面参考图1至图7描述的实施例的几个细节的情况下实践。

如本文中使用的,术语“分布式存储系统”通常是指具有多个网络节点的互连的计算机系统,该多个网络节点将多个服务器或存储节点彼此互连和/或互连到外部网络(例如,互联网)。个体服务器或存储节点可以包括一个或多个持久性存储设备。个体服务器或存储节点还可以被配置为执行本文中所述的复制事务,而不会在保持副本的存储节点上引起大量的CPU使用。术语“网络节点”通常是指物理网络设备。示例网络节点包括路由器、交换机、集线器、网桥、负载均衡器、安全网关或防火墙。“存储节点”通常是指被配置为实现例如一个或多个虚拟机、虚拟交换机、虚拟磁盘或其他合适的虚拟化组件的物理计算设备。例如,存储节点可以包括具有管理程序的服务器,该管理程序被配置为支持一个或多个虚拟存储设备、虚拟机、虚拟交换机或其他合适类型的虚拟组件。若干存储节点可以在逻辑上链接在一起(例如,按链状链接)以形成“复制组”。

本文中还使用的“主存储节点”通常是指被配置为与用户或租户接口的存储节点。主存储节点可以被配置为从用户接收对于修改或更新复制组中存储的数据对象的请求。主存储节点还可以被配置为发起复制事务,以在复制组中的其他存储节点上创建并且存储更新的其他副本。附加副本在本文中通常称为“副本”,而保持副本的附加存储节点称为“副本存储节点”。

此外,如本文中使用的,远程直接存储器访问(RDMA)通常是指允许计算机、虚拟机、应用或应用服务经由计算机网络直接访问远程计算机的存储器位置而无需在任一端点上涉及操作系统的技术。RDMA连接可以允许计算机之间的超低网络延迟通信(例如,小于25μs)。RDMA在个体连接上也可能具有较低的CPU使用率和较高的带宽。RDMA可以按照各种方式而被实现。在一个示例中,RDMA可以使用诸如硬件连接适配器(HCA)或其他支持RDMA的网络接口卡(RNIC)等硬件组件而被实现,以使用队列对(QP)和完成队列(CQ)处理RDMA通信。队列对可以包括写入工作队列和对应的读取工作队列。与基于TCP/IP的网络相比,RDMA网络可以提供更高的吞吐量、更低的延迟和更低的CPU使用率。

术语“工作队列”通常是指表示要由RNIC以先进先出方式处理的一系列RDMA操作或“工作请求”的数据结构。示例工作请求可以包括单面或双面操作。示例性的单面工作请求包括WRITE工作请求,该WRITE工作请求经由第二RNIC将数据块从第一RNIC直接写入远程存储节点的存储器。双面工作请求需要RDMA连接的两个端点的操作才能完成事务。例如,来自第一RDMA端点的SEND可以向第二RDMA端点发送数据块,该第二RDMA端点具有与第一RDMA端点中的SEND相对应的RECV工作请求。在指示SEND-RECV事务完成之前,RECV可以接收数据块,为数据块分配存储器位置,并且将数据块放入所分配的存储器位置。

工作请求可以包括具有在工作队列中包含的一个或多个存储器描述符或参数的数据结构。例如,WRITE可以包括存储器描述符,该存储器描述符被配置为存储表示要被写入的数据块的存储器地址、数据块的大小、要写入的目的地存储器地址、和/或其他合适的信息。将工作请求放入工作队列称为将工作请求“发布”到工作队列。根据所公开的技术的实施例,可以在发起消耗工作请求的复制事务之前将工作请求“预先发布”在工作队列中。工作请求可以通过NIC驱动器或由存储节点的处理器执行的其他合适的软件组件来发布。

RNIC可以监测对应的工作队列中的任何工作请求,并且立即按顺序执行该工作请求,除非遇到有条件的执行工作请求,即WAIT。WAIT工作请求可以在逻辑上被配置为链接到另一工作队列中的另一工作请求。另一工作请求的完成会自动触发RNIC执行工作队列中在WAIT之后的另一工作请求。例如,WAIT可以链接到另一工作队列中的RECV。在RECV完成之后,RNIC自动触发WAIT以执行在WAIT之后的另一工作请求,例如WRITE、SEND等。因此,预先发布在工作队列中在WAIT之后的工作请求(诸如WRITE、SEND等)可能会阻止RNIC立即执行WRITE、SEND等。

复制存储系统(例如,块存储、键值存储和数据库)通常维持所存储的数据对象的多个副本,以避免在电源或其他系统故障期间丢失数据。链复制是用于创建和维持数据对象的多个副本的主备份复制的一种形式。在链复制中,副本存储节点在逻辑上被布置为线性链。写入开始于链的头部(例如,主存储节点),并且在第一阶段沿着链向下传播。链的头部开始执行事务,并且通过创建本地日志条目并且执行合适的锁定来准备要提交的事务。只有这样,链的头部才将事务转发到链中的下一存储节点,该节点重复操作并且将事务沿着链向下转发。当链的尾部接收到请求时,尾部发送ACK,该ACK传播回头部。每个存储节点都获取ACK,并且作为响应提交事务。最后,头部获取ACK并且将事务ACK发送到请求改变的应用以指示已经应用机会。

当执行链式或其他合适类型的复制时,分布式存储系统通常使用某些协议来确保对数据对象的每次更新或改变都被应用于足够的副本以维持可用性和持久性。这样的协议包括用于在指示数据更新是持久性的并且变为对数据使用者可用之前对多个副本进行相同改变的机制。应用这样的改变通常被构造为原子事务,包括一组读写操作。例如,事务可能会修改数据集中的数据对象X和Y。当同时应用X和Y的改变时,该事务是原子的,并且因此避免了仅改变X或Y之一。

存储节点每次改变数据对象可以执行很多子操作。例如,在某些实现中,分布式存储系统可以使用日志记录(撤消/重做/预写)来实现原子性。首先将数据对象的新值写入日志或存储日志,然后根据日志逐一修改数据对象。如果修改由于某种原因而暂停,则只需重新应用日志中的新值即可确保原子性。此外,在处理日志时,保持副本的存储节点可以阻止所实现的锁定所涉及的数据对象中的其他事务。例如,在上面的示例中,分布式存储系统可以在处理日志的同时锁定对象X和Y。

然而,任何前述子操作中的减慢都可能减慢整个复制事务,并且因此导致复制事务的不可接受的处理延迟。特别地,在多租户分布式存储系统中,来自CPU的处理延迟可能导致数据复制无响应、链式复制等。副本存储节点处的线程(即,一系列编程指令)通常在副本存储节点的CPU上调度,以便经由网络栈接收日志,并且随后经由存储栈存储日志。线程还参与两阶段提交协议和链(或另一种类型)复制方案。然后,线程处理日志并且根据日志更新实际数据对象。

在多租户分布式存储系统中,CPU在多个租户之间共享,每个租户执行一个或多个进程。这样的执行共享有时会导致大量的CPU负载,并且导致不可预测的调度延迟。计划在CPU上运行的延迟可能会导致等待ACK或锁定的写入延迟过大。数据分区进一步加剧了该问题。为了提高服务器资源利用率,大型分布式存储系统通常将所存储的数据划分为较小的分区,以使得每个服务器存储大量租户的部分或分区。例如,在线数据库分区的存储空间范围为5GB至50GB,而典型的服务器的存储空间则为4TB至8TB。因此,由于每个租户在至少一个进程中是隔离的,因此每个服务器托管数百个租户,这些租户转换为数百个副本事务处理。如此大量的进程很容易使存储节点处的CPU饱和,并且导致高延迟。

所公开的技术的几个实施例可以通过将复制事务的某些操作卸载到副本存储节点的RNIC以便减少或避免CPU参与数据复制的关键路径来解决至少一些前述困难。根据所公开的技术的实施例,副本存储节点处的CPU仅花费很少的周期来初始化所公开的基于组的复制过程,并且因此通常不参与后续的复制事务操作。相反,RNIC自身可以执行先前在CPU上运行的操作,例如,以修改NVM中的数据。在以下描述中,所公开的技术的实施例被描述为用于将复制的事务操作卸载到RNIC以进行链复制的机制。然而,所公开的技术的几个实施例也可以在其他复制技术、非ACID系统和各种一致性模型中被实现。

将复制事务操作卸载到RNIC的一个挑战是使用RNIC执行诸如日志处理等任务而没有CPU。为了解决该挑战,所公开的技术的几个实施例旨在提供一组基于组的RDMA原语而不是端对端RDMA。在卸载到RNIC的复制事务期间的这样的操作的示例可以包括:1)将操作日志复制到所有副本,并且确保每个副本已经准备好提交;2)在每个副本上获取锁定;3)在操作日志中执行事务;4)刷新所有高速缓存(如果适用)以使事务持久化;5)释放锁定。

通过将前述操作卸载到RNIC,所公开的技术的几个实施例可以减少或甚至消除在复制事务期间放置在副本存储节点的CPU上的处理工作量。利用本文中公开的基于组的原语,可以在副本上执行在逻辑上相同的存储器数据操作,而不涉及副本存储节点的CPU。这样,如下面参考图1至图7更详细描述的,可以在保持副本的副本存储节点上几乎没有CPU使用率的情况下实现可预测和有效的复制性能。

图1是示出根据所公开的技术的实施例的实现基于组的数据复制的分布式存储系统100的示意图。如图1中所示,分布式存储系统100可以包括与用户101相对应的客户端设备102和通过诸如互联网等计算机网络(未示出)互连到客户端设备102的计算结构103。即使在图1中示出了分布式存储系统100的特定组件,但是在其他实施例中,分布式存储系统100也可以包括附加的和/或不同的组件或布置。例如,在某些实施例中,分布式存储系统100还可以按照其他合适的配置包括附加的网络存储设备、网络设备、主机和/或其他合适的组件(未示出)。

客户端设备102可以包括计算设备,该计算设备促进用户101经由计算机网络访问由存储节点104提供的云存储服务。在一个实施例中,客户端设备102包括台式计算机。在其他实施例中,客户端设备102还可以包括膝上型计算机、平板计算机、智能电话或其他合适的计算设备。尽管在图1中出于说明目的而示出了一个用户101,但是在其他实施例中,分布式存储系统100可以促进任何合适数目的用户101访问云存储或由分布式存储系统100中的计算结构103提供的其他合适类型的计算服务。

如图1中所示,计算结构103可以包括通过计算机网络107互连的多个存储节点104。在图1中,出于说明目的,三个存储节点104(即,分别为第一、第二存储节点和第三存储节点104a-104c)被示出为复制组。在其他实施例中,计算结构103还可以在复制组和/或附加复制组中包括四个、五个、六个或任何其他合适数目的存储节点104。

在所示的实施例中,复制组的存储节点104被配置为例如由存储系统控制器(未示出)以环形配置逻辑互连,如由箭头105所示。例如,第一存储节点104a连接到第二存储节点104b,第二存储节点104b连接到第三存储节点104c。然后,第三存储节点104c连接到第一存储节点104a以完成环。在其他实施例中,存储节点104也可以按照星形或其他合适类型的配置互连。在图1和本文中的其他图中,第一存储节点104a被示出为主或“头部”存储节点,而第二存储节点104b和第三存储节点104c被示出为副本存储节点。特别地,第三存储节点104c被示出为“尾部”存储节点104。然而,这种表示仅是为了描述的方便。在其他实现中,第二存储节点104b或第三存储节点104c还可以是除了或代替第一存储节点104a的主存储节点。

计算机网络107可以包括任何合适类型的网络。例如,在一个实施例中,计算机网络107可以包括具有路由器、交换机、负载平衡器、防火墙、和/或实现基于聚合以太网的RDMA(RoCE)协议的其他合适的网络组件的以太网或快速以太网。在其他实施例中,计算机网络107也可以包括具有对应网络组件的InfiniBand网络。在其他实施例中,计算机网络107还可以包括前述和/或其他合适类型的计算机网络的组合。

如图1中所示,个体存储节点104可以包括被操作地彼此耦合的处理器112、存储器113、RNIC 114和持久性存储装置115。在其他实施例中,存储节点104还可以包括被配置为接受来自操作员和/或自动化软件控制器(未示出)的输入并且向其提供输出的输入/输出设备、或者其他合适类型的硬件组件。

处理器112可以包括微处理器、L2/L3高速缓存和/或其他合适的逻辑设备。存储器134可以包括易失性和/或非易失性介质(例如,ROM;RAM、磁盘存储介质;光学存储介质;闪存设备和/或其他合适的存储介质)和/或其他类型的计算机可读存储介质,该介质被配置为存储从处理器112接收的数据以及用于处理器112的指令(例如,用于执行下面参考图5至图7讨论的方法的指令)。尽管在个体存储节点104中仅示出了一个处理器112和一个存储器113以用于说明,但是在其他实施例中,个体存储节点104可以包括两个、六个、八个或任何其他合适数目的处理器112和/或存储器113。

RNIC 114可以被配置为促进经由计算机网络107的存储节点104之间的RDMA通信。RNIC 114可以包括支持RDMA的网络适配器、LAN适配器、物理网络接口、或其他合适的硬件电路系统和/或固件,该硬件电路系统和/或固件用于通过根据以太网、光纤通道、Wi-Fi或其他合适的物理和/或数据链路层标准经由网络介质(例如,光纤)发射/接收数据(例如,作为分组)来实现成对的存储节点104之间的通信。支持RDMA的NIC的一个示例是由加利福尼亚州桑尼维尔的Mellanox Technologies,Inc.提供的

持久性存储装置115可以被配置为为用户101提供数据对象的非易失性存储器。持久性存储装置115可以包括一个或多个非易失性存储设备。例如,持久性存储装置115可以包括磁盘设备(诸如软盘驱动器和硬盘驱动器(HDD))、光盘驱动器(诸如致密盘(CD)驱动器或数字通用磁盘(DVD)驱动器)、固态驱动器(SSD)和磁带驱动器。在某些实施例中,RNIC114可以被配置为在不涉及处理器112的情况下直接访问和/或修改持久性存储装置115中的数据存储。在其他实施例中,可以从个体存储节点104中去除持久性存储装置115。相反,计算机结构103可以包括所有存储节点104可访问的集中式存储设备(未示出)。

个体存储节点104可以包括由处理器112可执行以向用户101提供云存储服务或其他合适计算服务的合适指令。例如,第一存储节点104a处的存储器113可以包含由处理器112可执行以提供存储应用122(如图2A中所示)以促进用户101上载、检索、修改和/或以其他方式管理被存储在例如存储节点104的持久性存储装置115中的数据对象109(例如,数据库记录)的指令。如图1中所示,在一个操作中,用户101可以将请求110传输到第一存储节点104a,以检索数据对象109的副本。作为响应,第一存储节点104a可以获取所请求的数据对象109的副本,并且将该副本传输回客户端设备102。

在另一操作中,用户101还可以将另一请求110传输到第一存储节点104a,以使用更新111来修改所存储的数据对象或创建要被存储在计算结构103中的新数据对象109。响应于接收到请求110,第一存储节点104a可以将所接收的更新111存储在本地存储器位置作为存储日志123(图2A中所示)。然后,第一存储节点104a可以调用组写入事务,以便以顺序方式将所接收的存储日志123的副本传输到第二存储节点104b和第三存储节点104c。

一旦在第二存储节点104b和第三存储节点104c处成功接收到所传输的存储日志123,则第三存储节点104c可以向第一存储节点104a提供确认通知(ACK)。响应于该ACK,第一存储节点104a可以调用组存储器复制事务以将存储日志123提交给对应数据对象109的本地副本。然后,第一存储节点104a可以响应于用户101,即,更新111已经被接收并且被存储在分布式存储系统100中。在组写入和存储器复制事务期间,第二存储节点104b和第三存储节点104c处的处理器112通常不用于促进这些事务的操作。取而代之,这种复制的事务的操作由RNIC 114执行,并且因此作为在复制组中执行复制的事务的瓶颈,去除了副本存储节点处的处理器112。某些基于组的复制事务的示例操作在下面参考图2A至图4C更详细地描述。

图2A至图2D是示出根据所公开的技术的实施例的在组写入事务的各阶段期间分布式存储系统100的某些硬件/软件组件的示意图。在图2A至图2D和本文中的其他图中,为清楚起见,省略了图1的分布式存储系统100和存储节点104的某些组件。例如,在图2A至图2D中,为了便于说明,从第一存储节点104a和第二存储节点104b中省略了持久性存储装置115。

在图2A至图2D和本文中的其他图中,各个软件组件、对象、类、模块和例程可以是用C、C++、C#、Java和/或其他合适的编程语言被编写为源代码的计算机程序、过程或进程。组件可以包括但不限于一个或多个模块、对象、类、例程、属性、进程、线程、可执行文件、库或其他组件。组件可以是源或二进制形式。组件还可以包括编译之前的源代码的各方面(例如,类、属性、过程、例程)、编译的二进制单元(例如,库、可执行文件)、或在运行时实例化和使用的工件(例如,对象、进程、线程)。

系统内的组件可以在系统内采用不同的形式。作为一个示例,系统包括第一组件、第二组件和第三组件,可以但不限于包括其中第一组件是以源代码表示的属性、第二组件是二进制编译库并且第三组件是在运行时创建的线程的系统。计算机程序、过程或进程可以被编译成对象、中间或机器代码并且被呈现以用于由个人计算机、网络服务器、膝上型计算机、智能电话和/或其他合适的计算设备的一个或多个处理器执行。

同样,组件可以包括硬件电路。本领域技术人员应当认识到,硬件可以被认为是化石软件,并且软件可以被认为是液化硬件。仅作为一个示例,组件中的软件指令可以被刻录到可编程逻辑阵列电路,或者可以被设计为具有适当集成电路的硬件电路。同样,硬件可以用软件来模拟。源、中间和/或目标代码和相关数据的各种实现可以被存储在计算机存储器中,该计算机存储器包括只读存储器、随机存取存储器、磁盘存储介质、光存储介质、闪存设备和/或其他合适的计算机可读存储介质,不包括传播信号。

如图2A中所示,第一存储节点104a处的处理器112可以例如从存储器113执行合适的指令以提供存储应用122和复制驱动器124。存储应用122可以由处理器112配置和执行以促进存储、检索、修改、删除、或可以对分布式存储系统100中存储的数据对象109(图1)执行的其他合适的数据操作。存储应用122可以是独立应用,也可以是网络可访问的应用。一种示例存储应用是由加利福尼亚山景城的Google LLC提供的Google Drive。

根据所公开的技术的实施例,复制驱动器124可以被配置为实现一组基于组的复制功能或原语,以促进存储应用122执行数据复制事务而无需涉及副本存储节点处的处理器112。特别地,图2A至图2D示出了组写入原语(gWRITE)的各阶段,该组写入原语允许调用者(例如,第一存储节点104a处的存储应用122)将诸如存储日志123等数据写入一组远程存储节点104(例如,第二节点104b和第三节点104c)的一个或多个存储器区域,而不涉及远程存储节点104的处理器112,如下面更详细地描述的。

如图2A中所示,第一存储节点104a被配置为与用户101的客户端设备102(图1)交互。例如,第一存储节点104a可以接收对分布式存储系统100中存储的数据对象的更新111。作为响应,第一存储节点104a可以将所接收的更新作为存储日志123存储在存储器113中。第一存储节点104a还可以利用本文中公开的一个或多个组复制原语来将所接收的更新111复制到复制组中的其他存储节点。

在所公开的技术的一方面,两个RDMA通信信道、即存储节点104处的两个RDMA连接的工作队列121的队列对(QP)之间的基于事件的工作请求触发机制可以被用来自动触发RNIC 114中的RDMA数据操作。例如,如图2A中所示,存储节点104的存储器113可以各自在对应的存储器113中分配一个或多个存储器区域,以保存RDMA信道或QP的一个或多个工作队列121。例如,第一存储节点104a处的工作队列121可以与第二存储节点104b处的第一工作队列121a形成QP。

工作队列121每个可以包含一个或多个不同类型的RDMA操作或“工作请求”。例如,如图2A中所示,第一存储节点104a处的工作队列121可以包括WRITE工作请求126和SEND工作请求128。另一方面,第二存储节点104b可以包括第一工作队列121a和第二工作队列121b。第一工作队列121a可以包括一个或多个RECV工作请求129,而第二工作队列121b可以包括WAIT、WRITE和SEND工作请求130、126和128。WAIT工作请求130被配置为在触发第二工作队列121b中的其他工作请求之前,等待第一工作队列121a中的一个或多个工作请求的完成。在所示的示例中,WAIT工作请求130被配置为在自动触发第二工作队列121b中的WRITE和SEND工作请求126和128之前,等待第一工作队列121a中的第一RECV工作请求129的完成。

在某些实施例中,个体存储节点104可以在对应的工作队列121中预先发布各种工作请求。例如,第二存储节点104b上的复制驱动器124(未示出)或其他合适的软件组件可以预先发布第一工作队列121a中的RECV工作请求129以及第二工作队列121b中的WAIT、WRITE和SEND工作请求。复制驱动器124还可以周期性地补充第一工作队列121a和第二工作队列121b,以在相应工作队列121中维持预设数目的工作请求。在其他实施例中,个体存储节点104还可以按照其他合适的方式发布前述工作请求。

根据所公开的技术的实施例,个体存储节点104上的RNIC 114可以周期性地、连续地或以其他合适的方式监测对应的工作队列121,并且以先进先出方式执行存在于工作队列121中的任何工作请求。例如,如图2A中所示,第一存储节点104a上的RNIC 114可以在SEND工作请求128之前执行WRITE工作请求126。通过使用包括例如到第一存储节点104a中的存储器113中的存储日志的存储器指针和存储日志123的大小等参数来执行WRITE工作请求126,第一存储节点104a处的RNIC 114可以将存储日志123'的副本写入或传输到第二存储节点104b处的存储器113的存储器位置。在图2A至图4C中,正在执行的工作请求以深色背景示出,而已经执行的工作请求以虚线边框示出。待执行的工作请求以浅色背景显示。

即使现在将存储日志123'存储在第二存储节点104b的存储器113中,第二队列121b中的WRITE和SEND工作请求126和128也没有存储日志123'的参数(例如,本地源地址、要被写入的数据大小、或远程目的地地址),因为可以将这些工作请求126和128预先发布到第二队列121b。由于WAIT工作请求130只能触发预先发布的工作请求,因此第二存储节点104b处的RNIC 114只能在预定义存储器位置转发固定大小的数据缓冲区(本文中称为“固定复制”)。但是,固定复制对于存储器管理灵活的常规存储系统可能是不够的。

为了解决该限制,所公开的技术的另一方面涉及用于复制任意数据的远程工作请求操纵。为了能够进行远程工作请求操纵,可以将第一工作队列121a和第二工作队列121b注册为第二存储节点104b的存储器113中的RDMA可写存储器区域。这样的RDMA可写存储器区域允许第一存储节点104a修改第二存储节点104b上的预先发布的WRITE、READ或其他合适类型的工作请求的存储器描述符(被存储在工作队列结构中)。例如,如图2B中所示,在触发第二存储节点104b上的第二队列121b中的WAIT工作请求130之前,第一存储节点104a上的RNIC 114执行SEND工作请求128以向第二存储节点104b上的RNIC 114传输包含第二存储节点104b上的存储日志123'的参数的元数据125。第一工作队列121a中的RECV工作请求129接收元数据125,并且将元数据125写入包含第二工作队列121b的存储器区域,以修改第二工作队列121b中的WRITE和SEND工作请求126'和128'的合适的存储器描述符。一旦被修改,第二工作队列121b中的WRITE和SEND工作请求126'和128'可以包含表示例如存储日志123'的本地源地址、要被写入的数据的大小、或第三存储节点104c处的远程目的地地址的数据(如图2C中所示)。

一旦RECV工作请求129完成,如图2C中所示,第二存储节点104b处的第二工作队列121b中的WAIT工作请求130可以被自动触发。结果,第二存储节点104b处的RNIC 114执行WRITE工作请求126',以将存储日志123'的另一副本写入第三存储节点104c的存储器113中的存储器位置。这样,最初从用户101接收的存储日志123可以从第一存储节点104a依次传播到第二存储节点104b和第三存储节点104c。这样的传播仅涉及在每个存储节点104上执行预先发布在对应工作队列121中的工作请求,而无需处理器102的参与(用于预先发布工作请求的几个周期除外)。

所公开的技术的几个实施例还可以利用第三存储节点104c的第二队列121b处的WAIT工作请求130来将ACK作为组操作ACK反弹回第一存储节点104a。例如,如图2D中所示,第二存储节点104b处的RNIC 114可以执行SEND工作请求128'以将元数据125'传输到第三存储节点104c。在第三存储节点104c的第一队列121a处的RECV工作请求129的完成之后,第三存储节点104c的第二队列121b处的WAIT工作请求130被触发以执行SEND工作请求128。结果,可以向第一存储节点104a传输ACK 127,以指示复制组中的存储日志123的复制已经完成。

在很多复制存储系统中,存储节点104的处理器112通过将与复制事务相对应的存储日志123从日志区域复制到持久性数据区域(例如,图1中的持久性存储装置115)来执行或提交事务。所公开的技术的几个实施例涉及基于组的远程存储器复制(gMEMCPY)原语,该原语允许第一存储节点104a指导远程RNIC 114针对给定参数(诸如数据源地址、目的地地址和数据大小)在对应存储器113上执行存储器复制。当第一存储节点104a经由该原语在复制组中的所有其他存储节点104上执行事务时,RNIC 114可以将存储日志123从日志区域复制到持久数据区域而不涉及处理器112。在特定实现中,基于组的远程内存复制原语将复制组ID、源区域和目的地区域的存储器偏移以及正被复制的数据大小作为输入。当调用gMEMCPY原语时,第二存储节点104b和第三存储节点104c上的RNIC 114针对给定的源和目的地偏移来执行针对对应存储器113的存储器复制,而无需涉及对应的处理器112,如下面参考图3A和图3B更加详细地描述的。

如图3A中所示,可以在存储节点104上创建其他QP,以在第二存储节点104b和第三存储节点104c的每个上本地执行组存储器复制操作。例如,第一存储节点104a可以包含另一队列121',而第二存储节点104b可以分别包含第一、第二和第三队列121a'-12ac'。在所示的示例中,第一存储节点104a上的队列121'包括被配置为向第二存储节点104b传输或发送元数据125”的SEND工作请求128'。元数据125”可以包括表示例如复制组ID、源区域和目的地区域的存储器偏移以及正被复制的数据的大小的数据。在从第一存储节点104a接收到元数据125”时,第二存储节点104b的第一队列121a'中的RECV工作请求129更新第二队列121b中的WRITE工作请求126的对应存储器描述符和第三队列121c'中的SEND工作请求128。

如图3B中所示,在第一队列121a'中的RECV工作请求129完成之后,第二工作队列121b中的WAIT工作请求130被触发。作为响应,第二存储节点104b处的RNIC 114执行用于本地存储器复制的写工作请求126。当本地存储器复制成功完成时,RNIC 114触发第三工作队列121c'中的等待工作请求130',并且使用第三工作队列121c中的SEND工作请求128将存储器复制操作转发到下一节点(例如,第三存储节点104c)以沿着元数据125”传递。

为了支持复制事务的持久性,即使在系统故障(例如,断电)的情况下,用RDMAWRITE工作请求写入的数据也需要保持数据完整性。但是,在RNIC上实现的常规RDMA协议可能无法保证持久性。一旦任何写入的数据被存储在RNIC的易失性高速缓存中,目的地RNIC就会响应于RDMA WRITE工作请求而发送ACK。这样,在将数据刷新到NVM(例如,图1中的持久性存储装置115)之前,写入的数据可能会因断电而丢失。

所公开的技术的几个实施例还涉及一种RDMA FLUSH原语,该原语以类似于图3A和图3B中所示的工作队列配置来支持“NIC级”的耐久性。在特定实现中,第一存储节点104a可以发出RDMA FLUSH(gFLUSH)原语,第一存储节点104a处的RNIC 114可以立即向第二存储节点104b处的RNIC 114发出0字节的RDMA READ命令,而无需来自第二存储节点104b的ACK。然后,第二存储节点104b处的RNIC 114刷新用于READ命令的高速缓存,并且在0字节READ命令被确认之后,第一存储节点104a处的RNIC 114提供ACK。与gWRITE相似,gFLUSH操作也可以在整个存储节点104上沿着链向下传播,以提高持久性。在某些实现中,gFLUSH命令可以由其自身发出。在其他实施例中,一个或多个gFLUSH命令可以与gWRITE或gMEMCPY操作交错。例如,第二存储节点104b上的交错的gWRITE和gFLUSH操作可以首先刷新高速缓存,然后才将gWRITE沿着链向下转发。这样,可以按照链所需要的顺序或在第一与第二或第三存储节点104之间传播持久更新。

为了确保在并发读写期间的数据完整性,分布式复制存储系统通常使用锁定机制来防止其他进程修改相同的数据对象。如下面参考图4A至图4C更详细描述的,所公开的技术的几个实施例还涉及组比较和交换(gCAS)原语,该原语被配置为将这种锁定管理卸载到RNIC114,如下面参考图4A至图4C更详细地描述的。

在某些实现中,gCAS原语使得远程RNIC(例如,第二存储节点104b和第三存储节点104c处的RNIC 114)能够针对对应存储器113中的指定存储器位置执行比较和交换,并且基于比较的结果来更新存储器位置的值。第一存储节点104a可以经由该原语来获取逻辑组锁定,而无需第二存储节点104b和第三存储节点104c处的处理器112。

如图4A中所示,第一存储节点104a和第二存储节点104b具有与图3A中所示的配置大致相似的配置,不同之处在于,第二工作队列121b'包含比较交换(CAS)工作请求132而非WRITE工作请求126。如图4A中所示,第一存储节点104a上的RNIC 114可以执行SEND工作请求128'以将元数据125”'传输到第二存储节点104b。元数据125”'可以包括表示复制组ID、要比较其值的存储器位置的偏移、旧值和新值的数据、执行映射、结果映射和/或其他合适的参数。执行和结果映射包含复制组中的每个节点的数据字段。第一存储节点104a可以通过例如标记对应数据字段来指定每个远程节点(例如,第二存储节点104b和第三存储节点104c)是否必须在执行映射上执行CAS操作。每个远程节点可以将本地执行的CAS操作的结果更新为执行映射,并且第一存储节点104a可以接收最终的执行映射作为执行gCAS操作的ACK。

还如图4A中所示,当第二存储节点104b的第一队列121'中的RECV工作请求129被第一存储节点104a发起的SEND工作请求128'占用时,第二存储节点104b处的RNIC 114分别更新第二工作队列121b'和第三工作队列121c'中的CAS和SEND工作请求132和128的存储器描述符。如图4B中所示,CAS在RECV工作请求129完成之后,第二队列121b'中的WAIT工作请求130被触发以执行CAS工作请求132并且更新执行映射中的对应数据字段。如图4C中所示,CAS工作请求132的完成触发第三队列121c'中的WAIT和SEND工作请求130'和128将gCAS操作传递给下一存储节点104,例如第三存储节点104c。在所示的示例中,第三存储节点104c是复制组中的最后的存储节点。这样,第三存储节点104c然后可以使用例如对应的工作队列中的WRITE_WITH_IMM工作请求(未示出)将结果执行映射作为ACK 127'转发到第一存储节点104a。

图5是示出根据所公开的技术的实施例的用于基于组的数据复制的组写入过程200的流程图。如图5中所示,过程200可以包括在阶段202经由RDMA网络将数据块写入副本存储节点的存储器。该数据块被写入副本存储节点处的存储器的存储器位置并且具有数据大小。然后,过程200可以包括在阶段204将写入的数据块的元数据发送到副本存储节点。元数据可以包括例如写入的数据块被存储在副本存储节点的存储器中的存储器位置和对应的数据大小。然后,过程200可以包括在阶段206与元数据一起修改存储器描述符,该存储器描述符是表示用于将数据块的副本写入另一副本存储节点的预先发布的工作请求的数据结构的一部分。过程200然后可以包括用于确定存储器描述符的修改是否被完成的判定阶段208。在一个实施例中,当RECV工作请求在对应的完成队列中注册完成时,修改被完成。在其他实施例中,根据其他合适的标准,可以认为对存储器描述符的修改是完整的。响应于确定修改是竞争的,过程200可以包括在阶段210自动触发将数据块的副本从副本存储节点写入复制组中的另一副本存储节点。这样,可以重复图5中所示的操作以将数据块复制到复制组中的所有副本存储节点。

图6是示出根据所公开的技术的实施例的用于基于组的数据复制的基于组的存储器写入过程220的流程图。如图6中所示,过程220可以包括在阶段222发送关于要在副本存储节点处的存储器中从源存储器区域移动到目的地存储器区域的数据块的元数据。元数据可以包括例如源和目的地存储器区域的存储器偏移以及数据块的数据大小。然后,过程220可以包括在阶段224与元数据一起修改存储器描述符,该存储器描述符是表示用于将元数据的副本发送到另一副本存储节点的预先发布的工作请求的数据结构的一部分。过程220可以然后包括用于确定修改是否被完成的决策阶段。响应于确定修改被完成,过程220可以包括在阶段228将数据块从源区域写入目的地区域,并且在阶段230触发将元数据发送到另一副本存储节点。

图7是是适合于图1中的分布式存储系统100的某些组件的计算设备300。例如,计算设备300可以适合于图1的存储节点104或客户端设备102。在非常基本的配置302中,计算设备300可以包括一个或多个处理器304和系统存储器306。存储器总线308可以用于处理器304与系统存储器306之间的通信。

根据期望的配置,处理器304可以是任何类型,包括但不限于微处理器(μP)、微控制器(μC)、数字信号处理器(DSP)或其任何组合。处理器304可以包括一个或多个级别的高速缓存(诸如一级高速缓存310和二级高速缓存312)、处理器核314和寄存器316。示例处理器核314可以包括算术逻辑单元(ALU)、浮点单元(FPU)、数字信号处理核(DSP核)或其任何组合。示例存储器控制器318也可以与处理器304一起使用,或者在一些实现中,存储器控制器318可以是处理器304的内部部分。

根据期望的配置,系统存储器306可以是任何类型,包括但不限于易失性存储器(诸如RAM)、非易失性存储器(诸如ROM、闪存等)或其任何组合。系统存储器306可以包括操作系统320、一个或多个应用322和程序数据324。该描述的基本配置302在图8中由内部虚线内的那些组件示出。

计算设备300可以具有附加特征或功能、以及附加接口以促进基本配置302与任何其他设备和接口之间的通信。例如,总线/接口控制器330可以用于促进基本配置302与一个或多个数据存储设备332之间经由存储接口总线334的通信。数据存储设备332可以是可移除存储设备336、不可移除存储设备338或其组合。可移除存储设备和不可移除存储设备的示例包括诸如软盘驱动器和硬盘驱动器(HDD)等磁盘设备、诸如压缩盘(CD)驱动器或数字通用盘(DVD)驱动器等光盘驱动器、固态驱动器(SSD)和磁带驱动器等。示例计算机存储介质可以包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移除和不可移除介质。术语“计算机可读存储介质”或“计算机可读存储设备”不包括传播信号和通信介质。

系统存储器306、可移除存储设备336和不可移除存储设备338是计算机可读存储介质的示例。计算机可读存储介质包括但不限于RAM、ROM、EEPROM、闪存或其他存储技术、CD-ROM、数字通用盘(DVD)或其他光学存储器、磁带盒、磁带、磁盘存储器或其他磁存储设备、或者可以用于存储期望的信息并且可以由计算设备300访问的任何其他介质。任何这样的计算机可读存储介质可以是计算设备300的一部分。术语“计算机可读存储介质”不包括传播信号和通信介质。

计算设备300还可以包括接口总线340以用于促进经由总线/接口控制器330从各种接口设备(例如,输出设备342、外围接口344和通信设备346)到基本配置302的通信。示例输出设备342包括可以被配置为经由一个或多个A/V端口352与诸如显示器或扬声器等各种外部设备通信的图形处理单元348和音频处理单元350。示例外围接口344包括可以被配置为经由一个或多个I/O端口358与诸如输入设备(例如,键盘、鼠标、笔、语音输入设备、触摸输入设备等)或其他外围设备(例如,打印机、扫描仪等)等外部设备通信的串行接口控制器354或并行接口控制器356。示例通信设备346包括可以被布置为促进经由一个或多个通信端口364通过网络通信链路与一个或多个其他计算设备362的通信的网络控制器360。

网络通信链路可以是通信介质的一个示例。通信介质通常可以由计算机可读指令、数据结构、程序模块或调制数据信号(诸如载波或其他传输机制)中的其他数据来实施,并且可以包括任何信息传递介质。“调制数据信号”可以是使得能够在信号中对信息进行编码的方式设置或改变其一个或多个特征的信号。作为示例而非限制,通信介质可以包括诸如有线网络或直接有线连接等有线介质、以及诸如声学、射频(RF)、微波、红外(IR)和其他无线介质等无线介质。本文中使用的术语计算机可读介质可以包括存储介质和通信介质。

计算设备300可以被实现为小型便携式(或移动)电子设备的一部分,诸如蜂窝电话、个人数字助理(PDA)、个人媒体播放器设备、无线网络手表设备、个人耳机设备、专用设备、或包括任何上述功能的混合设备。计算设备300还可以实现为包括膝上型计算机和非膝上型计算机配置的个人计算机。

根据前述内容,应当理解,已经出于说明的目的而在本文中描述了本公开的特定实施例,但是,在不脱离本公开的情况下,可以进行各种修改。另外,除了或代替其他实施例的元素,一个实施例的很多元素可以与其他实施例组合。因此,除了所附权利要求之外,本技术不受限制。

相关技术
  • 多租户存储系统中的基于组的数据复制
  • 分布式数据存储系统中数据复制的方法以及相应设备
技术分类

06120112180680