谈一谈你对分布式文件系统(DFS)的理解?
为什么会有分布式文件系统?
分布式文件系统是面对互联网的需求而产生。因为互联网时代要对海量数据进行存储。很显然靠简
单的增加硬盘个数已经满足不了我们的要求。
因为 硬盘传输速度有限 但是 数据在急剧增长 ,另外我们还要要做好数据备份、数据安全等。
采用分布式文件系统可以将多个地点的文件系统通过网络连接起来,组成一个文件系统网络,结点
之间通过网络进行通信,一台文件系统的存储和传输能力有限,我们让文件在多台计算机上存储,
通过多台计算机共同传输。

FastDFS 背景
开源!轻量!
FastDFS 可以看做是基于文件的 key value 存储系统, key 为文件 ID , value 为文件本身,因此称作 分布式
文件存储服务 更为合适。

谈一谈 FastDFS 的架构?
FastDFS 架构包括 Tracker server (追踪服务器) 和 Storage server (存储服务器) 。客户端请求
Tracker server 进行文件上传、下载,通过其调度最终由 Storage server 完成文件上传和下载。
Tracker
Tracker Server 作用是负载均衡和调度,通过 Tracker server 在文件上传时可以根据一些策略
找到 Storage server 提供文件上传服务。可以将 tracker 称为 追踪服务器 或 调度服务器。
Storage
Storage Server 作用是文件存储,客户端上传的文件最终存储在 Storage 服务器上, Storage
server 没有实现自己的文件系统而是使用操作系统的文件系统来管理文件。可以将 storage 称
为 存储服务器 。
FastDFS 的优势是什么?
相对于其他的文件系统如 NFS 、 GFS 、 HDFS 。 FastDFS 的优势主要体现在以下几个方面:
轻量级 : FastDFS 的设计目标是解决大规模数据存储和高访问速度的问题,相对于其他分布式文件系统,
它更加轻量,对资源的占用更少。
灵活性 : FastDFS 的架构相对简单,可以根据实际需求进行灵活的定制和扩展。例如,可以方便地增加或
减少存储服务器,调整文件的备份策略等。
社区活跃 : FastDFS 的社区非常活跃,技术成熟度高,有大量的实际应用案例,遇到问题时可以快速找到
解决方案。
FastDFS 的应用场景
文件存储 : FastDFS 可以用于存储用户上传的图片、视频、文档等文件。由于其分布式架构, FastDFS 能
够应对高并发访问,并支持在线扩容。
媒体存储与访问 :对于需要存储和快速访问大量媒体文件的场景,如视频网站或图片库, FastDFS 能够
提供稳定、高效的文件存储服务。
分布式系统 : FastDFS 适用于构建分布式系统,通过分布式部署来提高系统的可用性和可扩展性。
数据备份与恢复 : FastDFS 可以用于存储和备份各类数据,如数据库备份、用户数据备份等。由于其文
件去重功能,可以有效降低存储空间占用。
文件共享与传输 : FastDFS 可以用于实现文件共享和传输,如在线办公、文件同步等场景。
Go-fastDFS 背景
Go-fastDFS 是 FastDFS 的一个 Go 语言实现版本,在保留了 FastDFS 主体架构的基础上,对部分核
心模块进行了重构和优化。
Go-fastDFS 优势是什么?
Go 语言以其并发特性和性能优势,使得 Go-fastDFS 在处理大量并发读写请求时表现优异,提供了更
高效的并发访问、持久化存储以及共享访问功能,是 FastDFS 的理想替代品。

Windows环境下搭建 Go-FastDFS
Go-FastDFS 本地对象存储, Windows 环境搭建(下载安装教程)! -CSDN 博客
官网 - 语言 "SDK" · GitBook (sjqzhang.github.io)

Java实现基于Go-fastDFS的断点续传功能
(文件)分片上传
分片上传,就是将所要上传的文件,按照一定的大小, 将整个文件分隔成多个数据块 (我们称之为
Part )来进行分别上传,上传完之后再由服务端对所有上传的文件进行汇总整合成原始的文件。
分片上传不仅可以避免因网络环境不好导致的一直需要从文件起始位置还是上传的问题,还能使用多线
程对不同分块数据进行并发发送,提高发送效率,降低发送时间。
文件分片上传的流程图大致如下所示:

分片上传主要适用于以下几种场景:
网络环境不好 :当出现上传失败的时候,可以对失败的 Part 进行独立的重试,而不需要重新上传其他的
Part 。
断点续传 :中途暂停之后,可以从上次上传完成的 Part 的位置继续上传。
加速上传 :要上传到 OSS 的本地文件很大的时候,可以并行上传多个 Part 以加快上传。
流式上传 :可以在需要上传的文件大小还不确定的情况下开始上传。这种场景在视频监控等行业应用中
比较常见。
文件较大 :一般文件比较大时,默认情况下一般都会采用分片上传。
断点续传
由于分片上传的数据是永久性的,因此可以很容易的基于分片上传来实现断点续传。
在分片上传的过程中,如果因为系统崩溃或者网络中断等异常因素导致上传中断,这时候 客户端需要记
录上传的进度 。在之后支持再次上传时,可以继续从上次上传中断的地方进行继续上传。
为了避免客户端在上传之后的进度数据被删除而导致重新开始从头上传的问题, 服务端也可以提供相应
的接口便于客户端对已经上传的分片数据进行查询 ,从而使客户端知道已经上传的分片数据,从而从下
一个分片数据开始继续上传。
断点续传流程图大致如下所示:

多线程传输
# 什么是云存储平台?
云存储平台
定义: 云存储平台是一种基于云计算技术的存储服务,通过虚拟化技术将数据存储在云端,为用户提供
数据存储和访问服务。
优点:
1. 灵活性和可扩展性:云存储平台可以根据用户需求进行弹性扩展,无论是增加存储容量还是调整性
能等级,都可以通过简单的操作实现。
2. 高可用性和稳定性:云存储平台基于分布式存储和备份机制,可以提供高可用性和稳定性的服务,
确保数据的安全性和持久性。
3. 数据备份与容灾:云存储平台通常提供数据备份和容灾的功能,用户的数据可以在多个地理位置进
行冗余备份,以提供更高的数据可靠性。
4. 节约成本:传统的本地存储需要投资大量的硬件设备和维护成本,而云存储平台可以将这些成本转
移到云服务提供商那里,用户只需按需付费。
缺点:
1. 安全性问题:由于数据传输和存储的特性,云存储平台存在一定的安全风险,用户的数据可能面临
被黑客攻击、数据泄露等问题。
2. 依赖于网络:云存储平台依赖于网络的稳定性和速度,当网络出现故障或者带宽限制时,数据的访
问和传输可能会受到影响。
3. 数据隐私问题:用户将数据存储在云服务提供商的服务器上,可能无法完全掌控数据的安全,存在
用户隐私泄露的风险。
4. 依赖于服务商:使用云存储服务需要依赖于云服务提供商,如果服务商出现问题或者服务终止,用
户可能会面临数据丢失或者迁移困难的问题。
为什么你们公司选择Go-fastDFS而不是云平台?
控制权与定制性 :使用 Go-fastDFS ,我们可以完全掌控数据存储,可以根据业务需求进行深度定制。而
在云平台上,尽管提供了丰富的存储服务,但定制化的自由度相对较低。
成本考虑 :虽然云平台提供的服务可能需要支付一定的费用,但在某些场景下,自建存储系统的成本可
能更低,尤其是对于大型企业或需要进行大量数据存储和处理的场景。
数据安全与隐私 :对于需要高度保护的数据或对数据隐私有特殊要求的场景,使用自建存储系统可能更
为合适。
技术栈匹配 :对于已经使用 Java 技术栈的项目,使用 Go-fastDFS 可以更好地保持技术一致性,减少技
术转换的成本。