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

一种基于Nginx+MinIO+Redis的分布式文件存储系统及方法

文献发布时间:2023-06-19 16:08:01



技术领域

本发明涉及数据存储技术领域,具体是一种基于Nginx+MinIO+Redis的分布式文件存储系统及方法。

背景技术

随着信息化的快速发展,各行各业文件存储在这过程当中,非结构化数据,结构化数据在以爆炸式的速度增长。当数据规模越来越大时,存取性能急剧下降;MinIO作为一个轻量级的开源分布式文件系统,适合中小型文件的存储,但MinIO将数据存储在磁盘上,每次访问都需要从磁盘读取数据,多次的IO造成了查询性能的降低。为减小磁盘的访问次数,提高文件的读速度,可选的方案有引入Redis作为文件缓存服务,但Redis是基于内存的数据库,直接利用Redis缓存文件会造成内存空间占用过大、查询性能低的问题,从而无法适用于大规模文件数据;此外,使用Redis作为缓存服务时,Redis提供缓存淘汰策略,不适合具体的业务,缓存查询命中率不高。

发明内容

本发明的目的在于提供一种基于Nginx+MinIO+Redis的分布式文件存储系统及方法,以解决上述背景技术中提出的问题。

为实现上述目的,本发明提供如下技术方案:

一种基于Nginx+MinIO+Redis的分布式文件存储系统,所述系统包括数据库和中间件;所述中间件包括:

图片处理模块,用于基于Nginx中的http_image_filter_module模块对图片进行缩略操作;所述缩略操作包括对图片进行指定宽度和高度的缩放;

存储模块,用于基于MinIO集群对文件数据进行分布式存储;所述存储模块包括文件上传单元,缓存压缩单元和缓存替换单元;

查询模块,用于基于Redis集群对分布式缓存的文件执行文件查询操作;

删除模块,用于对分布式文件执行删除操作。

作为本发明进一步的方案:所述文件上传单元包括:

数据处理子单元,用于根据文件流获取文件内容和文件元数据信息,判断所述文件内容是否为图片,当所述文件内容为图片时,将该文件内容向图片处理模块发送,通过Thumbnailator图片处理,保持图片百分之75质量对图片进行压缩后将文件上传到MinIO,当所述文件内容不是图片时,将文件上传到MinIO;

异常判定子单元,用于判断文件上传是否成功,当文件上传失败时,生成异常信息;

第一存写子单元,用于当文件上传成功时,接收文件上传成功后返回的文件md5与元数据,并将文件md5与元数据存写入Redis;

上传判定子单元,用于判断Redis写数据是否成功,当Redis写数据成功时,判定文件上传成功。

作为本发明进一步的方案:文件的元数据存储步骤包括:将元数据中文件md5设置为键,其他字段加上md5拼接而成的字符串作为键对应的值,以键-值的形式写入Redis。

作为本发明进一步的方案:所述文件压缩单元包括:

编码子单元,用于对待缓存文件进行Thumbnailator+Base64编码;

压缩子单元,用于对编码后的文件进行Gzip压缩;

第二存写子单元,用于将编码压缩后的文件写入Redis。

作为本发明进一步的方案:所述缓存替换单元包括:

队列生成子单元,用于基于预设的历史队列记录文件的使用次数,得到历史访问队列;

第三存写子单元,用于将文件索引写入历史访问队列,若该文件的索引已经存在,则将该文件索引对应的使用次数加1;若该文件的索引不存在,则将该文件索引写入访问队列中,并且设置使用次数为1;

第四存写子单元,用于当文件使用次数达到预设的次数阈值时,将编码压缩后的文件写入Redis缓存中;

第五存写子单元,用于判断缓存容量是否小于预设的容量阈值,当所述缓存容量小于预设的容量阈值时,将编码压缩后的文件数据写入Redis;

淘汰选择子单元,用于基于文件使用频率,对文件进行缓存的淘汰选择。

作为本发明进一步的方案:所述文件使用频率计算公式为:

f(x)=T*K;

其中,f表示文件使用频率,T表示周期,K表示该周期内文件的使用次数。

作为本发明进一步的方案:所述查询模块包括:

关键字生成单元,用于根据用户输入的查询条件生成Key,查询Redis;

第一返回单元,用于判断Redis中是否存在文件,若Redis中不存在文件,获取文件md5,根据文件md5查询MinIO,返回文件;

第二返回单元,用于若Redis中存在文件,更新该文件的查询次数;返回经Gzip算法解压和Base64解码后的文件。

作为本发明进一步的方案:所述删除模块包括:

md5获取单元,用于根据删除条件查询Redis,获取文件的md5;

第一删除单元,用于判断Redis中是否存在文件的缓存,若Redis中存在文件的缓存,则执行同时删除操作,分别删除Redis上的缓存和MinIO上的文件;

第二删除单元,用于当Redis中不存在文件的缓存时,根据文件md5,删除MinIO上保存的文件;

删除判定单元,用于判断文件删除是否成功,当文件删除成功时,生成结束指令。

本发明技术方案还提供了一种基于Nginx+MinIO+Redis的分布式文件存储方法,所述方法用于所述查询模块,所述方法包括:

根据用户输入的查询条件生成Key,查询Redis;

判断Redis中是否存在文件,若Redis中不存在文件,获取文件md5,根据文件md5查询MinIO,返回文件;

若Redis中存在文件,更新该文件的查询次数;返回经Gzip算法解压和Base64解码后的文件。

作为本发明进一步的方案:所述方法用于所述删除模块,所述方法包括:

根据删除条件查询Redis,获取文件的md5;

判断Redis中是否存在文件的缓存,若Redis中存在文件的缓存,则执行同时删除操作,分别删除Redis上的缓存和MinIO上的文件;

当Redis中不存在文件的缓存时,根据文件md5,删除MinIO上保存的文件;

判断文件删除是否成功,当文件删除成功时,生成结束指令。

与现有技术相比,本发明的有益效果是:本发明利用Nginx实现文件快速加载、利用MinIO集群实现海量文件数据的分布式存储,利用Redis集群实现基于分布式缓存的高性能文件查询,使得系统具有良好的查询性能。本发明还提出一种基于Thumbnailator、Base64和Gzip压缩算法的文件压缩缓存策略,解决了Redis缓存文件时字符串长度过长、内存空间占用大的问题,提高了内存空间的利用率。本发明设计了一种基于文件使用频率的缓存替换算法,使得系统具备良好的缓存命中率。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例。

图1为基于Nginx+MinIO+Redis的分布式文件存储系统的架构图。

图2为基于Nginx+MinIO+Redis的分布式文件存储系统中文件上传流程图。

图3为基于Nginx+MinIO+Redis的分布式文件存储系统中缓存写入流程图。

图4为基于Nginx+MinIO+Redis的分布式文件存储系统中查询模块流程图。

图5为基于Nginx+MinIO+Redis的分布式文件存储系统中删除模块流程图。

具体实施方式

为了使本发明所要解决的技术问题、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

实施例1

图1为基于Nginx+MinIO+Redis的分布式文件存储系统的架构图,本发明实施例中,一种基于Nginx+MinIO+Redis的分布式文件存储系统,所述系统包括:

所述系统包括数据库和中间件;所述中间件包括:

图片处理模块,用于基于Nginx中的http_image_filter_module模块对图片进行缩略操作;所述缩略操作包括对图片进行指定宽度和高度的缩放;

存储模块,用于基于MinIO集群对文件数据进行分布式存储;所述存储模块包括文件上传单元,缓存压缩单元和缓存替换单元;

查询模块,用于基于Redis集群对分布式缓存的文件执行文件查询操作;

删除模块,用于对分布式文件执行删除操作。

本发明提供一种基于MinIO+Redis的分布式文件存储系统,包括数据库和中间件;所述中间件包括存储模块、查询模块和删除模块;所述图片处理模块利用Nginx中http_image_filter_module模块进行图片缩略;所述存储模块利用MinIO集群实现海量文件数据的分布式存储;所述查询模块利用Redis集群实现基于分布式缓存的高性能文件查询;所述删除模块提供分布式文件的删除功能。存储模块包括文件上传组件,缓存压缩组件和缓存替换组件。

图2为基于Nginx+MinIO+Redis的分布式文件存储系统中文件上传流程图,所述文件上传单元包括:

数据处理子单元,用于根据文件流获取文件内容和文件元数据信息,判断所述文件内容是否为图片,当所述文件内容为图片时,将该文件内容向图片处理模块发送,通过Thumbnailator图片处理,保持图片百分之75质量对图片进行压缩后将文件上传到MinIO,当所述文件内容不是图片时,将文件上传到MinIO;

异常判定子单元,用于判断文件上传是否成功,当文件上传失败时,生成异常信息;

第一存写子单元,用于当文件上传成功时,接收文件上传成功后返回的文件md5与元数据,并将文件md5与元数据存写入Redis;

上传判定子单元,用于判断Redis写数据是否成功,当Redis写数据成功时,判定文件上传成功。

进一步的,文件的元数据存储步骤包括:将元数据中文件md5设置为键,其他字段加上md5拼接而成的字符串作为键对应的值,以键-值的形式写入Redis。

在本实施例中,文件上传组件实现了利用Redis集群存储文件元数据和利用MinIO集群存储文件;文件的上传包含文件内容和文件元数据的存储,只有两者都保存成功,才能认定文件上传成功。若其中任意一项上传失败,则代表一次文件上传失败。

具体的,在本实施例中,文件的元数据存储具体为:将元数据中文件md5设置为键,剩余的字段加上md5拼接而成的字符串作为键对应的值,以键-值的形式写入Redis。

作为本发明技术方案的一个优选实施例,所述文件压缩单元包括:

编码子单元,用于对待缓存文件进行Thumbnailator+Base64编码;

压缩子单元,用于对编码后的文件进行Gzip压缩;

第二存写子单元,用于将编码压缩后的文件写入Redis。

在本实施例中,缓存压缩组件,将待缓存文件使用Thumbnailator+Base64编码,对编码后的文件进行Gzip压缩,最后将编码压缩后的文件写入Redis。

图3为基于Nginx+MinIO+Redis的分布式文件存储系统中缓存写入流程图,所述缓存替换单元包括:

队列生成子单元,用于基于预设的历史队列记录文件的使用次数,得到历史访问队列;

第三存写子单元,用于将文件索引写入历史访问队列,若该文件的索引已经存在,则将该文件索引对应的使用次数加1;若该文件的索引不存在,则将该文件索引写入访问队列中,并且设置使用次数为1;

第四存写子单元,用于当文件使用次数达到预设的次数阈值时,将编码压缩后的文件写入Redis缓存中;

第五存写子单元,用于判断缓存容量是否小于预设的容量阈值,当所述缓存容量小于预设的容量阈值时,将编码压缩后的文件数据写入Redis;

淘汰选择子单元,用于基于文件使用频率,对文件进行缓存的淘汰选择。

在本实施例中,缓存替换组件利用文件当前周期使用频率和文件历史使用频率值计算文件最终使用频率值,当文件使用次数达到k次时,将编码压缩后的文件写入Redis,若缓存空间已满,根据频率值的高低进行缓存的淘汰选择。

进一步的,所述文件使用频率计算公式为:

f(x)=T*K;

其中,f表示文件使用频率,T表示周期,K表示该周期内文件的使用次数。

图4为基于Nginx+MinIO+Redis的分布式文件存储系统中查询模块流程图,所述查询模块包括:

关键字生成单元,用于根据用户输入的查询条件生成Key,查询Redis;

第一返回单元,用于判断Redis中是否存在文件,若Redis中不存在文件,获取文件md5,根据文件md5查询MinIO,返回文件;

第二返回单元,用于若Redis中存在文件,更新该文件的查询次数;返回经Gzip算法解压和Base64解码后的文件。

在本实施例中,所述查询模块根据查询条件,先查询Redis,若Redis中存在该文件的缓存,则返回经Gzip算法解压和Base64解码后的文件;否则,利用文件md5查询MinIO获取文件,更新记录的查询次数,判断是否符合缓存替换算法的执行条件。

图5为基于Nginx+MinIO+Redis的分布式文件存储系统中删除模块流程图,所述删除模块包括:

md5获取单元,用于根据删除条件查询Redis,获取文件的md5;

第一删除单元,用于判断Redis中是否存在文件的缓存,若Redis中存在文件的缓存,则执行同时删除操作,分别删除Redis上的缓存和MinIO上的文件;

第二删除单元,用于当Redis中不存在文件的缓存时,根据文件md5,删除MinIO上保存的文件;

删除判定单元,用于判断文件删除是否成功,当文件删除成功时,生成结束指令。

在本实施例中,删除模块通过查询操作确定文件存储的位置才能进行删除操作,当删除的文件是热文件时,需要将文件从Redis和MinIO上同步删除;当文件是冷文件时,只需要在MinIO上删除文件即可。

实施例2

在本发明技术方案的一个实施例中,提供了一种基于Nginx+MinIO+Redis的分布式文件存储方法,所述方法用于所述查询模块,所述方法包括:

根据用户输入的查询条件生成Key,查询Redis;

判断Redis中是否存在文件,若Redis中不存在文件,获取文件md5,根据文件md5查询MinIO,返回文件;

若Redis中存在文件,更新该文件的查询次数;返回经Gzip算法解压和Base64解码后的文件。

实施例3

在本发明技术方案的一个实施例中,提供了一种基于Nginx+MinIO+Redis的分布式文件存储方法,所述方法用于所述删除模块,所述方法包括:

根据删除条件查询Redis,获取文件的md5;

判断Redis中是否存在文件的缓存,若Redis中存在文件的缓存,则执行同时删除操作,分别删除Redis上的缓存和MinIO上的文件;

当Redis中不存在文件的缓存时,根据文件md5,删除MinIO上保存的文件;

判断文件删除是否成功,当文件删除成功时,生成结束指令。

所述基于Nginx+MinIO+Redis的分布式文件存储方法所能实现的功能均由计算机设备完成,所述计算机设备包括一个或多个处理器和一个或多个存储器,所述一个或多个存储器中存储有至少一条程序代码,所述程序代码由所述一个或多个处理器加载并执行以实现所述基于Nginx+MinIO+Redis的分布式文件存储方法的功能。

处理器从存储器中逐条取出指令、分析指令,然后根据指令要求完成相应操作,产生一系列控制命令,使计算机各部分自动、连续并协调动作,成为一个有机的整体,实现程序的输入、数据的输入以及运算并输出结果,这一过程中产生的算术运算或逻辑运算均由运算器完成;所述存储器包括只读存储器(Read-Only Memory,ROM),所述只读存储器用于存储计算机程序,所述存储器外部设有保护装置。

示例性的,计算机程序可以被分割成一个或多个模块,一个或者多个模块被存储在存储器中,并由处理器执行,以完成本发明。一个或多个模块可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述计算机程序在终端设备中的执行过程。

本领域技术人员可以理解,上述服务设备的描述仅仅是示例,并不构成对终端设备的限定,可以包括比上述描述更多或更少的部件,或者组合某些部件,或者不同的部件,例如可以包括输入输出设备、网络接入设备、总线等。

所称处理器可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,上述处理器是上述终端设备的控制中心,利用各种接口和线路连接整个用户终端的各个部分。

上述存储器可用于存储计算机程序和/或模块,上述处理器通过运行或执行存储在存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现上述终端设备的各种功能。存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如信息采集模板展示功能、产品信息发布功能等)等;存储数据区可存储根据泊位状态显示系统的使用所创建的数据(比如不同产品种类对应的产品信息采集模板、不同产品提供方需要发布的产品信息等)等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。

终端设备集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例系统中的全部或部分模块/单元,也可以通过计算机程序来指令相关的硬件来完成,上述的计算机程序可存储于计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个系统实施例的功能。其中,计算机程序包括计算机程序代码,计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。计算机可读介质可以包括:能够携带计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random AccessMemory)、电载波信号、电信信号以及软件分发介质等。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。

以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

相关技术
  • 一种基于Nginx+MinIO+Redis的分布式文件存储系统及方法
  • 基于分布式文件系统的文件存储系统及其文件访问方法
技术分类

06120114718053