CN112513828B - 以分布式方式实现文件的一致性和页面高速缓存支持 - Google Patents

以分布式方式实现文件的一致性和页面高速缓存支持 Download PDF

Info

Publication number
CN112513828B
CN112513828B CN201980051048.6A CN201980051048A CN112513828B CN 112513828 B CN112513828 B CN 112513828B CN 201980051048 A CN201980051048 A CN 201980051048A CN 112513828 B CN112513828 B CN 112513828B
Authority
CN
China
Prior art keywords
computing device
lease
end computing
cache
rental
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201980051048.6A
Other languages
English (en)
Other versions
CN112513828A (zh
Inventor
马奥尔·本·达彦
奥姆里·帕尔蒙
利兰·兹维贝
卡纳尔·阿迪蒂
阿尔特米·沃伊克汉斯基
阿莱克斯·戈尔特曼
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Weka Io Ltd
Original Assignee
Weka Io Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Weka Io Ltd filed Critical Weka Io Ltd
Publication of CN112513828A publication Critical patent/CN112513828A/zh
Application granted granted Critical
Publication of CN112513828B publication Critical patent/CN112513828B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • G06F3/0607Improving or facilitating administration, e.g. storage management by facilitating the process of upgrading existing storage systems, e.g. for improving compatibility between host and storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • G06F12/0871Allocation or management of cache space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0619Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • G06F3/0631Configuration or reconfiguration of storage systems by allocating resources to storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • G06F3/0637Permissions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/0643Management of files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0685Hybrid storage combining heterogeneous device types, e.g. hierarchical storage, hybrid arrays

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Computer Security & Cryptography (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

多个计算装置经由网络彼此通信地耦接,并且多个计算装置中的每一个可操作地耦接至多个存储装置中的一个或多个。当访问多个存储装置时,计算装置可以以一致的方式使用本地高速缓存。

Description

以分布式方式实现文件的一致性和页面高速缓存支持
优先权
本申请要求于2018年6月29日提交的题为“Implementing Coherency and PageCache Support in a Distributed Way for Files(以分布式方式实现文件的一致性和页面高速缓存支持)”的美国临时专利申请62/691,667以及于2019年2月13日提交的题为“Implementing Coherency and Page Cache Support in a Distributed Way for Files(以分布式方式实现文件的一致性和页面高速缓存支持)”的美国专利申请第16/274,420号的优先权。
背景技术
通过将这种方法与本公开的其余部分中参考附图所阐述的本方法和***的一些方面进行比较,常规的数据存储方法的限制和缺点对于本领域技术人员将变得显而易见。
通过引用并入
通过引用将题为“Distributed Erasure Coded Virtual File System(分布式擦除编码的虚拟文件***)”的美国专利申请第15/243,519号的全部内容并入本文。
发明内容
提供了用于以分布式方式实现分布式存储***中的文件的一致性和页面高速缓存支持的方法和***,该分布式文件***基本上如附图中的至少一个所示和/或结合附图中的至少一个附图所描述,如在权利要求中更全面地阐述的。
附图说明
图1示出了根据本公开的各方面的虚拟文件***的各种示例配置。
图2示出了根据本公开的各方面的虚拟文件***节点的示例配置。
图3示出了根据本公开的示例实现方式的虚拟文件***的另一表示。
图4示出了根据本公开的示例实现方式的具有高速缓存存储器的示例配置的高级框图。
图5示出了根据本公开的示例实现方式的租赁获取的示例流程图。
图6示出了根据本公开的示例实现方式的租赁续订的示例流程图。
图7A示出了根据本公开的示例实现方式的撤销租赁的示例流程图。
图7B示出了根据本公开的示例实现方式的撤销租赁的另一示例流程图。
图8是示出根据本公开的示例实现方式的状态转换的示例转换图。
图9示出了两个分布式故障弹性地址空间驻留在多个固态存储盘上的示例实现方式。
图10示出了根据本公开的示例实现方式的可以用于保护存储到虚拟文件***的非易失性存储器的数据的前向纠错方案。
具体实施方式
传统上,文件***使用对元数据结构(例如,目录、文件、属性、文件内容)的集中控制。如果可从单个服务器访问本地文件***,并且该服务器故障,则由于没有进一步保护,文件***的数据可能丢失。为了增加保护,一些文件***(例如,如由NetApp提供的)已经以主动-被动方式(active-passive manner)使用一对或多对控制器来跨两个或多个计算机复制元数据。其他解决方案已经以集群方式使用多个元数据服务器(例如,如由IBM GPFS、Dell EMC Isilon、Lustre等提供的)。然而,由于传统集群***中的元数据服务器的数量限于小数量,因此这样的***无法扩展。
本公开中的***适用于小集群,并且还可以扩展到许多、数千个节点。讨论了关于非易失性存储器(NVM)(例如,以固态驱动器(SSD)的形式出现的闪存)的示例实施方式。NVM可以被划分为4kB“块”和128MB“数据块”(chunks)。“扩展区”(extents)可以存储在易失性存储器(例如,用于快速访问的RAM)中,并且也可以由NVM存储备份。扩展区可以存储块的指针,例如,存储在块中的1MB数据的256个指针。在其他实施方式中,还可以使用更大或更小的存储器划分。本公开中的元数据功能可以有效地分布在许多服务器上。例如,在大负载以文件***的命名空间的特定部分为目标的“热点”的情况下,该负载可以分布在多个节点上。
图1示出了根据本公开的各方面的虚拟文件***(VFS)的各种示例配置。图1中示出了局域网(LAN)102,其包括一个或多个VFS节点120(对于J≥1,由从1至J的整数索引),并且可选地包括(由虚线指示):一个或多个专用存储节点106(对于M≥1,由从1至M的整数索引)、一个或多个计算节点104(对于N≥1,由从1至N的整数索引)和/或将LAN 102连接至远程网络118的边缘路由器。远程网络118可选地包括一个或多个存储服务114(对于K≥1,由从1至K的整数索引)和/或一个或多个专用存储节点115(对于L≥1,由从1至L的整数索引)。
每个VFS节点120j(j是整数,其中,1≤j≤J)是联网计算装置(例如,服务器、个人计算机等),该联网计算装置包括用于运行VFS进程以及可选地客户端进程(直接在装置104n的操作***上和/或在装置104n中运行的一个或多个虚拟机中)的电路。
计算节点104是可以运行VFS前端而没有VFS后端的联网装置。计算节点104可以通过将SR-IOV带入NIC并且消耗完整的处理器核心来运行VFS前端。可选地,计算节点104可以通过经由Linux内核网络堆栈路由联网并且使用内核进程调度来运行VFS前端,因此没有全核心的要求。如果用户不想为VFS分配完整核心或者如果联网硬件与VFS要求不兼容,则这是有用的。
图2示出了根据本公开的各方面的VFS节点的示例配置。VFS节点包括VFS前端202和驱动器208、VFS存储器控制器204、VFS后端206和VFS SSD代理214。如本公开中所使用的,“VFS进程”是实现VFS前端202、VFS存储器控制器204、VFS后端206和VFS SSD代理214中的一个或多个的进程。因此,在示例实现方式中,VFS节点的资源(例如,处理和存储器资源)可以在客户端进程和VFS进程之间共享。VFS的进程可以被配置为要求相对少量的资源以使对客户端应用的性能的影响最小化。VFS前端202、VFS存储器控制器204和/或VFS后端206和/或VFS SSD代理214可以在主机201的处理器上或在网络适配器218的处理器上运行。对于多核处理器,不同的VFS进程可以在不同的核上运行,并且可以运行服务的不同子集。从客户端进程212的角度来看,与虚拟文件***的接口独立于VFS进程正在其上运行的特定物理机。客户端进程仅需要驱动器208和前端202存在以便为它们服务。
VFS节点可以被实现为直接在操作***上运行的单个租户服务器(例如,裸机)或者被实现为裸机服务器内的虚拟机(VM)和/或容器(例如,Linux容器(LXC))。VFS可以在作为VM环境的LXC容器内运行。因此,在VM内部,可以运行的唯一事情是包括VFS的LXC容器。在经典的裸机环境中,存在用户空间应用,并且VFS在LXC容器中运行。如果服务器正在运行其他容器化应用,则VFS可以在容器部署环境(例如,Docker)的管理范围之外的LXC容器内运行。
VFS节点可以由操作***和/或虚拟机监视器(VMM)(例如,管理程序)服务。VMM可以用于在主机201上创建和运行VFS节点。多个核可以驻留在运行VFS的单个LXC容器内,并且VFS可以使用单个Linux内核在单个主机201上运行。因此,单个主机201可以包括多个VFS前端202、多个VFS存储器控制器204、多个VFS后端206和/或一个或多个VFS驱动器208。VFS驱动器208可以在LXC容器的范围之外的内核空间中运行。
单个根输入/输出虚拟化(SR-IOV)PCIe虚拟功能可以用于在用户空间222中运行联网堆栈210。SR-IOV允许隔离PCI Express,使得单个物理PCI Express可以在虚拟环境上共享,并且不同的虚拟功能可以被提供给单个物理服务器机器上的不同虚拟组件。I/O堆栈210使得VFS节点能够旁路标准TCP/IP堆栈220并且直接与网络适配器218通信。可以通过无锁队列将用于uniX(POSIX)VFS功能的便携式操作***接口提供给VFS驱动器208。SR-IOV或完整的PCIe物理功能地址还可以用于在用户空间222中运行非易失性存储器快速(NVMe)驱动器214,从而完全旁路Linux IO堆栈。NVMe可以用于访问经由PCI Express(PCIe)总线附接的非易失性存储装置216。非易失性存储装置216可以是例如以固态驱动器(SSD)的形式出现的闪存或可以以SSD或存储器模块(DIMM)的形式出现的存储类存储器(SCM)。其他示例可以包括存储类存储器技术,诸如3D-XPoint。
通过将物理SSD(例如,非易失性存储装置216)与SSD代理214和联网210耦接,SSD可以被实现为联网装置。可选地,SSD可以通过使用诸如NVMe-oF(Fabrics上的NVMe)的网络协议实现为网络附接的NVMe SSD 242或244。NVMe-oF可以允许使用冗余网络链路访问NVMe装置,从而提供更高级别或弹性。网络适配器226、228、230和232可以包括用于连接至NVMeSSD 242和244以将它们转换为联网的NVMe-oF装置而无需使用服务器的硬件加速。NVMeSSD 242和244可以各自包括两个物理端口,并且可以通过这些端口中的任一个来访问所有数据。
每个客户端进程/应用212可以直接在操作***上运行,或者可以在由操作***和/或管理程序服务的虚拟机和/或容器中运行。客户端进程212可以在执行其主要功能的过程中从存储读取数据和/或将数据写入存储。然而,客户端进程212的主要功能与存储无关(即,进程仅关注其数据可靠地存储并且在需要时是可检索的,并且不关注数据存储在何处、何时或如何存储)。引起这种进程的示例应用包括:电子邮件服务器、web服务器、办公室生产力应用、客户关系管理(CRM)、动画视频渲染、基因组计算、芯片设计、软件构建和企业资源规划(ERP)。
客户端应用212可以对与VFS驱动器208通信的内核224进行***调用。VFS驱动器208将对应的请求放在VFS前端202的队列上。如果存在若干VFS前端,则驱动器可以负载平衡对不同的前端的访问,从而确保始终经由同一前端访问单个文件/目录。这可以通过基于文件或目录的ID“碎片化”前端来完成。VFS前端202提供用于基于负责该操作的桶(bucket)将文件***请求路由到适当的VFS后端的接口。适当的VFS后端可以在同一主机上或可以在另一主机上。
VFS后端206托管若干桶,它们中的每一个桶服务于文件***请求,该文件***请求接收并执行任务,以其他方式管理虚拟文件***(例如,负载平衡、日志记录、维护元数据、高速缓存、在层之间移动数据、移除陈旧数据、校正损坏数据等)。
VFS SSD代理214处理与相应非易失性存储装置216的交互。这可以包括例如转换地址并且生成发布到存储装置(例如,在SATA、SAS、PCIe或其他合适的总线上)的命令。因此,VFS SSD代理214操作为非易失性存储装置216与虚拟文件***的VFS后端206之间的中介。SSD代理214还可以与支持诸如NVMe-oF(Fabrics上的NVMe)的标准协议的标准网络存储装置通信。
图3示出了根据本公开的示例实现方式的虚拟文件***的另一表示。在图3中,元件302表示其上驻留有虚拟文件***的各种节点(计算、存储和/或VFS)的存储器资源(例如,DRAM和/或其他短期存储器)和处理(例如,x86处理器、ARM处理器、NIC、ASIC、FPGA等)资源,诸如以上关于图2所描述的。元件308表示提供虚拟文件***的长期存储的一个或多个物理存储装置216。元件308表示提供虚拟文件***的长期存储的一个或多个物理非易失性存储装置216。
如图3所示,物理存储被组织为多个分布式故障弹性地址空间(DFRAS)318。其中每一个空间包括多个数据块310,数据块310进而包括多个块312。将块312组织为数据块310仅在一些实现方式中是便利的,并且可能不是在所有实现方式中都完成。每个块312存储提交的数据316(其可以呈现如下讨论的各种状态)和/或描述或引用提交的数据316的元数据314。
将存储308组织为多个DFRAS使得能够从虚拟文件***的许多(或许所有)节点进行高性能并行提交(例如,图1的所有节点1041至104N、1061至106M和1201至120J可以同时执行并行提交)。在示例实现方式中,虚拟文件***的节点中的每一个可以拥有多个DFRAS中的相应一个或多个DFRAS,并且具有对其拥有的DFRAS的排他性读取/提交访问。
每个桶都拥有DFRAS,并且因此在向其写入时不需要与任何其他节点协调。每个桶可以在许多不同的SSD上的许多不同数据块上构建条带,因此具有DFRAS的每个桶可以基于许多参数选择当前要写入的“数据块条带”,并且一旦数据块被分配给那个桶就不需要进行协调。所有桶可以有效地写入所有SSD,而不需要进行任何协调。
仅由在特定节点上运行的其拥有者桶拥有和可访问的每个DFRAS允许VFS的节点中的每一个控制存储308的一部分而不必与任何其他节点协调(除了在初始化期间或在节点故障之后保持DFRAS的桶的[重新]分配期间,例如,这可以与对存储308的实际读取/提交异步执行)。因此,在这样的实现方式中,每个节点可以独立于其他节点正在做什么来读取/提交到其桶的DFRAS,而不需要在读取和提交到存储308时达成任何一致性。此外,在特定节点故障的情况下,特定节点拥有多个桶的事实允许将其工作负载更智能且更有效地重新分配给其他节点(而不是必须将整个工作负载分配给单个节点,这可以创建“热点”)。就这一点而言,在一些实现方式中,桶的数量相对于***中的节点的数量可能较大,使得任何一个桶可以是放置在另一个节点上的相对较小的负载。这允许根据其他节点的能力和容量来细粒度地重新分配故障节点的负载(例如,可以给予具有更多能力和容量的节点更高百分比的故障节点桶)。
为了允许这样的操作,可以维护将每个桶映射到其当前拥有节点的元数据,使得对存储308的读取和提交可以被重定向到适当的节点。
负载分配是可能的,因为整个文件***元数据空间(例如,目录、文件属性、文件中的内容范围等)可以被分解(例如,切分或碎片化)成小的、均匀的片(例如,“碎片”)。例如,具有30k个服务器的大型***可以将元数据空间切分为128k或256k个碎片。
每个这样的元数据碎片可以维持在“桶”中。每个VFS节点可以负责若干桶。当桶服务于给定后端上的元数据碎片时,该桶被认为是“主动的(active,有源的)”或者是该桶的“领导者”。通常,存在比VFS节点多得多的桶。例如,具有6个节点的小型***可以具有120个桶,并且具有1,000个节点的大型***可以具有8k个桶。
每个桶可以在小的节点集合上是主动的,通常为形成该桶的五元组的5个节点。集群配置保持关于每个桶的五元组分配的所有参与节点最新。
每个五元组监视自身。例如,如果集群具有10k个服务器,并且每个服务器具有6个桶,则每个服务器将仅需要与30个不同的服务器对话以维持其桶的状态(6个桶将具有6个五元组,因此6*5=30)。这是比集中式实体必须监视所有节点并保持集群范围状态的情况小得多的数量。使用五元组允许性能与更大的集群一起扩展,因为当集群大小增加时节点不会执行更多的工作。这可能造成在“哑”模式下小集群实际上可能生成比物理节点更多的通信的缺点,但是该缺点是通过在具有其共享的所有桶的两个服务器之间仅发送单个心跳(heartbeat)来克服的(当集群增长时,这将改变为仅一个桶,但是如果你具有小型的5个服务器集群,则仅将所有桶包括在所有消息中并且每个服务器将仅与其他4个服务器对话)。五元组可以使用类似于Raft一致算法的算法来决定(即,达成一致)。
每个桶可以具有可以运行该桶的一组计算节点。例如,五个VFS节点可以运行一个桶。然而,在任何给定时刻,仅组中的节点中的一个节点是控制器/领导者。此外,对于足够大的集群,没有两个桶共享同一组。如果集群中仅存在5个或6个节点,则大多数桶可以共享后端。在相当大的集群中,存在许多不同的节点组。例如,对于26个节点,存在多于64,000个可能的五节点组(即,五元组)。
组中的所有节点知道并同意(即,达成一致)哪个节点是该桶的实际主动控制器(即,领导者)。访问该桶的节点可以记住(“高速缓存”)作为组的(例如,五个)成员中的该桶的领导者的最后一个节点。如果它访问桶领导者,则桶领导者执行所请求的操作。如果它访问不是当前领导者的节点,则该节点指示领导者“重定向”访问。如果存在访问高速缓存的领导者节点的超时,则联系节点可以尝试同一五元组的不同节点。集群中的所有节点共享集群的共有“配置”,这允许节点知道哪个服务器可以运行每个桶。
每个桶可以具有负载/使用值,其指示桶被在文件***上运行的应用使用的程度。例如,即使所使用的桶的数量将存在不平衡,具有11个轻度使用桶的服务器节点也可以接收元数据的另一个桶以在具有9个重度使用桶的服务器之前运行。可以根据平均响应等待时间、并行运行操作的数量、消耗的存储器或其他度量来确定负载值。
即使当VFS节点没有故障时,也可以发生重新分布。如果***基于所跟踪的负载度量识别一个节点比其他节点更忙,则***可以将其桶中的一个桶移动(即,“故障转移”)至不太忙的另一服务器。然而,在实际将桶重新定位到不同的主机之前,可以通过转移写入和读取来实现负载平衡。由于每个写入可以在由DFRAS决定的不同组的节点上结束,因此具有较高负载的节点可能不被选择为处于正被写入数据的条带中。***还可以选择不服务于来自高负载节点的读取。例如,可以执行“降级模式读取”,其中,从同一条带的其他块重构高负载节点中的块。降级模式读取是经由同一条带中的其余节点执行的读取,并且经由故障保护重构数据。当读取等待时间太高时,可以执行降级模式读取,因为读取的发起者可以假设该节点关闭。如果负载足够高以创建更高的读取等待时间,则集群可以恢复到从其他节点读取该数据,并且使用降级模式读取来重构所需的数据。
每个桶管理其自己的分布式擦除编码实例(即,DFRAS 318),并且不需要与其他桶协作来执行读取或写入操作。可能存在数千个并发的分布式擦除编码实例并发工作,每个擦除编码实例用于不同的桶。这是扩展性能的组成部分,因为它有效地允许任何大型文件***被划分为不需要协调的独立片,因此无论规模如何都提供高性能。
每个桶处理落入其碎片中的所有文件***操作。例如,目录结构、文件属性和文件数据范围将落入特定桶的管辖范围。
从任何前端完成的操作开始于找出什么桶拥有该操作。然后,确定该桶的后端领导者和节点。该确定可以通过尝试最近已知的领导者来执行。如果最近已知的领导者不是当前领导者,则该节点可以知道哪个节点是当前领导者。如果最近已知的领导者不再是桶的五元组的一部分,则该后端将让前端知道其应回到用以找到桶的五元组的成员的配置。操作的分布允许复杂的操作由多个服务器而不是由标准***中的单个计算机来处理。
如果集群的大小较小(例如,5个)并且使用五元组,则将存在共享同一组的桶。随着集群大小增长,重新分配桶,使得没有两个组是相同的。
在本地文件***上,打开文件并向其写入的默认方法将数据放在写入高速缓存中,因此该写入立即***地返回,并且在后台发生文件更新的同时,文件的后续关闭操作也立即返回。一些存储规范(例如,NFS(网络文件服务器)规范)陈述了在关闭文件时必须写入所有脏的高速缓存页面,这可能使进程固有地低效,因为该进程必须在每次写入之后等待。
尽管本文公开的共享文件***与其他共享存储(例如,NFS兼容存储***)相比可以执行得很好,但是其仍然可能比本地文件***慢。这可能是因为本地文件***具有使用RAM(随机存取存储器)执行许多操作的能力,其中,RAM操作例如可以比通过网络进行的那些等效操作快数百倍。例如,尽管4k读取/写入可以在被认为非常快的相干存储器上在150微秒内执行,但是对RAM的读取或写入可以以纳秒而不是微秒来测量。
因而,允许在计算机的本地RAM中进行高速缓存的优化可以允许在本地进行更快和更多的操作,而无需访问实际的存储***。根据配置,“本地”RAM可以由计算机直接访问,或者经由本地网络访问,其中,通过将本地网络配置为可接受的性能来控制对RAM的访问时间。各种实施方式可以允许这种情况发生,并且通过实现例如文件的“租赁”仍然向终端用户呈现可共享的一致存储。
文件租赁可以例如是后端(例如,VFS后端(BE)206)与前端(例如,VFS前端(FE)202)之间的共享令牌。该共享令牌可以例如发信号表示某个FE正在使用某个文件。在各种实施方式中,可以针对整个文件给出租赁,而其他实施方式可以针对文件的一部分给出租赁。
租赁持有者可以是集群中的FE,该FE持有针对通过其访问***的所有文件用户的租赁。集群用途模式可以描述拥有给定文件的租赁的一组租赁持有者(例如,FE)的属性。
读取缓存可能永远不会脏,因为仅保存到BE中的数据才会出现在读取高速缓存中。然而,如果写入高速缓存中具有由BE未保存的数据,则它可以被称为脏高速缓存。
租赁可以具有与其相关联的租赁能力,该租赁能力可以描述租赁持有者(例如,FE)可以对与租赁相关联的文件做什么。例如,该租赁能力可以给予文件读取和/或写入许可。还可以存在将每个FE限制到文件的特定范围的能力。例如,当多个FE对同一文件具有租赁时,这可能是有用的。租赁还可以表示高速缓存能力。例如,租赁可能不允许任何高速缓存或读取和/或写入高速缓存的组合。
因此,例如,可以存在两种不同类型的操作。第一类型的操作可以是仅使用例如读取高速缓存执行读取操作的操作,并且第二类型的操作可以是还允许生成仅使用例如写入高速缓存的服务器本地的脏数据的操作。
例如,还可以存在要被高速缓存的两种不同类型的数据,其中,可以使用各种类型的高速缓存机制。文件数据可以例如在从RAM读取之后处于读取高速缓存中,并且如果***确定RAM中的数据没有发生数据改变,则第二次读取可以返回相同的高速缓存数据。例如,当没有其他FE打开文件并实际写入该文件时,可能会发生这种情况。
对于写入高速缓存,写入可以到本地RAM,该本地RAM可以被立即确认,并且然后可以被写入到存储***。当存在如在例如直写高速缓存中的写入时,可以使用对存储***的立即写入,或者当存在如在例如回写高速缓存中的写入时,可以使用对存储***的延迟写入。如果两个服务器打开相同的数据进行写入,则可能不会启用读取高速缓存或写入高速缓存。
图4示出了根据本公开的示例实现方式的具有高速缓存存储器的示例配置的高级框图。参考图4,示出了前端(FE)402、404、高速缓存存储器410和后端(BE)420。高速缓存存储器410可以例如是RAM(随机存取存储器),诸如SRAM(静态RAM)或DRAM(动态RAM),或具有可接受的读取和写入时间的另一类型的存储器。所使用的存储器的具体类型可以取决于例如所需的存取速度、成本约束等。
高速缓存存储器410可以包括读取高速缓存412和写入高速缓存414。BE 420可以具有与其相关联的存储装置430,该存储装置430可以类似于存储装置216或NVMe SSD 242、NVMe SSD 244。
FE 402和FE 404可以类似于例如VFS前端202,并且BE 420可以类似于例如VFS后端206。读取高速缓存412和写入高速缓存414可以例如对于FE 402、FE 404两者都是本地的,或者FE 402和FE 404中的每一个可以具有它们相应的本地读取高速缓存412和本地写入高速缓存414。例如,当存储装置216本地附接到SSD代理214时,存储装置430可以本地附接到例如BE 420,或者当NVMe SSD 242、NVMe SSD 244网络附接到VFS前端202和VFS后端206时,存储装置430可以网络附接到FE 402、FE 404和BE 420。
在执行对存储装置430的存储器访问之前,FE 402和FE 404可以从BE 420获取租赁。图5至图7B更详细地示出了租赁所涉及的各种过程。
图5示出了根据本公开的示例实现方式的租赁获取的示例流程图。参考图5,示出了具有框502至框512的流程图500。
当获取租赁时,在框502处,FE 402可以向BE 420请求具有特定租赁能力的租赁。在框504处,BE 420然后可以生成新租赁。在框506处,BE 420可以检查以查看FE 402是否具有适当的租赁。如果FE 402没有租赁,则在框512处,可以将所生成的租赁提供给FE 402。如果FE 402已经具有租赁,则在框508处,BE 420可以检查现有租赁是否具有与所生成的租赁相同的能力。如果有,则在框512处,将所生成的租赁提供给FE 402。如果没有,则在框510处,可以用所生成的租赁来替换现有租赁,并且将所生成的租赁提供给FE 402。
如果集群用途模式由于授予了新租赁而发生了改变,则BE可以撤销文件上的所有先前的租赁,并授予反映该改变的新租赁。因此,BE可以允许FE根据FE的租赁访问存储器。然而,如果FE的租赁无效或已经被BE撤消,则FE可能无法访问存储器。
图6示出了根据本公开的示例实现方式的租赁续订的示例流程图。参考图6,示出了具有框602至框610的流程图600。在框602处,FE 402可以向BE 420发出租赁续订请求。例如,如果租赁被授予某一时间段,则可能发生这种情况。在框604处,BE 420可以检查以查看FE 402是否在BE 420中具有注册的租赁。如果不存在现有租赁,则在框606处,BE 420可以拒绝该续订请求。
在某些实施方式中,BE 420检查以查看该续订请求是否具有与现有租赁相同的租赁能力。如果能力不同,则可以在606处拒绝该续订请求。如果能力相同,则可以在框610处授予该续订请求。
在某些实施方式中,BE 420可以不检查以查看该续订请求是否具有与现有租赁相同的租赁能力。在这种情况下,如果在框604处存在现有租赁,则可以在框610处授予租赁续订请求。
在授予续订请求时,BE 420可以生成具有与先前的租赁相同的租赁能力或与先前的租赁不同的能力的新租赁。因此,续订租赁可以被认为是新获取的租赁。
图7A示出了根据本公开的示例实现方式的撤销租赁的示例流程图。参考图7A,示出了具有框702至框706的流程图700。在框702处,FE 402具有允许其访问高速缓存存储器410的租赁。在框704处,FE 402可以确定其是否需要租赁。该确定可以取决于例如任何用户(例如,应用)是否保留在FE 402上。如果没有用户保留,则FE 402可以不需要访问高速缓存存储器410。因此,在FE 402不再需要租赁的情况下,FE 402可以通过在框706处通知BE 420来放弃租赁。然后,FE 402和BE 420可以擦洗(scrub)该租赁,使得FE 402不尝试使用该租赁,并且BE 420不允许该租赁由该FE 402使用。
在一些实现方式中,在经过特定时间段之后和/或如果FE 402在特定时间量内没有访问对应的文件,则BE 420可以撤销来自FE 402的租赁。如果FE 402被阻隔/从集群移除,则BE 420也可以撤销租赁。可以通过向FE 402发送撤销消息来执行撤销。如果节点由于某种原因而停止服务,则该节点可能会被阻隔。BE 420可以将撤销通知FE 402。
图7B示出了根据本公开的示例实现方式的撤销租赁的示例流程图。参考图7B,示出了具有框722至框728的流程图720。在框722处,FE 402具有允许其访问高速缓存存储器410的租赁。在框724处,FE 402可以确定其是否需要租赁。该确定可以取决于例如任何用户(例如,应用)是否保留在FE 402上。如果没有用户保留,则FE 402可以不需要访问高速缓存存储器410。因此,在FE 402不再需要租赁的情况下,FE 402可以通过在框726处通知BE 420来放弃租赁。然而,BE 420可以在框728处向FE 402发布新租赁。这可以类似于关于图6所描述的续订场景。BE 420可以基于例如FE 402的租赁请求的历史、租赁请求的频率、在先前租赁中请求的能力、未完成的租赁的数量等来提供新租赁。例如,这可以允许当下一个应用在FE 402上启动或连接到FE 402时FE 402快速访问高速缓存存储器410。
FE可以周期性地或在某些事件下向BE发送其前端状态。例如,可以在租赁恢复过程之前和之后发送状态。例如,这可以允许BE擦洗可以由FE放弃的租赁。由FE发送的状态可以包括例如高速缓存属性。
当FE通知BE其正在启动恢复过程时,可以阻止用户动作,直到FE完成恢复过程为止。恢复过程可以作为例如FE的初始化的一部分发生。
BE可以跟踪文件的当前使用以便向每个FE授予正确的租赁。该跟踪可以在RAM中完成,并且因此跨故障转移可能不是持久的,其中,故障转移可能是当节点故障时。
各种实施方式可以具有定义的各种用途。例如,共享读取(SHREAD)可以是当所有FE仅具有针对特定文件的读取租赁时。独占写入(XWRITE)可以是当单个FE对文件具有写入租赁时。同步写入(SYNWRITE)可以是当单个FE对特定文件具有写入租赁而其他FE仅具有读取租赁时。共享写入(SHWRITE)可以是当一个以上FE对文件具有写入租赁而其他FE对文件仅具有读取租赁时。下面,在表1中示出这些用途。
集群用途模式 读取器读取高速缓存 写入器写入高速缓存
SHREAD n/a
XWRITE n/a
SYNWRITE
SHWRITE n/a
表1
另外,可能存在与FE相关联的各种状态。非活动状态可以指当桶刚被创建并且尚未启动时的状态。换句话说,如果桶未启动,则它未准备好服务。由于没有RPC(远程过程调用)或消息可以到达直到桶启动为止,因此针对非活动状态寻址不同的消息可能是无意义的。
恢复状态可以允许所有租赁持有者恢复其租赁。例如,因为BE的跟踪可能不是持久的,并且可能在每次故障转移时丢失,因此可能发生这种情况。当BE在恢复状态期间接收到获取请求时,BE可以停止具有写入能力的租赁。然而,当发生重放时,重放可能不被停止。例如,当读取高速缓存在读取开始时有效但在读取完成时无效时,可以发生重放。可能需要再次读取数据以防止向读取实体提供混合页面(过时和干净)。可以用所请求的租赁授予续订请求,并且如果适用,可以允许进行高速缓存。可以确保高速缓存仍然是干净的,因为没有其他文件用户可能已经变异或改变了数据。可以允许其中尚未获取租赁的租赁放弃请求。例如,这可能发生在FE在知道BE正在恢复租赁之前已经发出请求的情况下。未链接的请求可以标记该文件以供将来擦洗。
在续订状态下,可以针对所有租赁授予获取请求,可以针对所有租赁允许续订请求,可以针对非现有租赁允许放弃请求,并且未链接的请求可以标记该文件以供将来擦洗。
在正常状态下,BE可以接受针对新租赁的请求,可以续订所请求的租赁,舍弃对非现有租赁的放弃请求,并且如果不存在开放租赁(open leases),则未链接的请求可以允许文件被完全移除。如果存在开放租赁,则文件可以被标记以供将来擦洗。
表2列出了各种状态转换。
表2
图8是示出根据本公开的示例实现方式的状态转换的示例转换图。参考图8,示出了具有状态802至状态808以及状态转换801至状态转换811的状态转换图800。当第一次创建桶时,该桶可以处于非活动状态802。当处于非活动状态802时,在逐步启动时或在初始化之后,该桶可以转换801到恢复状态804。
当处于恢复状态804时,当桶的相关FE被通知BE恢复租赁K秒时,该桶可以转换803到续订状态806。当处于恢复状态804时,当相关FE全部已经续订其租赁时,则可以发生到正常状态808的转换805。
当处于续订状态806时,当相关FE全部已经续订其租赁时,则可以发生到正常状态808的转换807。
当处于正常状态808时,如果例如FE崩溃,则可以发生转换809以用于崩溃的FE的租赁续订。当处于正常状态808时,如果存在BE故障转移,则可以存在桶到非活动状态802的转换811。当处于正常状态808时,未链接的文件可以被擦洗。
尽管已经示出了具体的转换图,但是本公开的各种实施方式不需要如此限制。基于状态和转换要求的不同设计,可以使用许多其他转换图中的任一个。
本公开的各种实施方式可以允许不同数量的开放租赁。例如,一个实施方式可以允许每个桶128K个开放租赁。前端还可以具有与租赁相关的不同状态。例如,在初始化过程期间,前端可以通知BE其正开始恢复租赁的过程,并且可以阻止用户动作,直到节点完成初始化过程为止。
在恢复状态期间,前端可以恢复属于单个桶的租赁。属于桶的所有租赁可以以原子方式保存,同时允许用户操作在租赁续订时继续。列表上的所有租赁都可以续订,其中,未能续订租赁可能导致租赁无效。如果桶在续订过程期间具有故障转移,则续订过程可能需要重启。
文件的租赁由负责该文件的桶给出。由于扩展区可能驻留在任何桶中,因此可能不需要根据当前租赁管理它们的变异。一旦在租赁已经被撤销之后读取/查询扩展区,在该撤销的租赁下的任何变异操作就不可以应用于文件。对于任何变异操作,租赁持有者可能需要向目标桶证明其持有有效的租赁才能这样做。例如,可能期望避免以下情况:一旦租赁被撤销,承载该租赁的RPC可以在撤销之前被发送并且在撤销之后到达其目的地,并且另一前端被分配关于该文件的新租赁。危险在于,对相同字节的两个变异操作将被重新排序,例如,新租赁持有者操作将被不再有效的过时操作覆写。
每个节点可以维持有效租赁的窗口。节点上的桶可以仅接受在其原始桶的当前允许窗口中的租赁。因此,只有在尚未读取扩展区时,放弃的写入才可能在租赁已被撤销之后改变文件内容。另外,如果在租赁被撤销之后(这可能导致放弃的写入),负责索引节点的桶可以查询文件的最后扩展区,并且可以确保文件大小不变。
因此,只要租赁有效,就可以允许FE根据租赁能力高速缓存文件。因此,只有在租赁有能力且有效的情况下,FE才能够高速缓存。这可以用例如租赁有效性检查来验证。
保持脏页面高速缓存页面作为我们的文件***的一部分可能导致脱机时间变长,并且阻止其他操作。如果其中一个服务器获得对其中一个文件的XWRITE(独占写入)租赁并且写入大量数据,一旦另一服务器尝试打开文件进行写入,从而将文件减少到SHWRITE(共享写入),或者另一服务器尝试打开文件进行读取,从而将文件减少到SYNWRITE(同步写入),删除过程可能花费很长时间并且延迟打开其他服务器。
如果具有XWRITE租赁的服务器完全失败,则脏数据可能完全丢失。如果具有XWRITE租赁的服务器和脏写入高速缓存冻结了延长的时间段,则另一服务器可以接管应用并写入文件。当第一服务器解冻并想要写入其脏数据时,则可能存在问题。在存在具有带有脏高速缓存的XWRITE模式中的文件的主机时拍摄快照可能导致快照的不确定内容。这可能使测试更加困难。
一种解决方案可以是在拍摄快照时,***可以将所有XWRITE文件降级为SYNWRITE,从而强制使相关文件的所有脏高速缓存被刷新。然后可以拍摄快照,并将文件提升回XWRITE。另一种解决方案可以是如果存在具有脏页面的文件,则使***不允许对文件***拍摄快照。
可以注意到,只要没有故障(没有服务器冻结、没有重新启动、电源故障等),具有XWRITE机制的写入高速缓存仍然可以导致来自其他主机的一致性访问。如果另一主机打开文件进行读取或写入,则租赁机制可能首先降级所有脏页面,并且然后才允许其他主机获取租赁。
不同的安装环境可以具有不同的性能特性,并且关于脏高速缓存降级可能花费多长时间也有不同的标准。例如,一个标准可以是当已经存在一个主机具有对该文件的XWRITE租赁和脏高速缓存时,在另一主机上第一次打开该文件将花费多长时间。另一标准可以是在服务器故障的情况下用户愿意丢失多少数据。例如,具有NVMe和100gb/e的环境可以允许比具有较慢的基于SATA的SSD和共享10gb/e链路的环境更多的脏存储器。
可以使用各种参数来促进对高速缓存的控制。例如,一个参数可以是脏后台比率,该脏后台比率可以是例如需要脏以使其被刷新的存储器的百分比。例如,如果脏存储器大于总高速缓存存储器的10%,则默认可以在后台刷新。另一参数可以是脏比率,该脏比率可以是例如在高速缓存被刷新之前可能是脏的存储器的最大百分比。如果存在比该百分比更大的脏存储器,则可以阻止下一个写入***调用,直到已经将足够多的脏页面降级到可靠存储。默认值可以例如是40%。另一参数可以例如是刷新线程唤醒到刷新高速缓存之间的时间间隔。默认时间可以例如是30秒。当然,其他值和百分比也是可能的,并且在本公开的范围内。
例如,可以存在两种服务器故障-冻结和终端故障。由于终端故障,脏数据将永远丢失。另一方面,当一个服务器冻结时,另一服务器可以接管文件,甚至是XWRITE中的文件,并且写入可能与冻结的服务器持有的脏页面冲突的新数据。冻结的具体解决方案可能取决于设计和/或实现。例如,一旦新服务器接管了文件,存储在冻结的旧服务器中的脏页面可能永远不会被删除,并且旧服务器可能需要进行可能需要人工干预的某种重启。
另一种形式优化可能涉及目录结构和元数据操作。这些优化可以类似于针对以上描述的数据的优化,但是不是针对所讨论的文件采用租赁,而是可以针对父目录采用租赁以进行文件添加/移除,并且还可以针对“否定存在”采用租赁,使得当高速缓存不存在于该目录中的文件时,如果该目录被改变,则可以删除关于该文件的否定存在的信息。如果文件属性被改变,则可以撤销标准文件租赁。
因此,可以看出,本公开的实现方式可以是分布式存储***,其包括:前端计算装置,该前端计算装置包括本地存储器,其中,本地存储器的至少一部分被用作高速缓存存储器;后端计算装置;以及多个存储装置。后端计算装置可以向前端计算装置提供租赁,使得前端计算装置可以能够访问多个存储装置中的至少一个。
高速缓存存储器可以包括读取高速缓存和写入高速缓存,并且租赁可以允许在读取高速缓存和写入高速缓存中的一个或两者中进行高速缓存,或不允许使用读取高速缓存和写入高速缓存中的任一个。本地存储器包括随机存取存储器,例如,SRAM和DRAM中的一个或两者。该多个存储装置可以包括闪存。
该租赁可以针对多个存储装置中的文件的至少一部分,或针对多个存储装置中的目录。后端计算装置可以响应于前端计算装置向后端计算装置提交租赁请求而提供租赁。租赁请求可以包括租赁能力。
前端计算装置可以被配置为向后端计算装置提交租赁续订请求,并且租赁续订请求可以包括租赁续订能力。后端计算装置可以被配置为在租赁续订能力与租赁的初始租赁能力相同时提供租赁续订。
后端计算装置可以被配置为确定该前端计算装置不需要租赁,并且在确定该前端计算装置不需要租赁时,该后端计算装置可以被配置为撤销该前端计算装置的租赁。前端计算装置还可以被配置为在确定其不需要租赁时放弃租赁。
本公开的另一实现方式可以是一种用于使用分布式存储***的方法,该方法包括:由前端计算装置向后端计算装置请求租赁以使用前端计算装置的本地高速缓存来访问多个存储装置;并且由后端计算装置提供租赁以访问多个存储装置。该租赁可以是下列中的一个:针对多个存储装置中的文件的至少一部分和针对多个存储装置中的目录。
该方法可以包括前端计算装置向后端计算装置提交租赁续订请求,或者在确定前端计算装置不需要访问多个存储装置时由前端计算装置放弃租赁。该方法还可以包括后端计算装置在确定前端计算装置不需要访问多个存储装置时撤销租赁。
图9示出了两个分布式故障弹性地址空间驻留在多个固态存储盘上的示例实现方式。
数据块9101,1至910D,C可以被组织为多个数据块条带9201至920S(S是整数)。在示例实现方式中,使用前向纠错(例如,擦除编码)单独地保护每个数据块条带920s(s是整数,其中,1≤s≤S)。因此,可以基于期望的数据保护级别来确定任何特定数据块条带920s中的数据块910d,c的数量。
出于说明的目的,假设每个数据块条带920s包括N=M+K(其中,N、M和K中的每一个都是整数)个数据块910d,c,则N个数据块910d,c中的M个数据块910d,c可以存储数据数位(通常是当前存储装置的二进制数位或“位”)并且N个数据块910d,c中的K个数据块910d,c可以存储保护数位(再次,通常是位)。然后,虚拟文件***可以将来自N个不同故障域的N个数据块910d,c分配给每个条带920s
如本文所使用的,“故障域”是指一组组件,其中,组件中的任何单个组件的故障(组件失去电力、变得无响应等)可能导致所有组件故障。例如,如果机架具有单个架顶式交换机,则该交换机的故障将使得该机架上的所有组件(例如,计算、存储和/或VFS节点)的连接性降低。因此,对于***的其余部分,等同于该机架上的所有组件是否一起故障。根据本公开的虚拟文件***可以包括比数据块910更少的故障域。
在虚拟文件***的节点以每个这样的节点仅有单个存储装置906的全冗余方式连接并供电的示例实现方式中,故障域可以仅是该单个存储装置906。因此,在示例实现方式中,每个数据块条带920s包括驻留在存储装置9061至906D的N个存储装置中的每一个存储装置上的多个数据块910d,c(因此,D大于或等于N)。在图9中示出这种实现方式的示例。
在图9中,D=7,N=5,M=4,K=1,并且存储被组织为两个DFRAS。这些数字仅用于说明而并非旨在限制。为了说明,任意地调用第一DFRAS的三个数据块条带920。第一数据块条带9201由数据块9101,1、9102,2、9103,3、9104,5和9105,6组成;第二数据块条带9202由数据块9103,2、9104,3、9105,3、9106,2和9107,3组成;并且第三数据块条带9203由数据块9101,4、9102,4、9103,5、9105,7和9107,5组成。
尽管在图9的简单示例中,D=7并且N=5,但是在实际实现方式中,D可以比N大得多(例如,大于1的整数的倍数,并且可能高达许多数量级),并且可以选择两个值,使得单个DFRAS的任何两个数据块条带920驻留在N个存储装置906的同一集合上(或更一般地,驻留在N个故障域的同一集合上)的概率低于期望阈值。以这种方式,任何单个存储装置906d(或更一般地,任何单个故障域)的故障将导致(可能基于D和N的所选值、N个存储装置906的大小和故障域的布置确定期望的统计)丢失任何特定条带920s的最多一个数据块910b,c。甚至进一步地,双重故障将导致绝大多数条带丢失至多单个数据块910b,c,并且仅少量条带(基于D和N的值确定的)将丢失任何特定条带920s中的两个数据块(例如,两个故障条带的数量可能成指数地小于一个故障条带的数量)。
例如,如果每个存储装置906d是1TB,并且每个数据块是128MB,则存储装置906d的故障将导致(可能基于D和N的所选值、N个存储装置906的大小以及故障域的布置确定期望的统计)7812(=1TB/128MB)个数据块条带920中丢失一个数据块910。对于每个这种受影响的数据块条带920s,可以使用适当的前向纠错算法和数据块条带920s的其他N-1个数据块来快速重构丢失的数据块910d,c。此外,由于受影响的7812个数据块条带均匀地分布在所有存储装置9061至906D上,重构丢失的7812个块910d,c将涉及(可能基于D和N的所选值、N个存储装置906的大小以及故障域的布置确定期望的统计)从存储装置9061至906D中的每一个读取相同量的数据(即,重构丢失的数据的负担均匀地分布在所有存储装置9061至906D上,以便提供从故障中非常快速的恢复)。
接下来,转到存储装置9061至906D中的两个存储装置的并发故障(或更一般地,两个故障域的并发故障)的情况,由于每个DFRAS的数据块条带9201至920S在所有存储装置9061至906D上的均匀分布,仅非常少量的数据块条带9201至920S将丢失其N个数据块中的两个数据块。虚拟文件***可以操作为基于指示数据块条带9201至920S与存储装置9061至906D之间的映射的元数据来快速识别这样的两个丢失的数据块条带。一旦识别出这样的两个丢失的数据块条带,虚拟文件***就可以在开始重构一个丢失的数据块条带之前优先重构那些两个丢失的数据块条带。剩余的数据块条带将仅具有单个丢失的数据块,并且对于它们(绝大多数的受影响的数据块条带),两个存储装置906d的并发故障与仅一个存储装置906d的故障相同。类似的原理适用于第三并发故障(在两个并发故障场景中,具有三个故障块的数据块条带的数量甚至小于具有两个故障块的数据块条带的数量)等。在示例实现方式中,可以基于数据块条带920s中的丢失的数量来控制执行数据块条带920s的重构的速率。例如,这可以通过控制执行用于重构的读取和提交的速率、执行用于重构的FEC计算的速率、传送用于重构的网络消息的速率等来实现。
图10示出了根据本公开的示例实现方式的可以用于保护存储至虚拟文件***的非易失性存储器的数据的前向纠错方案。示出了DFRAS的块条带9301至9304的存储块9021,1至9027,7。在图10的保护方案中,每个条带的五个块用于存储数据数位,并且每个条带的两个块用于数据存储保护数(即,M=5并且K=2)。在图10中,使用以下等式(1)至(9)计算保护数位:
因此,图10中的四个条带9301至9304是多条带(在这种情况下为四个条带)FEC保护域的一部分,并且可以使用以上等式(1)至(9)的各种组合来恢复块条带9301至9304中的任一个中的两个或更少块的丢失。为了比较,单条带保护域的示例将是如果D11、D22、D33、D44、D54仅由P1保护,并且D11、D22、D33、D44、D54和P1全部被写入条带9301(9301将是单条带FEC保护域)。
根据本公开的示例实现方式,多个计算装置经由网络彼此通信地耦接,并且多个计算装置中的每一个包括多个存储装置中的一个或多个。多个故障弹性地址空间分布在多个存储装置上,使得多个故障弹性地址空间中的每一个跨越多个存储装置。多个故障弹性地址空间中的每一个被组织为多个条带(例如,图9和图10中的多个930)。多个条带中的每个一个或多个条带是多个前向纠错(FEC)保护域(例如,诸如图9中的多条带FEC域)中的相应一个保护域的一部分。多个条带中的每一个可以包括多个存储块(例如,多个912)。多个条带中的特定条带的每个块可以驻留在多个存储装置中的不同存储装置上。多个存储块的第一部分(例如,由图10的条带9301的9021,2至9021,6组成的五个数量)可以用于存储数据数位,并且多个存储块的第二部分(例如,图10的条带9301的两个9021,1和9021,7的数量)可以用于存储至少部分地基于数据数位计算的保护数位。
多个计算装置可以操作为对多个条带进行排序。该排序可以用于选择多个条带中的哪个条带用于多个故障弹性地址空间中的一个故障弹性地址空间的下一提交操作。该排序可以基于多个条带中的每一个条带中有多少受保护和/或未受保护的存储块。对于多个条带中的任何特定条带,该排序可以基于存储在具有多个条带中的特定条带的多个存储装置上的位图。该排序可以基于多个条带中的每一个条带中有多少当前存储数据的块。该排序可以基于用于提交到多个条带中的每一个条带的读取和写入开销。在任何给定时间,故障弹性地址空间中的每一个可以仅由多个计算装置中的一个计算装置拥有,并且多个故障弹性地址空间中的每一个可以仅由其拥有者读取和写入。计算装置中的每一个可以拥有多个故障弹性地址空间。多个存储装置可以被组织为多个故障域。多个条带中的每一个条带可以跨越多个故障域。故障弹性地址空间中的每一个可以跨越所有多个故障域,使得在多个故障域中的任何特定故障域故障时,将用于重构丢失的数据的工作负荷分布在多个故障域中的其他故障域中的每一个故障域中。多个条带可以分布在多个故障域上,使得在多个故障域中的两个故障域并发故障的情况下,多个条带中的任何特定条带的两个块驻留在多个故障域中的故障的两个故障域上的机会指数地小于多个条带中的任何特定条带的仅一个块驻留在多个故障域中的故障的两个故障域上的机会。
多个计算装置可以操作为首先重构具有两个故障块的多个条带中的任何条带,并且然后重构仅具有一个故障块的多个条带中的任何条带。多个计算装置可以操作为以比仅具有一个故障块的多个条带的重构速率更高的速率(例如,具有专用于重构的更大百分比的CPU时钟周期、专用于重构的更大百分比的网络传送机会等)来执行具有两个故障块的多个条带的重构。多个计算装置可以操作为在一个或多个故障域故障的情况下,基于多个条带中的同一条带的多少其他块已经丢失来确定重构任何特定丢失块的速率。其中,多个故障域中的一个或多个故障域包括多个存储装置。多个FEC保护域中的每一个可以跨越多个条带中的数个条带。
多个条带可以被组织为多个组(例如,如图9中的数据块条带9201至920S),其中,多个组中的每一个组包括多个条带中的一个或多个条带,并且多个计算装置可操作为针对组中的每一个组对该组的多个条带中的一个或多个条带进行排序。多个计算装置可以操作为对多个组中的选定组执行连续提交操作,直到该组中的多个条带中的一个或多个条带不再满足所确定的标准,并且在多个组中的选定组不再满足所确定的标准时,选择多个组中的不同的组。该标准可以基于有多少块可用于要写入的新数据。
尽管已经参考某些实现方式描述了本方法和/或***,但是本领域技术人员将理解,在不脱离本方法和/或***的范围的情况下,可以进行各种改变,并且可以替换等同物。另外,在不脱离本公开的范围的情况下,可以进行许多修改以使特定情况或者材料适应本公开的教导。因此,旨在本方法和/或***不限于所公开的具体实现方式,而是本方法和/或***将包括落入所附权利要求的范围内的所有实现方式。
如本文所使用的,术语“电路(circuits)”和“电路(circuitry)”是指物理电子组件(即,硬件)以及可以配置硬件、由硬件执行和/或以其他方式与硬件相关联的任何软件和/或固件(“代码”)。如本文所使用的,例如,特定处理器和存储器在执行第一一行或多行代码时可以包括第一“电路”,并且在执行第二一行或多行代码时可以包括第二“电路”。如本文所使用的,“和/或”是指由“和/或”连接的列表中的项中的任何一个或多个。例如,“x和/或y”是指三元素集合{(x),(y),(x,y)}中的任何元素。换句话说,“x和/或y”是指“x和y中的一个或两者”。又例如,“x、y和/或z”是指七元素集合{(x),(y),(z),(x,y),(x,z),(y,z),(x,y,z)}中的任何元素。换句话说,“x、y和/或z”是指“x、y和z中的一个或多个”。如本文所使用的,术语“示例性”是指用作非限制性示例、实例或说明。如本文所使用的,术语“例如(e.g.)”和“例如(for example)”阐述了一个或多个非限制性示例、实例或说明的列表。如本文所使用的,每当电路包括执行功能所需的硬件和代码(如果有必要)时,电路“可操作为”执行该功能,而不管功能的执行是禁用或未启用(例如,通过用户可配置设置、工厂调整等)。

Claims (20)

1.一种分布式存储***,包括:
前端计算装置,所述前端计算装置包括本地存储器,其中,所述本地存储器的至少一部分被用作高速缓存存储器;
后端计算装置;以及
多个存储装置,其中,所述后端计算装置向所述前端计算装置提供租赁,以使所述前端计算装置访问所述多个存储装置中的至少一个存储装置,并且其中,所述租赁包括在所述后端计算装置与所述前端计算装置之间共享的令牌,并且其中,所述令牌发信号通知所述前端计算装置的使用。
2.根据权利要求1所述的***,其中,所述高速缓存存储器包括读取高速缓存和写入高速缓存。
3.根据权利要求2所述的***,其中,所述租赁允许在所述读取高速缓存和所述写入高速缓存中的一个或两者中进行高速缓存。
4.根据权利要求1所述的***,其中,所述租赁不允许在所述高速缓存存储器中进行高速缓存。
5.根据权利要求1所述的***,其中,所述本地存储器包括随机存取存储器RAM。
6.根据权利要求5所述的***,其中,所述本地存储器包括动态RAM(DRAM)和静态RAM(SRAM)中的一个或两者。
7.根据权利要求1所述的***,其中,所述多个存储装置包括闪存。
8.根据权利要求1所述的***,其中,所述租赁针对文件的至少一部分。
9.根据权利要求1所述的***,其中,所述租赁针对目录。
10.根据权利要求1所述的***,其中,所述后端计算装置响应于所述前端计算装置向所述后端计算装置提交租赁请求而提供所述租赁。
11.根据权利要求10所述的***,其中,所述租赁请求包括租赁能力。
12.根据权利要求1所述的***,其中,所述前端计算装置被配置为向所述后端计算装置提交租赁续订请求,并且所述租赁续订请求包括续订租赁能力。
13.根据权利要求12所述的***,其中,所述后端计算装置被配置为在所述续订租赁能力与所述租赁的初始租赁能力相同时提供租赁续订。
14.根据权利要求1所述的***,其中,所述后端计算装置被配置为确定所述前端计算装置不需要所述租赁,并且在确定所述前端计算装置不需要所述租赁时,所述后端计算装置被配置为撤销所述租赁。
15.根据权利要求1所述的***,其中,所述前端计算装置被配置为在确定所述前端计算装置不需要所述租赁时放弃所述租赁。
16.一种用于使用分布式存储***的方法,包括:
由前端计算装置向后端计算装置请求租赁以使用所述前端计算装置的本地高速缓存来访问多个存储装置;并且
由所述后端计算装置提供租赁以访问所述多个存储装置,并且其中,所述租赁包括在所述后端计算装置与所述前端计算装置之间共享的令牌,并且其中,所述令牌发信号通知所述前端计算装置的使用。
17.根据权利要求16所述的方法,其中,所述租赁是下列中的一个:针对所述多个存储装置中的文件的至少一部分和针对所述多个存储装置中的目录。
18.根据权利要求16所述的方法,包括所述前端计算装置向所述后端计算装置提交租赁续订请求。
19.根据权利要求16所述的方法,包括在确定所述前端计算装置不需要访问所述多个存储装置时,由所述前端计算装置放弃所述租赁。
20.根据权利要求16所述的方法,包括在确定所述前端计算装置不需要访问所述多个存储装置时,由所述后端计算装置撤销所述租赁。
CN201980051048.6A 2018-06-29 2019-06-05 以分布式方式实现文件的一致性和页面高速缓存支持 Active CN112513828B (zh)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201862691667P 2018-06-29 2018-06-29
US62/691,667 2018-06-29
US16/274,420 2019-02-13
US16/274,420 US10976966B2 (en) 2018-06-29 2019-02-13 Implementing coherency and page cache support in a distributed way for files
PCT/IB2019/000721 WO2020002986A2 (en) 2018-06-29 2019-06-05 Implementing coherency and page cache support in a distributed way for files

Publications (2)

Publication Number Publication Date
CN112513828A CN112513828A (zh) 2021-03-16
CN112513828B true CN112513828B (zh) 2024-06-21

Family

ID=68985914

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201980051048.6A Active CN112513828B (zh) 2018-06-29 2019-06-05 以分布式方式实现文件的一致性和页面高速缓存支持

Country Status (4)

Country Link
US (3) US10976966B2 (zh)
EP (1) EP3814920A4 (zh)
CN (1) CN112513828B (zh)
WO (1) WO2020002986A2 (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11042661B2 (en) * 2018-06-08 2021-06-22 Weka.IO Ltd. Encryption for a distributed filesystem
CN111782614B (zh) * 2020-06-23 2024-04-05 北京青云科技股份有限公司 数据访问方法、装置、设备及存储介质
CN114629806B (zh) * 2022-04-13 2023-12-12 腾讯科技(成都)有限公司 数据处理方法、装置、电子设备、存储介质及程序产品

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6487636B1 (en) 2000-04-24 2002-11-26 Hewlett-Packard Co. Method and apparatus for mapping data in a heterogeneous disk array storage system
US7134138B2 (en) * 2001-02-15 2006-11-07 Emc Corporation Methods and apparatus for providing security for a data storage system
AU2002313583A1 (en) * 2001-08-01 2003-02-17 Actona Technologies Ltd. Virtual file-sharing network
US6912612B2 (en) * 2002-02-25 2005-06-28 Intel Corporation Shared bypass bus structure
US20030188096A1 (en) * 2002-03-15 2003-10-02 Otto Lehner Distributing access rights to mass storage
CA2513503A1 (en) * 2003-01-17 2004-08-12 Tacit Networks, Inc. Method and system for use of storage caching with a distributed file system
US7681072B1 (en) 2004-08-13 2010-03-16 Panasas, Inc. Systems and methods for facilitating file reconstruction and restoration in data storage systems where a RAID-X format is implemented at a file level within a plurality of storage devices
US7447839B2 (en) 2005-09-13 2008-11-04 Yahoo! Inc. System for a distributed column chunk data store
US7793146B1 (en) 2007-08-07 2010-09-07 Panasas, Inc. Methods for storing data in a data storage system where a RAID-X format or formats are implemented at a file level
US20100125695A1 (en) * 2008-11-15 2010-05-20 Nanostar Corporation Non-volatile memory storage system
US8185566B2 (en) 2009-01-15 2012-05-22 Microsoft Corporation Client-based caching of remote files
US8645749B2 (en) 2009-02-04 2014-02-04 Micron Technology, Inc. Systems and methods for storing and recovering controller data in non-volatile memory devices
US8458287B2 (en) 2009-07-31 2013-06-04 Microsoft Corporation Erasure coded storage aggregation in data centers
US9135181B2 (en) * 2010-10-27 2015-09-15 International Business Machines Corporation Management of cache memory in a flash cache architecture
US8959605B2 (en) * 2011-12-14 2015-02-17 Apple Inc. System and method for asset lease management
US9501240B2 (en) * 2014-02-21 2016-11-22 International Business Machines Corporation Efficient free-space management of multi-target peer-to-peer remote copy (PPRC) modified sectors bitmap in bind segments
US10055352B2 (en) * 2014-03-11 2018-08-21 Amazon Technologies, Inc. Page cache write logging at block-based storage
US9087012B1 (en) 2014-06-04 2015-07-21 Pure Storage, Inc. Disaster recovery at high reliability in a storage cluster
US9582363B2 (en) 2014-06-09 2017-02-28 International Business Machines Corporation Failure domain based storage system data stripe layout
US9792305B1 (en) * 2014-10-30 2017-10-17 Amazon Technologies, Inc. System for controlling access to stored values
US9921910B2 (en) 2015-02-19 2018-03-20 Netapp, Inc. Virtual chunk service based data recovery in a distributed data storage system
US9448887B1 (en) 2015-08-22 2016-09-20 Weka.IO Ltd. Distributed erasure coded virtual file system

Also Published As

Publication number Publication date
CN112513828A (zh) 2021-03-16
US11977786B2 (en) 2024-05-07
US20200004426A1 (en) 2020-01-02
US10976966B2 (en) 2021-04-13
EP3814920A4 (en) 2022-03-30
WO2020002986A3 (en) 2020-06-11
WO2020002986A2 (en) 2020-01-02
EP3814920A2 (en) 2021-05-05
US20210208786A1 (en) 2021-07-08
US20240211179A1 (en) 2024-06-27

Similar Documents

Publication Publication Date Title
CN111587428B (zh) 分布式存储***中的元数据日志
CN111587423B (zh) 分布式存储***的分层数据策略
US20240053886A1 (en) File operations in a distributed storage system
US11977786B2 (en) Implementing coherency and page cache support in a distributed way for files
US11899621B2 (en) Access redirection in a distributive file system
US11693818B2 (en) Data migration in a distributive file system
US11693738B2 (en) Storage system spanning multiple failure domains
CN111587421B (zh) 分布式存储***电源故障阻抗的方法和***
US20230221897A1 (en) Implementing coherency and page cache support for a storage system spread across multiple data centers
CN111587420A (zh) 分布式存储***快速故障恢复的方法和***
US12038871B2 (en) Data migration in a distributive file system

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant