CN114879910B - 分布式块存储底层读写系统及方法 - Google Patents
分布式块存储底层读写系统及方法 Download PDFInfo
- Publication number
- CN114879910B CN114879910B CN202210517343.XA CN202210517343A CN114879910B CN 114879910 B CN114879910 B CN 114879910B CN 202210517343 A CN202210517343 A CN 202210517343A CN 114879910 B CN114879910 B CN 114879910B
- Authority
- CN
- China
- Prior art keywords
- index
- data block
- data
- log
- request
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0626—Reducing size or complexity of storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0643—Management of files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0662—Virtualisation aspects
- G06F3/0665—Virtualisation aspects at area level, e.g. provisioning of virtual or logical volumes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
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)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了分布式块存储底层读写系统及方法,属于分布式存储技术领域,要解决的技术问题为如何满足分布式块存储的轻量级、低开销和简易运维技术特性。包括:数据卷,配置于虚拟机/容器,存储有数据块;卷引擎,用于接收客户端发送的写IO请求以及读IO请求,并转发所述写IO请求以及读IO请求;数据文件,配置于磁盘系统,用于存储数据日志格式的数据块,并用于通过索引日志记录卷副本中所有数据块的索引信息;卷副本,用于将写IO请求中数据块转换为数据日志格式,以追加写的方式将数据日志格式的数据库写入数据文件,并更新索引日志;用于基于读IO请求从索引日志中查找对应数据块的索引信息,基于索引信息从数据文件中读取数据块。
Description
技术领域
本发明涉及分布式存储技术领域,具体地说是分布式块存储底层读写系统及方法。
背景技术
分布式云将云计算能力进一步拓展到边缘,边缘云逐渐成为云计算的发展趋势。受限于边缘站点环境,边缘云的规模通常较小,部署的服务器数量较少,可提供的硬件资源有限,因此边缘云平台一般不会像中心云平台那样“面面俱到”,往往更加轻量化,占用更小的资源开销,微服务化架构平台,提供满足各类边缘业务场景需求的计算、网络和存储服务。在分布式存储领域,以Ceph为代表传统分布式存储系统,提供块、对象和文件存储能力,它以高扩展性、高性能和高可靠性等特点,云计算领域应用最为广泛的分布式存储系统。
然而Ceph本身的业务架构设计较为复杂,导致存储读写IO流程较长,如图1所示,同时涉及到的数据结构也比较复杂,并伴随着大量并发线程频繁切换等,会造成消耗较大内存和CPU。其次,对于块存储基本存储单元存储卷,根据IO流程,其存储数据通过不同PG分散至所有节点,这样导致像Ceph RBD这类分布式块存储系统很难实现基于存储卷级别的在线滚动升级。
尽管以Ceph RBD为代表的分布式块存储系统在技术上已经非常成熟,可作为云计算行业通用的云存储后端,但是在边缘计算领域中,尤其是针对大存储、低算力为核心需求的边缘视频业务场景下,这类通用存储系统并不具备轻量级、低开销和简易运维等符合这类边缘计算需求的技术特性。
如何满足分布式块存储的轻量级、低开销和简易运维技术特性,是需要解决的技术问题。
发明内容
本发明的技术任务是针对以上不足,提供分布式块存储底层读写系统及方法,来解决如何满足分布式块存储的轻量级、低开销和简易运维技术特性的技术问题。
第一方面,本发明的一种分布式块存储底层读写系统,包括:
数据卷,所述数据卷配置于虚拟机/容器,数据卷中存储有数据块;
卷引擎,所述卷引擎与数据卷一一对应,用于管理对应的数据卷并作为数据卷的读写IO通道和入口,用于接收客户端发送的写IO请求以及读IO请求,并转发所述写IO请求以及读IO请求;
数据文件,所述数据文件配置于磁盘系统,用于存储数据日志格式的数据块,并用于通过索引日志记录卷副本中所有数据块的索引信息;
卷副本,所述卷副本与所述卷引擎一一对应并交互,且每个卷副本对应有至少一个数据文件,用于将写IO请求中数据块转换为数据日志格式,以追加写的方式将数据日志格式的数据库写入数据文件、向卷引擎返回写IO响应,并更新索引日志;用于基于读IO请求从索引日志中查找对应数据块的索引信息,基于索引信息从数据文件中读取数据块,并向卷引擎返回读IO响应。
作为优选,所述数据日志的数据结构包括:
日志头,所述日志头用于存储写IO请求中数据块的索引信息,所述索引信息包括操作请求、数据块在数据卷中的地址信息、数据块大小、数据块在数据文件中的地址信息,所述操作请求包括写入或删除;
日志数据,所述日志数据用于存储写IO请求中数据块实际信息,当请求操作为删除时,日志数据为空;
对于索引日志,每个索引条目对应一个数据块的索引信息,所述索引信息包括索引键值、数据块在数据卷中的偏移量和索引值、数据块大小、以及数据块在数据文件中的地址信息。
作为优选,所述日志索引底层由有序键值B+树引擎实现持久化存储。
作为优选,所述卷副本用于通过如下步骤更新索引日志:
根据写IO请求中数据块在数据卷中偏移量和数据块大小,从索引日志中查找满足包含不大于数据块偏移量的最大索引键值与小于数据块偏移量+数据块大小的最大索引键值之间的所有索引条目;
如果不存在满足条件的索引条目,对于数据块写入操作,构建新的索引条目,其中,索引键值为数据块偏移量,索引值为数据块大小和数据块在数据文件中的地址信息,并将索引键值和索引值插入索引日志中;对于数据块删除操作,则不存在最新数据块,直接忽略;
如果存在一条满足条件的索引条目,对于数据块写入操作,判断请求数据块是否与索引条目对应的数据块重叠,如果重叠,则截断覆盖部分,截断后前段数据块大小为0,则删除索引条目,否则更新索引条目中数据块大小为截断后前段数据块大小,截断后后段数据块大小不为0,则构建新的索引条目,其中键值为截断后后段数据块偏移量,索引值为截断后后段数据块大小和数据文件地址信息,再将构建的新的索引条目插入索引日志中,最后构建新的索引条目,其中键值为索引键值为请求数据块偏移量,索引值为数据块大小和数据块在数据文件中的地址信息,插入日志索引中;对于数据块删除操作,并无数据块写入,与上述数据块写入操作的唯一区别是最后无需插入新数据块索引条目到索引日志中;
如果存在多条满足条件的索引条目,对于数据块写入操作,判断请求数据块是否与第一条索引对应的数据块重叠,如果重叠,则截断覆盖部分,截断后数据块大小为0,则删除第一条索引,否则更新第一条索引中的数据块大小为截断后数据块大小,判断请求数据块是否与最后一条索引对应的数据块重叠,如果重叠,则截断覆盖部分,先删除最后一条索引,截断后数据块大小为0,再构建新的索引条目,其中键值为截断后的数据块偏移量,索引值为截断后数据块大小和数据文件索引地址,将所述新的索引条目插入到索引日志中,然后删除所有中间其他的索引条目,最后构建新的索引条目,其中键值为索引键值为请求数据块偏移量,索引值为数据块大小和数据块在数据文件中的地址信息,将构建的新的索引条目插入索引日志中;对于数据块删除操作,并无数据块写入,与上述数据块写入操作的唯一区别是最后无需插入新数据块索引条目到索引日志中。
作为优选,所述卷副本用于通过如下步骤基于读IO请求从索引日志中查找对应数据块的索引信息,基于索引信息从数据文件中读取数据块:
根据读IO请求中数据块在数据卷中的偏移量和数据块大小,从索引日志中查找满足包含不大于数据块偏移量的最大索引键值与小于数据块偏移量+数据块大小的最大索引键值之间的所有索引条目;
如果存在一条满足条件的索引条目,根据索引条目中数据文件地址信息,从数据文件中读取请求长度的数据块,并向卷引擎返回读IO响应;
若存在多条满足条件的索引条目,根据第一条索引条目数据文件地址信息,读取命中部分数据块作为第一部分数据块,根据中间索引条目中的数据文件地址信息,读取所有中间索引条目对应的数据块作为第二部分数据块,根据最后一条索引目录的数据文件地址信息,读取命中部分数据块作为第三分部数据块,然后将所述第一部分数据块、第二部分数据块以及第三部分数据块拼接成一个数据块,并向卷引擎返回读IO响应。
第二方面,本发明的一种分布式块存储底层读写方法,应用于如第一方面任一项所述的一种分布式块存储底层读写系统,所述方法包括如下步骤:
对于写IO请求,通过卷引擎将客户端提交的所述写IO请求转发至卷副本,通过卷副本将写IO请求中数据块转换为数据日志格式,以追加写的方式将数据日志格式的数据库写入数据文件、向卷引擎返回写IO响应,并更新索引日志;
对于读IO请求,通过卷引擎将客户端提交的所述读IO请求转发至卷副本,基于所述读IO请求、通过卷副本从索引日志中查找对应数据块的索引信息,基于索引信息从数据文件中读取数据块,并向卷引擎返回读IO响应。
作为优选,所述数据日志的数据结构包括:
日志头,所述日志头用于存储写IO请求中数据块的索引信息,所述索引信息包括操作请求、数据块在数据卷中的地址信息、数据块大小、数据块在数据文件中的地址信息,所述操作请求包括写入或删除;
日志数据,所述日志数据用于存储写IO请求中数据块实际信息,当请求操作为删除时,日志数据为空;
对于索引日志,每个索引条目对应一个数据块的索引信息,所述索引信息包括索引键值、数据块在数据卷中的偏移量和索引值、数据块大小、以及数据块在数据文件中的地址信息。
作为优选,所述日志索引底层由有序键值B+树引擎实现持久化存储。
作为优选,所述更新索引日志包括如下步骤:
根据写IO请求中数据块在数据卷中偏移量和数据块大小,从索引日志中查找满足包含不大于数据块偏移量的最大索引键值与小于数据块偏移量+数据块大小的最大索引键值之间的所有索引条目;
如果不存在满足条件的索引条目,对于数据块写入操作,构建新的索引条目,其中,索引键值为数据块偏移量,索引值为数据块大小和数据块在数据文件中的地址信息,并将索引键值和索引值插入索引日志中;对于数据块删除操作,则不存在最新数据块,直接忽略;
如果存在一条满足条件的索引条目,对于数据块写入操作,判断请求数据块是否与索引条目对应的数据块重叠,如果重叠,则截断覆盖部分,截断后前段数据块大小为0,则删除索引条目,否则更新索引条目中数据块大小为截断后前段数据块大小,截断后后段数据块大小不为0,则构建新的索引条目,其中键值为截断后后段数据块偏移量,索引值为截断后后段数据块大小和数据文件地址信息,再将构建的新的索引条目插入索引日志中,最后构建新的索引条目,其中键值为索引键值为请求数据块偏移量,索引值为数据块大小和数据块在数据文件中的地址信息,插入日志索引中;对于数据块删除操作,并无数据块写入,与上述数据块写入操作的唯一区别是最后无需插入新数据块索引条目到索引日志中;
如果存在多条满足条件的索引条目,对于数据块写入操作,判断请求数据块是否与第一条索引对应的数据块重叠,如果重叠,则截断覆盖部分,截断后数据块大小为0,则删除第一条索引,否则更新第一条索引中的数据块大小为截断后数据块大小,判断请求数据块是否与最后一条索引对应的数据块重叠,如果重叠,则截断覆盖部分,先删除最后一条索引,截断后数据块大小为0,再构建新的索引条目,其中键值为截断后的数据块偏移量,索引值为截断后数据块大小和数据文件索引地址,将所述新的索引条目插入到索引日志中,然后删除所有中间其他的索引条目,最后构建新的索引条目,其中键值为索引键值为请求数据块偏移量,索引值为数据块大小和数据块在数据文件中的地址信息,将构建的新的索引条目插入索引日志中;对于数据块删除操作,并无数据块写入,与上述数据块写入操作的唯一区别是最后无需插入新数据块索引条目到索引日志中。
作为优选,基于所述读IO请求、通过卷副本从索引日志中查找对应数据块的索引信息,基于索引信息从数据文件中读取数据块,包括如下步骤:
根据读IO请求中数据块在数据卷中的偏移量和数据块大小,从索引日志中查找满足包含不大于数据块偏移量的最大索引键值与小于数据块偏移量+数据块大小的最大索引键值之间的所有索引条目;
如果存在一条满足条件的索引条目,根据索引条目中数据文件地址信息,从数据文件中读取请求长度的数据块,并向卷引擎返回读IO响应;
若存在多条满足条件的索引条目,根据第一条索引条目数据文件地址信息,读取命中部分数据块作为第一部分数据块,根据中间索引条目中的数据文件地址信息,读取所有中间索引条目对应的数据块作为第二部分数据块,根据最后一条索引目录的数据文件地址信息,读取命中部分数据块作为第三分部数据块,然后将所述第一部分数据块、第二部分数据块以及第三部分数据块拼接成一个数据块,并向卷引擎返回读IO响应。
本发明的分布式块存储底层读写系统及方法具有以下优点:
1、底层写数据采用追加写数据日志把随机写转换成顺序写,提升写效率,底层读数据时日志索引采用有序键值B+树引擎,以较低的内存开销代价来实现高效的数据块日志范围查询;
2、采用数据卷级调度策略,而无需传统的元数据计算方法如ceph的crush算法等来实现数据块调度,简化了块存储IO流程,进一步降低了cpu资源开销;
3、卷引擎以及卷副本均为容器,采用容器实现轻量级架构,且容易与现有的容器云平台集成,实现微服务化块存储服务。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
下面结合附图对本发明进一步说明。
图1为实施例1一种分布式块存储底层读写系统的系统架构示意图;
图2为实施例2一种分布式块存储底层读写方法中写IO流程示意图;
图3为实施例2一种分布式块存储底层读写方法中读IO流程示意图;
图4为实施例2一种分布式块存储底层读写方法中写入数据块-查询&更新索引日志的流程示意图;
图5为实施例2一种分布式块存储底层读写方法中删除数据块-查询&更新日志索引的流程示意图;
图6实施例2一种分布式块存储底层读写方法中读取数据块-查询日志索引的流程示意图。
具体实施方式
下面结合附图和具体实施例对本发明作进一步说明,以使本领域的技术人员可以更好地理解本发明并能予以实施,但所举实施例不作为对本发明的限定,在不冲突的情况下,本发明实施例以及实施例中的技术特征可以相互结合。
本发明实施例提供分布式块存储底层读写系统及方法,用于解决如何满足分布式块存储的轻量级、低开销和简易运维技术特性的技术问题。
实施例1:
本发明一种分布式块存储底层读写系统,包括数据卷、卷引擎、数据文件、以及卷副本。
数据卷配置于虚拟机/容器,数据卷中存储有数据块。
本实施例中卷引擎与数据卷一一对应,卷引擎容器作为实现块数据卷业务逻辑的守护进程,在管理面实现对数据卷的管理,一个卷引擎容器对应管理一个数据卷,在数据面承担数据卷的读写IO通道和入口,向卷副本进行数据读写IO。具体的,用于接收客户端发送的写IO请求以及读IO请求,并转发所述写IO请求以及读IO请求。
卷副本容器作为实现数据卷副本业务逻辑的守护进程,在管里面实现对数据卷副本的管理,一个卷副本容器管理一个数据卷副本,在数据面承担数据卷某个副本的读写IO通道和入口。具体的,卷副本与所述卷引擎一一对应并交互,且每个卷副本对应有至少一个数据文件,用于将写IO请求中数据块转换为数据日志格式,以追加写的方式将数据日志格式的数据库写入数据文件、向卷引擎返回写IO响应,并更新索引日志;用于基于读IO请求从索引日志中查找对应数据块的索引信息,基于索引信息从数据文件中读取数据块,并向卷引擎返回读IO响应。
数据文件配置于磁盘系统作为磁盘文件,用于存储数据日志格式的数据块,并用于通过索引日志记录卷副本中所有数据块的索引信息。数据文件实现数据卷的持久化层,由磁盘文件系统的稀疏文件实现,每个数据卷副本对应一个数据文件,由卷副本容器创建和管理对应的数据文件,实现对块数据的读写IO。
读写IO流程涉及数据结构包括数据日志DataLog和日志索引LogIndex,数据日志作为块IO数据存储格式持久化到数据文件,实现数据落盘,日志索引则记录了当前卷副本中所有最新数据块的索引信息。
数据日志的数据结构包括日志头和日志数据,日志头LogHeader:写IO请求数据块的索引信息,包括写IO请求的具体操作:写入或者删除,数据块在数据卷中地址信息,数据块大小,数据块在数据文件地址信息。日志数据LogData:写IO请求的实际数据块,当请求操作为删除时,日志数据为空。
日志索引底层由B+树实现持久化存储,每个索引条目对应一个数据块的索引信息,包括索引键值:数据块在数据卷中的偏移量,和索引值:数据块大小以及数据块在数据文件中的地址信息。为写IO提供索引条目插入、更新、删除能力,为读IO提供索引条目范围搜索能力。
本实施例中,底层写数据采用追加写数据日志把随机写转换成顺序写,提升写效率,底层读数据时日志索引采用有序键值B+树引擎,以较低的内存开销代价来实现高效的数据块日志范围查询。
本实施例读写IO仅涉及单副本读写IO。
对于写IO流程,卷引擎用于接收客户端发送的数据块写请求,并将IO请求转发至卷副本。卷副本接收到数据块写请求,将IO请求中的数据块转换成数据日志格式,然后以追加写方式写入卷副本对应的数据文件,写入后向卷引擎返回当前写IO请求的响应,只有写入成功时,才算当前写请求成功。将数据日志写入数据文件成功后,卷副本用于异步地更新索引日志。
其中,卷副本用于通过如下步骤实现写请求时异步更新日志索引流程:
(1)首先根据请求中数据块在数据卷中的偏移量和数据块大小,从索引日志中查找出满足包含不大于数据块偏移量的最大索引键值与小于数据块偏移量+数据块大小的最大索引键值之间的所有索引条目;
(2)如果不存在满足条件的索引条目:
对于数据块写入操作,则构建新的索引条目,其中,索引键值为数据块偏移量,索引值为数据块大小和数据块在数据文件中的地址信息,然后插入日志索引中;
对于数据块删除操作,则不存在最新数据块,直接忽略;
(3)如果存在一条满足条件的索引条目:
对于数据块写入操作,判断请求数据块是否与索引条目对应的数据块重叠,如果重叠,则截断覆盖部分,截断后前段数据块大小为0,则删除索引条目,否则更新索引条目中数据块大小为截断后前段数据块大小,截断后后段数据块大小不为0,则构建新的索引条目,其中键值为截断后后段数据块偏移量,索引值为截断后后段数据块大小和数据文件地址信息,再插入日志索引中,最后构建新的索引条目,其中键值为索引键值为请求数据块偏移量,索引值为数据块大小和数据块在数据文件中的地址信息,插入日志索引中;
对于数据块删除操作,并无数据块写入,因此与上述写入操作的唯一区别是最后无需插入新数据块索引条目到日志索引中;
(4)如果存在多条满足条件的索引条目:
对于数据块写入操作,判断请求数据块是否与第一条索引对应的数据块重叠,如果重叠,则截断覆盖部分,截断后数据块大小为0,则删除第一条索引,否则更新第一条索引中的数据块大小为截断后数据块大小,判断请求数据块是否与最后一条索引对应的数据块重叠,如果重叠,则截断覆盖部分,先删除最后一条索引,截断后数据块大小为0,再构建新的索引条目,其中键值为截断后的数据块偏移量,索引值为截断后数据块大小和数据文件索引地址,再插入到日志索引中,然后删除所有中间其他的索引条目,最后构建新的索引条目,其中键值为索引键值为请求数据块偏移量,索引值为数据块大小和数据块在数据文件中的地址信息,插入日志索引中;
对于数据块删除操作,并无数据块写入,因此与上述写入操作的唯一区别是最后无需插入新数据块索引条目到日志索引中。
在读IO流程中,卷引擎用于接收客户端发送的数据块读请求,然后将IO请求转发至卷副本。卷副本用于通过如下步骤实现写IO流程:
(1)接收到数据块读请求,根据请求中的数据块在卷数据中的偏移量和数据块大小,从日志索引中查找满足包含不大于数据块偏移量的最大索引键值与小于数据块偏移量+数据块大小的最大索引键值之间的所有索引条目;
(2)若存在一条满足条件索引条目,则根据索引条目中数据文件地址信息,从数据文件中读取请求长度的数据块,最后卷副本向卷引擎返回读IO响应数据;
(3)若存在多条满足条件的索引条目,根据第一条索引条目数据文件地址信息,读取命中部分数据块,根据中间索引条目中的数据文件地址信息,读取所有中间索引条目对应的数据块,根据最后一条索引目录的数据文件地址信息,读取命中部分数据块,然后将三部分数据块拼接成一个数据块,最后卷副本向卷引擎返回读IO响应。
实施例2:
本发明一种分布式块存储底层读写方法,该方法是基于实施例1公开的一种分布式块存储底层读写系统实现的。在该方法中,对于写IO请求,通过卷引擎将客户端提交的所述写IO请求转发至卷副本,通过卷副本将写IO请求中数据块转换为数据日志格式,以追加写的方式将数据日志格式的数据库写入数据文件、向卷引擎返回写IO响应,并更新索引日志;对于读IO请求,通过卷引擎将客户端提交的所述读IO请求转发至卷副本,基于所述读IO请求、通过卷副本从索引日志中查找对应数据块的索引信息,基于索引信息从数据文件中读取数据块,并向卷引擎返回读IO响应。
其中,数据日志的数据结构包括日志头和日志数据,日志头用于存储写IO请求中数据块的索引信息,所述索引信息包括操作请求、数据块在数据卷中的地址信息、数据块大小、数据块在数据文件中的地址信息,所述操作请求包括写入或删除;日志数据用于存储写IO请求中数据块实际信息,当请求操作为删除时,日志数据为空。
对于索引日志,每个索引条目对应一个数据块的索引信息,所述索引信息包括索引键值、数据块在数据卷中的偏移量和索引值、数据块大小、以及数据块在数据文件中的地址信息。作为具体实施,日志索引底层由有序键值B+树引擎实现持久化存储。
作为更新索引日志的具体实施,其包括如下步骤:
(1)根据写IO请求中数据块在数据卷中偏移量和数据块大小,从索引日志中查找满足包含不大于数据块偏移量的最大索引键值与小于数据块偏移量+数据块大小的最大索引键值之间的所有索引条目;
(2)如果不存在满足条件的索引条目,对于数据块写入操作,构建新的索引条目,其中,索引键值为数据块偏移量,索引值为数据块大小和数据块在数据文件中的地址信息,并将索引键值和索引值插入索引日志中;对于数据块删除操作,则不存在最新数据块,直接忽略;
(3)如果存在一条满足条件的索引条目,对于数据块写入操作,判断请求数据块是否与索引条目对应的数据块重叠,如果重叠,则截断覆盖部分,截断后前段数据块大小为0,则删除索引条目,否则更新索引条目中数据块大小为截断后前段数据块大小,截断后后段数据块大小不为0,则构建新的索引条目,其中键值为截断后后段数据块偏移量,索引值为截断后后段数据块大小和数据文件地址信息,再将构建的新的索引条目插入索引日志中,最后构建新的索引条目,其中键值为索引键值为请求数据块偏移量,索引值为数据块大小和数据块在数据文件中的地址信息,插入日志索引中;对于数据块删除操作,并无数据块写入,与上述数据块写入操作的唯一区别是最后无需插入新数据块索引条目到索引日志中;
(4)如果存在多条满足条件的索引条目,对于数据块写入操作,判断请求数据块是否与第一条索引对应的数据块重叠,如果重叠,则截断覆盖部分,截断后数据块大小为0,则删除第一条索引,否则更新第一条索引中的数据块大小为截断后数据块大小,判断请求数据块是否与最后一条索引对应的数据块重叠,如果重叠,则截断覆盖部分,先删除最后一条索引,截断后数据块大小为0,再构建新的索引条目,其中键值为截断后的数据块偏移量,索引值为截断后数据块大小和数据文件索引地址,将所述新的索引条目插入到索引日志中,然后删除所有中间其他的索引条目,最后构建新的索引条目,其中键值为索引键值为请求数据块偏移量,索引值为数据块大小和数据块在数据文件中的地址信息,将构建的新的索引条目插入索引日志中;对于数据块删除操作,并无数据块写入,与上述数据块写入操作的唯一区别是最后无需插入新数据块索引条目到索引日志中。
本实施例中,基于读IO请求、通过卷副本从索引日志中查找对应数据块的索引信息,基于索引信息从数据文件中读取数据块。作为具体实施,其包括如下步骤:
(1)根据读IO请求中数据块在数据卷中的偏移量和数据块大小,从索引日志中查找满足包含不大于数据块偏移量的最大索引键值与小于数据块偏移量+数据块大小的最大索引键值之间的所有索引条目;
(2)如果存在一条满足条件的索引条目,根据索引条目中数据文件地址信息,从数据文件中读取请求长度的数据块,并向卷引擎返回读IO响应;
(3)若存在多条满足条件的索引条目,根据第一条索引条目数据文件地址信息,读取命中部分数据块作为第一部分数据块,根据中间索引条目中的数据文件地址信息,读取所有中间索引条目对应的数据块作为第二部分数据块,根据最后一条索引目录的数据文件地址信息,读取命中部分数据块作为第三分部数据块,然后将所述第一部分数据块、第二部分数据块以及第三部分数据块拼接成一个数据块,并向卷引擎返回读IO响应。
上文通过附图和优选实施例对本发明进行了详细展示和说明,然而本发明不限于这些已揭示的实施例,基与上述多个实施例本领域技术人员可以知晓,可以组合上述不同实施例中的代码审核手段得到本发明更多的实施例,这些实施例也在本发明的保护范围之内。
Claims (6)
1.一种分布式块存储底层读写系统,其特征在于包括:
数据卷,所述数据卷配置于虚拟机/容器,数据卷中存储有数据块;
卷引擎,所述卷引擎与数据卷一一对应,用于管理对应的数据卷并作为数据卷的读写IO通道和入口,用于接收客户端发送的写IO请求以及读IO请求,并转发所述写IO请求以及读IO请求;
数据文件,所述数据文件配置于磁盘系统,用于存储数据日志格式的数据块,并用于通过索引日志记录卷副本中所有数据块的索引信息;
卷副本,所述卷副本与所述卷引擎一一对应并交互,且每个卷副本对应有至少一个数据文件,用于将写IO请求中数据块转换为数据日志格式,以追加写的方式将数据日志格式的数据库写入数据文件、向卷引擎返回写IO响应,并更新索引日志;用于基于读IO请求从索引日志中查找对应数据块的索引信息,基于索引信息从数据文件中读取数据块,并向卷引擎返回读IO响应;
所述数据日志的数据结构包括:
日志头,所述日志头用于存储写IO请求中数据块的索引信息,所述索引信息包括操作请求、数据块在数据卷中的地址信息、数据块大小、数据块在数据文件中的地址信息,所述操作请求包括写入或删除;
日志数据,所述日志数据用于存储写IO请求中数据块实际信息,当请求操作为删除时,日志数据为空;
对于索引日志,每个索引条目对应一个数据块的索引信息,所述索引信息包括索引键值、数据块在数据卷中的偏移量和索引值、数据块大小、以及数据块在数据文件中的地址信息;
所述卷副本用于通过如下步骤更新索引日志:
根据写IO请求中数据块在数据卷中偏移量和数据块大小,从索引日志中查找满足包含不大于数据块偏移量的最大索引键值与小于数据块偏移量+数据块大小的最大索引键值之间的所有索引条目;
如果不存在满足条件的索引条目,对于数据块写入操作,构建新的索引条目,其中,索引键值为数据块偏移量,索引值为数据块大小和数据块在数据文件中的地址信息,并将索引键值和索引值插入索引日志中;对于数据块删除操作,则不存在最新数据块,直接忽略;
如果存在一条满足条件的索引条目,对于数据块写入操作,判断请求数据块是否与索引条目对应的数据块重叠,如果重叠,则截断覆盖部分,截断后前段数据块大小为0,则删除索引条目,否则更新索引条目中数据块大小为截断后前段数据块大小,截断后后段数据块大小不为0,则构建新的索引条目,其中键值为截断后后段数据块偏移量,索引值为截断后后段数据块大小和数据文件地址信息,再将构建的新的索引条目插入索引日志中,最后构建新的索引条目,其中键值为索引键值为请求数据块偏移量,索引值为数据块大小和数据块在数据文件中的地址信息,插入索引日志中;对于数据块删除操作,并无数据块写入,与上述数据块写入操作的唯一区别是最后无需插入新数据块索引条目到索引日志中;
如果存在多条满足条件的索引条目,对于数据块写入操作,判断请求数据块是否与第一条索引对应的数据块重叠,如果重叠,则截断覆盖部分,截断后数据块大小为0,则删除第一条索引,否则更新第一条索引中的数据块大小为截断后数据块大小,判断请求数据块是否与最后一条索引对应的数据块重叠,如果重叠,则截断覆盖部分,先删除最后一条索引,截断后数据块大小为0,再构建新的索引条目,其中键值为截断后的数据块偏移量,索引值为截断后数据块大小和数据文件索引地址,将所述新的索引条目插入到索引日志中,然后删除所有中间其他的索引条目,最后构建新的索引条目,其中键值为索引键值为请求数据块偏移量,索引值为数据块大小和数据块在数据文件中的地址信息,将构建的新的索引条目插入索引日志中;对于数据块删除操作,并无数据块写入,与上述数据块写入操作的唯一区别是最后无需插入新数据块索引条目到索引日志中。
2.根据权利要求1所述的一种分布式块存储底层读写系统,其特征在于所述索引日志底层由有序键值B+树引擎实现持久化存储。
3.根据权利要求1或2所述的一种分布式块存储底层读写系统,其特征在于所述卷副本用于通过如下步骤基于读IO请求从索引日志中查找对应数据块的索引信息,基于索引信息从数据文件中读取数据块:
根据读IO请求中数据块在数据卷中的偏移量和数据块大小,从索引日志中查找满足包含不大于数据块偏移量的最大索引键值与小于数据块偏移量+数据块大小的最大索引键值之间的所有索引条目;
如果存在一条满足条件的索引条目,根据索引条目中数据文件地址信息,从数据文件中读取请求长度的数据块,并向卷引擎返回读IO响应;
若存在多条满足条件的索引条目,根据第一条索引条目数据文件地址信息,读取命中部分数据块作为第一部分数据块,根据中间索引条目中的数据文件地址信息,读取所有中间索引条目对应的数据块作为第二部分数据块,根据最后一条索引目录的数据文件地址信息,读取命中部分数据块作为第三分部数据块,然后将所述第一部分数据块、第二部分数据块以及第三部分数据块拼接成一个数据块,并向卷引擎返回读IO响应。
4.一种分布式块存储底层读写方法,其特征在于应用于如权利要求1-3任一项所述的一种分布式块存储底层读写系统,所述方法包括如下步骤:
对于写IO请求,通过卷引擎将客户端提交的所述写IO请求转发至卷副本,通过卷副本将写IO请求中数据块转换为数据日志格式,以追加写的方式将数据日志格式的数据库写入数据文件、向卷引擎返回写IO响应,并更新索引日志;
对于读IO请求,通过卷引擎将客户端提交的所述读IO请求转发至卷副本,基于所述读IO请求、通过卷副本从索引日志中查找对应数据块的索引信息,基于索引信息从数据文件中读取数据块,并向卷引擎返回读IO响应;
所述数据日志的数据结构包括:
日志头,所述日志头用于存储写IO请求中数据块的索引信息,所述索引信息包括操作请求、数据块在数据卷中的地址信息、数据块大小、数据块在数据文件中的地址信息,所述操作请求包括写入或删除;
日志数据,所述日志数据用于存储写IO请求中数据块实际信息,当请求操作为删除时,日志数据为空;
对于索引日志,每个索引条目对应一个数据块的索引信息,所述索引信息包括索引键值、数据块在数据卷中的偏移量和索引值、数据块大小、以及数据块在数据文件中的地址信息;
所述更新索引日志包括如下步骤:
根据写IO请求中数据块在数据卷中偏移量和数据块大小,从索引日志中查找满足包含不大于数据块偏移量的最大索引键值与小于数据块偏移量+数据块大小的最大索引键值之间的所有索引条目;
如果不存在满足条件的索引条目,对于数据块写入操作,构建新的索引条目,其中,索引键值为数据块偏移量,索引值为数据块大小和数据块在数据文件中的地址信息,并将索引键值和索引值插入索引日志中;对于数据块删除操作,则不存在最新数据块,直接忽略;
如果存在一条满足条件的索引条目,对于数据块写入操作,判断请求数据块是否与索引条目对应的数据块重叠,如果重叠,则截断覆盖部分,截断后前段数据块大小为0,则删除索引条目,否则更新索引条目中数据块大小为截断后前段数据块大小,截断后后段数据块大小不为0,则构建新的索引条目,其中键值为截断后后段数据块偏移量,索引值为截断后后段数据块大小和数据文件地址信息,再将构建的新的索引条目插入索引日志中,最后构建新的索引条目,其中键值为索引键值为请求数据块偏移量,索引值为数据块大小和数据块在数据文件中的地址信息,插入索引日志中;对于数据块删除操作,并无数据块写入,与上述数据块写入操作的唯一区别是最后无需插入新数据块索引条目到索引日志中;
如果存在多条满足条件的索引条目,对于数据块写入操作,判断请求数据块是否与第一条索引对应的数据块重叠,如果重叠,则截断覆盖部分,截断后数据块大小为0,则删除第一条索引,否则更新第一条索引中的数据块大小为截断后数据块大小,判断请求数据块是否与最后一条索引对应的数据块重叠,如果重叠,则截断覆盖部分,先删除最后一条索引,截断后数据块大小为0,再构建新的索引条目,其中键值为截断后的数据块偏移量,索引值为截断后数据块大小和数据文件索引地址,将所述新的索引条目插入到索引日志中,然后删除所有中间其他的索引条目,最后构建新的索引条目,其中键值为索引键值为请求数据块偏移量,索引值为数据块大小和数据块在数据文件中的地址信息,将构建的新的索引条目插入索引日志中;对于数据块删除操作,并无数据块写入,与上述数据块写入操作的唯一区别是最后无需插入新数据块索引条目到索引日志中。
5.根据权利要求4所述的一种分布式块存储底层读写方法,其特征在于所述索引日志底层由有序键值B+树引擎实现持久化存储。
6.根据权利要求4或5所述的一种分布式块存储底层读写方法,其特征在于基于所述读IO请求、通过卷副本从索引日志中查找对应数据块的索引信息,基于索引信息从数据文件中读取数据块,包括如下步骤:
根据读IO请求中数据块在数据卷中的偏移量和数据块大小,从索引日志中查找满足包含不大于数据块偏移量的最大索引键值与小于数据块偏移量+数据块大小的最大索引键值之间的所有索引条目;
如果存在一条满足条件的索引条目,根据索引条目中数据文件地址信息,从数据文件中读取请求长度的数据块,并向卷引擎返回读IO响应;
若存在多条满足条件的索引条目,根据第一条索引条目数据文件地址信息,读取命中部分数据块作为第一部分数据块,根据中间索引条目中的数据文件地址信息,读取所有中间索引条目对应的数据块作为第二部分数据块,根据最后一条索引目录的数据文件地址信息,读取命中部分数据块作为第三分部数据块,然后将所述第一部分数据块、第二部分数据块以及第三部分数据块拼接成一个数据块,并向卷引擎返回读IO响应。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210517343.XA CN114879910B (zh) | 2022-05-13 | 2022-05-13 | 分布式块存储底层读写系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210517343.XA CN114879910B (zh) | 2022-05-13 | 2022-05-13 | 分布式块存储底层读写系统及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114879910A CN114879910A (zh) | 2022-08-09 |
CN114879910B true CN114879910B (zh) | 2023-10-13 |
Family
ID=82676061
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210517343.XA Active CN114879910B (zh) | 2022-05-13 | 2022-05-13 | 分布式块存储底层读写系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114879910B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105045850A (zh) * | 2015-07-06 | 2015-11-11 | 西北工业大学 | 云存储日志文件系统中垃圾数据回收方法 |
CN109726044A (zh) * | 2017-10-27 | 2019-05-07 | Netapp股份有限公司 | 基于数据块名称从重复数据删除存储中高效还原多个文件 |
CN111324305A (zh) * | 2020-02-16 | 2020-06-23 | 西安奥卡云数据科技有限公司 | 一种分布式存储系统中数据写入/读取方法 |
CN113722320A (zh) * | 2021-08-18 | 2021-11-30 | 南京航空航天大学 | 一种基于并行的图数据索引的持久化方法 |
CN113901024A (zh) * | 2021-09-26 | 2022-01-07 | Oppo广东移动通信有限公司 | 数据存储系统、数据存储方法、可读介质和电子设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11194666B2 (en) * | 2019-04-26 | 2021-12-07 | EMC IP Holding Company LLC | Time addressable storage in a content addressable storage system |
-
2022
- 2022-05-13 CN CN202210517343.XA patent/CN114879910B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105045850A (zh) * | 2015-07-06 | 2015-11-11 | 西北工业大学 | 云存储日志文件系统中垃圾数据回收方法 |
CN109726044A (zh) * | 2017-10-27 | 2019-05-07 | Netapp股份有限公司 | 基于数据块名称从重复数据删除存储中高效还原多个文件 |
CN111324305A (zh) * | 2020-02-16 | 2020-06-23 | 西安奥卡云数据科技有限公司 | 一种分布式存储系统中数据写入/读取方法 |
CN113722320A (zh) * | 2021-08-18 | 2021-11-30 | 南京航空航天大学 | 一种基于并行的图数据索引的持久化方法 |
CN113901024A (zh) * | 2021-09-26 | 2022-01-07 | Oppo广东移动通信有限公司 | 数据存储系统、数据存储方法、可读介质和电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN114879910A (zh) | 2022-08-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9710535B2 (en) | Object storage system with local transaction logs, a distributed namespace, and optimized support for user directories | |
CN102779180B (zh) | 数据存储系统的操作处理方法,数据存储系统 | |
CN103020315B (zh) | 一种基于主从分布式文件系统的海量小文件存储方法 | |
CN110647497A (zh) | 一种基于hdfs的高性能文件存储与管理系统 | |
CN108021717B (zh) | 一种轻量级嵌入式文件系统的实现方法 | |
CN110825748A (zh) | 利用差异化索引机制的高性能和易扩展的键值存储方法 | |
CN113821171B (zh) | 一种基于哈希表与lsm树的键值存储方法 | |
CN104899297A (zh) | 具有存储感知的混合索引结构 | |
CN102694828B (zh) | 一种分布式缓存系统数据存取的方法及装置 | |
US20080155171A1 (en) | File system, and method for storing and searching for file by the same | |
CN102136003A (zh) | 大规模分布式存储系统 | |
CN101464901B (zh) | 一种对象存储设备中的对象查找方法 | |
CN103902479A (zh) | 一种基于元数据日志的元数据缓存快速重建机制 | |
CN109522283A (zh) | 一种重复数据删除方法及系统 | |
CN109766318B (zh) | 文件读取方法及装置 | |
CN111177143B (zh) | 键值数据存储方法、装置、存储介质与电子设备 | |
CN106326239A (zh) | 分布式文件系统及其文件元信息管理方法 | |
CN113626431A (zh) | 一种基于lsm树的延迟垃圾回收的键值分离存储方法及系统 | |
CN110109927A (zh) | 基于LSM树的Oracle数据库数据处理方法 | |
CN113377292B (zh) | 一种单机存储引擎 | |
CN111309266A (zh) | 一种基于ceph的分布式存储元数据系统日志优化系统与方法 | |
US8612717B2 (en) | Storage system | |
WO2020215580A1 (zh) | 一种分布式全局数据去重方法和装置 | |
CN102724301B (zh) | 云数据库系统以及云数据读写处理方法、设备 | |
KR100907477B1 (ko) | 플래시 메모리에 저장된 데이터의 인덱스 정보 관리 장치및 방법 |
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 |