问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

架构设计:文件服务存储设计

发布网友 发布时间:2022-11-19 15:17

我来回答

1个回答

热心网友 时间:2024-07-27 08:57

在架构设计:文件服务的设计与实现一文中,通过实现一个文件服务来梳理了一个架构设计的一般流程,并得到如下静态架构图

本文继续聊聊文件服务中的子模块:「存储模块」的设计,包括:

前面的架构没有对存储进行特别设计,直接使用了本地存储。考虑到后期文件数量可能会越来越多,本地存储可能无法支撑,且本地存储的安全性也没有保障。为了便于后期扩展,需要对「存储」部分进行设计。

存储的方式有很多,本地存储、NAS、分布式存储,为了能支持不同的存储方式,需要对「存储模块」进行抽象。考虑到「存储模块」涉及到IO,是一个相对底层的模块。「上传」这个核心模块不能依赖于具体的存储,所以这里也需要对其进行依赖反转。

见紫色部分,UploadService调用了FileInfoRepository来存储FileInfo,而FileInfoRepository是个接口,具体实现由存储模块中的实现类来实现。

我们先看本地存储。最简单的实现,就是直接使用IO将文件写到对应的目录下就可以了。但是,本地存储会有如下几个问题:

下面我们针对上面的问题,来一个个的解决。

首先,对于多租户来说,在我们的架构中,实际对应的是Group,我们按照Group的不同,来划分目录即可。即 不同的租户有不同的文件根目录 ,后期某个租户迁移时,直接迁移对应目录即可。这也稍微解决了单目录文件数量多的问题。

对于单目录下,随着文件数量的增加导致访问速度下降的问题,我们该如何解决呢?

如果你做过分布式系统,那么想一想, 我们是否可以把单目录看成是一个服务器,访问目录下的文件看成是一个个的请求呢 ?如果可以,那解决单目录下访问速度慢的问题是不是就变成了「如何解决单服务器下,负载过高」的问题了?那解决服务端负载过高的方法是否适用于解决目录访问速度下降的问题呢?

我们从下面几个方面来分析一下:

首先来看「解决服务端负载过高的方法」!答案很明显: 分流+负载均衡 !

分布式服务的负载均衡有几种方式呢?

再来看「目录访问和服务器的区别」,虽然可以把目录看成服务器,但是两者还是有区别的:

也就是说,对于目录来说,我们不需要考虑创建成本。

那么针对服务器负载高的解决方案是否适合目录访问呢?或者哪种方式适合目录访问呢?我们一个个来分析:

可以看到,主要的问题就是创建目录的问题!如何保证在目录数量改变时,不需要调整程序呢?

实际上git已经给出了答案:

也就是说,根据sha1散列的前两位对文件进行归类。这样既解决了目录创建问题,也解决了文件分布问题。可能的问题是,「sha1散列2^80次,可能会发生一次碰撞」。这个问题对于一般文件系统来说,好像也没有担心的必要。

解决了「单目录文件过多,导致访问速度下降」的问题,我们来看下一个问题: 数据安全 。

文件数据是存放在电脑磁盘上的,如果硬盘损坏,可能导致文件的丢失。这实际还是一个「单点问题」!

「单点问题」的解决方案是什么呢? 冗余 啊!

最简单的方案就是定时去备份数据,可以有如下几种方案:

我们继续一个个的讨论。

首先是 人工备份 ,这是最low的方案,当然也是最简单的,即有人定期去备份就行了。问题是时效性不高,例如一天备份一次,如果磁盘在备份前坏了,那就会丢失一天的数据。同时恢复比较耗时,需要人工处理。

第二个方案是 代码实现 ,即在上传文件时,程序就自动备份。以上面的架构为例,可以添加一个BackupListener,当上传完成后,通过事件,自动备份上传的文件。同时下载时需要判定文件是否完整,如果有问题则使用备份数据。此方案时效性得到了保障,但是将数据备份和业务放到了一起,且需要编码实现,增加了业务代码量。

第三个方案是 libfuse ,libfuse是用户态文件系统接口。下面是libfuse官方简介:

简单来说,就是可以用libfuse构建一个用户态文件系统。之前在老东家做了一个日志分析平台,日志的收集就使用了libfuse,大致架构如下:

业务系统写日志到挂载的用户态文件系统中,用户态文件系统自动转发到了后续的处理中间件:redis、消息队列、文件系统。

在这里也可以用类似的功能,即在文件上传后,用户态文件系统自动备份。此方案解耦了文件备案逻辑与业务逻辑。

最后一个方案是 RAID ,即廉价冗余磁盘阵列。RAID不但可备份文件,还支持并发读写,提高上传下载速率。

常用的RAID有:RAID0,RAID1,RAID01/RAID10,RAID5和RAID6等。我们来看看这几种RAID的特点,以及是否适用于我们的文件服务。你会发现从RAID0到RAID6,又是一个从单点到分布式的过程。

看下面的两张图应该能更好的理解:

无论是RAID10还是RAID01,对磁盘的使用效率都不高。那如何提高磁盘使用率呢?就有了RAID3。

对于本地存储来说,RAID是个相对实用的解决方案,既能提高数据安全、快速扩容,也提高了读写速率。但是无论扩展多少磁盘,容量还是相对有限,吞吐也相对有限,同时由于其还是单点,如果文件服务本身挂掉,就会导致单点故障。所以就有了分布式文件系统。

分布式文件系统下次单独讨论!

最后打个广告,帮朋友开的专栏《零基础Unity3D 游戏 开发》,适合没有基础、想从事 游戏 开发的小白!朋友从事 游戏 多年,开发了多款 游戏 ,收了30多个徒弟,技术杠杠的!

架构设计:文件服务存储设计

前面的架构没有对存储进行特别设计,直接使用了本地存储。考虑到后期文件数量可能会越来越多,本地存储可能无法支撑,且本地存储的安全性也没有保障。为了便于后期扩展,需要对「存储」部分进行设计。存储的方式有很多,本地存储、NAS、分布式存储,为了能支持不同的存储方式,需要对「存储模块」进行抽象。...

私有云平台下的存储架构规划设计

在私有云平台的建设中,存储架构的设计尤为关键。首要任务是基于数据分析的总体规划设计,形成一个包含数据分析、技术架构分析的闭环。具体步骤如下:首先,深入了解企业业务数据,包括数据类型、规模、增长速度、读写特性、并发访问需求、数据重要性和安全性要求等。这些是存储架构设计的基础。其次,根据数据特...

如何设计文件服务

转换服务根据配置委托对应的工具类来进行相应的操作(代码略):提供两个接口:本文给出了一个文件服务相对完整的架构设计与实现过程。整个架构设计流程如下:整个过程对各个约束做出了对应的决策,并进行了验证。代码结构与架构设计完全匹配。从架构设计图依图索骥即可理解代码逻辑。如有不妥或纰漏之处,欢迎...

软考系统架构设计师考什么?

文件设计、存储设计数据库设计网络应用系统的设计系统运行环境的集成与设计系统性能设计中间件、应用服务器4.分布式系统设计分布式通信协议的设计基于对象的分布式系统设计基于Web 的分布式系统设计基于消息和协同的分布式系统设计异构分布式系统的互操作性设计5.系统的可靠性分析与设计系统的故障模型和可靠性模型提高系统可靠性...

2020年软考考试大纲:系统架构设计师考试大纲

3.设计模式 设计模式的概念 设计模式的组成 模式和软件架构 设计模式分类 设计模式的实现 4.系统设计 处理流程设计 人机界面设计 文件设计、存储设计 数据库设计 网络应用系统的设计 系统运行环境的集成与设计 中间件、应用服务器 性能设计与性能评估 系统转换计划 5.软件系统建模 系统需求 建模的作用和意义 定义问题...

系统架构设计师案例分析考什么?

设计模式的组成;模式和软件架构;设计模式分类;设计模式的实现;4.系统设计;处理流程设计;人机界面设计;文件设计、存储设计;数据库设计;网络应用系统的设计;系统运行环境的集成与设计;中间件、应用服务器;性能设计与性能评估;系统转换计划;5.软件系统建模;系统需求;建模的作用和意义;定义问题(...

服务器的架构以及分类

服务器架构与分类是信息技术中至关重要的组成部分。服务器根据其功能和设计,可分为多种类型,满足不同应用场景的需求。首先,文件服务器作为数据共享的核心,其性能排序为网络系统、磁盘系统、内存容量和处理器性能,它存储和分发大量文件,是信息系统的核心仓库。数据库服务器则专注于高效的数据处理,对于...

系统架构设计师考试论文要写几篇?

软件架构设计 特定领域软件架构 基于架构的软件开发方法 软件演化 3.系统设计 处理流程设计 系统人机界面设计 文件设计、存储设计 数据库设计 网络应用系统的设计 系统运行环境的集成与设计 系统性能设计 中间件、应用服务器 4.分布式系统设计 分布式通信协议的设计 基于对象的分布式系统设计 基于 Web 的...

rhca一共几门课

消息管理、 Web应用等等。培训课程 一门课:RH401课程,DHCP、PXE及Kickstart文件的制作。第二门课:RH423课程,基本的LDAP概念。第三门课:RH333课程,掌握基础服务的安全、理解密码学、记录系统活动。第四门课:RH442课程,架构设计。第五门课:RH436课程,GFS文件系统的配置和管理。

设计一个存储器

上面提到的A Bite os S3 Arch如何构建一个分布式存储系统来支持大规模S3对象存储。云计算还有另外两个重要的基础存储基础架构组件EBS(弹性块存储)和EFS(弹性文件服务),分别对应传统IT基础架构中的本地磁盘和共享文件存储服务。 云计算很重要的一点就是超卖和灵活性,所以支持EBS和EFS方案的底层基础存储层的支持不太可...

内部存储文件能删除吗 ipad存储文件在哪里 微信存储的文件在哪里 苹果电脑文件存储在哪里 手机wps文件存储位置 苹果手机储存的文件在哪 为什么要做架构设计 架构设计 开发架构设计
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如果要去西藏旅游该注意哪些事项? 配一台三千左右的电脑 平时就是玩穿越火线和魔兽 最好FPS能高点 可以... 帮忙看看我的电脑的内存读入测试!什么意思?说明什么? 我家的花,三角梅,就是盘起来的那种,往上盘的主干尖折了,还能长吗?? 上海哪里学琵琶好? 请问在上海杨浦区地铁8号线附近的琴行有没有啊,我想学钢琴,谢谢大家了... 上海杨浦区有哪些地方学乐器和高一课程比较好 上海瀚音琴行怎么样? ipad和手机相册怎么取消同步 现在买郑州到厦门的火车票好买吗? 如何检查代码?如何保证其代码的正确性? P0420故障码检查处理排除方法 打印机有什么地方容易导致温控开关烧掉的吗 打印机温控器多少度断开 科美打印机266温控开关位置 立马电动车上两孔母插能否换成三孔的母插? 美国一天用多少原油 美国进口原油数量 正直高尚的人品是很多人都会追求的,这样的品质该怎么去培养? 造就高尚人格的四种品质- 如何做一个高尚的人 幼儿园小班晨间谈话谈写什么内容啊? 纳米镀膜怎么看出来 谁介绍几部即浪漫又伤感的电影? 谁知道一些悲剧爱情电影?最好是校园爱情的。 急求!凄美浪漫爱情电影! 求浪漫凄美爱情电影或电视剧 有什么感人爱情悲剧的电影 【语文教学】2021河南中考语文作文简析与试写 严谨季晓鸥同居在第几集 proe读什么 ...江门给子女积分入学,各地针对就地过年有什么福利? 今年过年不回家!全国各地政府实行了哪些过年补贴 构造边缘柱箍筋加密是6/1还是3/1 电工四大元器件有哪些,作用,及特性 sony平板电脑的reader怎么导入电子书,是什么格式的? SONY Reader PRS-300 语言设置里没有中文 如何改成中文界面? 支持什么... 香港哪里有的卖 Sony Reader电子阅读器的?? 详细噢 Sony 索尼 Reader T3怎样看中文书 人生哲理致自己的励志说说: 该放就放别让自己那么累 别那么辛苦句子说说 ...想汉化一下寻找高手求助,指点一下。 型号 sony reader prs-t1... 百数低代码开发平台能支持对接第三方系统?支持对接企业微信吗?_百度... 文件系统应该为第三方业务系统提供哪些文件服务接口 电阻应变式传感器是怎样测量温度的? 分险分析目的是什么意思 员工人身安全风险分析的目的 串口通信原理 串口通信是怎么工作的 如何将串口通信发送的字符串存入一个数组中 北京简网世纪科技有限公司电话是多少?