0.0 分布式文件系统
一般做法:
传统的模式是我们通过tomcat或者nginx,存放静态资源文件。
存在的问题:
单个节点会出现存不下的情况,需要多个节点。
分布式文件系统
需要一个系统来管理多个计算机节点上的文件数据,这就是分布式文件系统。
分布式文件系统(Distributed File System,DFS)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点(可简单的理解为一台计算机)相连;或是若干不同的逻辑磁盘分区或卷标组合在一起而形成的完整的有层次的文件系统。
DFS为分布在网络上任意位置的资源提供一个逻辑上的树形文件系统结构,从而使用户访问分布在网络上的共享文件更加简便。
单独的 DFS共享文件夹的作用是相对于通过网络上的其他共享文件夹的访问点 [1] 。
分布式文件系统的发展
第一阶段,网络文件系统
第二阶段,共享SAN文件系统
第三阶段,面向对象的并行文件系统
分布式文件系统特点
分散性: 扩展到网络上的大部分的设备,而且是有冗余部分,可以防止丢失。
安区性:是分布式文件系统最关心的内容。如果文件只限定于一个用户,那还比较容易实现,但是在网络当中,文件必须采取并发控制,实现文件的多用户访问。
架构:通常采用的事C/S的架构
分布式文件系统架构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PYEMIJyL-1669780194654)(https://bkimg.cdn.bcebos.com/pic/34fae6cd7b899e51d6ca036a42a7d933c8950d03?x-bce-process=image/watermark,image_d2F0ZXIvYmFpa2U4MA==,g_7,xp_5,yp_5)]
最早是AFS,DFS是AFS的一个版本。
AFS是一种分布式的文件系统用来共享与获得在计算机网络中存放的文件。
DFS是AFS的一个版本,作为开放软件基金会(OSF)的分布式计算环境DCE中的文件系统部分 。
NFS和AFS的区别在于对并发写操作的处理方法上。
无状态系统:在这个系统中,服务器并不保存其客户机正在缓存的文件的信息。因此,客户机必须协同服务器定期检查是否有其他客户改变了自己正在缓存的文件。这种方法在大的环境中会产生额外的LAN通信开销,但对小型LAN来说,这是一种令人满意的方法。NFS就是个无状态系统 [8] 。
回呼(Callback)系统:在这种方法中,服务器记录它的那些客户机的所作所为,并保留它们正在缓存的文件信息。服务器在一个客户机改变了一个文件时使用一种叫回叫应答(callbackpromise)的技术通知其它客户机。这种方法减少了大量网络通信。AFS(及OSFDCE的DFS)就是回叫系统。客户机改变文件时,持有这些文件拷贝的其它客户机就被回叫并通知这些改变 [8] 。
网络存储的对比
1.0 FastDFS与HDFS比较
说到分布式文件存储,肯定会有人想到HDFS,他们两者主要定位和应用场景是不一样的。
Hadoop中的文件系统HDFS主要解决并行计算中分布式存储数据的问题。其单个数据文件通常很大,采用了分块(切分)存储的方式,所以是大数据大文件存储来使用的场景。
FastDFS主要用于互联网网站,为文件上传和下载提供在线服务。所以在负载均衡、动态扩容等方面都支持得比较好,FastDFS不会对文件进行分快存储。FastDFS用于存储中小文件都是不错的,比如用户头像啊,一些较小的音视频文件啊等等都行。
2.0 FastDFS
astDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。
特别适合以文件为载体的在线服务,如相册网站、视频网站等等.FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
架构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2YZggJoc-1669780194656)(https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg-blog.csdnimg.cn%2F20210529171938244.png%3Fx-oss-process%3Dimage%2Fwatermark%2Ctype_ZmFuZ3poZW5naGVpdGk%2Cshadow_10%2Ctext_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Nlc2lyaWE%3D%2Csize_16%2Ccolor_FFFFFF%2Ct_70&refer=http%3A%2F%2Fimg-blog.csdnimg.cn&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1672280746&t=fa10e3b55a2b20e496ae6b9c1ea6a58f)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hy9qCxtd-1669780194656)(https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fs5.51cto.com%2Fwyfs02%2FM01%2F9D%2F18%2FwKioL1l5xemjkgpaAAQ4yn4UPXI031.jpg-wh_500x0-wm_3-wmp_4-s_210103532.jpg&refer=http%3A%2F%2Fs5.51cto.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1672293455&t=711c3735a3243126d710c26d26679538)]
角色
FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)
tracker:跟踪器节点,负责负载均衡。
storage:存储节点,负责存储,同步,提供相关的接口
文件的meta data,是文件的相关属性,以(key value)进行管理。
group:组,同组节点提供了冗余备份,不同组用于扩容。
流程
文件上传过程
1.Storage会定时的向Tracker发送心跳,告诉Tracker自己还还活着,这样Fastdfs就可以工作了
2.客户端发送上传请求给Tracker,Tracker会检查是否有可用Storage
3.如果有可用的,客户端就可以上传文件数据到Storage上
4.Storage将文件写入磁盘后,会返回路径信息给客户端
5.客户端就可以根据这个路径信息找到上传的文件
文件下载过程
1.Storage会定时的向Tracker安装发送心跳,告诉Tracker自己还还活着,这样Fastdfs就可以工作了
2.客户端发送下载请求到Tracker上,Tracker查找到存储的Storage地址后返回给客户端
3.客户端拿到Storage地址后,去Storage上找到文件
4.把文件返回给客户端
安装
Linux上安装FastDFS,一定要先启动Tracker,然后再启动Storage。
安装包
libfatscommon:FastDFS分离出的一些公用函数包
FastDFS:FastDFS本体
fastdfs-nginx-module:FastDFS和nginx的关联模块
nginx:发布访问服务
使用方法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8wdbTeTp-1669780194657)(https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg-blog.csdnimg.cn%2F20201221132446974.png%3Fx-oss-process%3Dimage%2Fwatermark%2Ctype_ZmFuZ3poZW5naGVpdGk%2Cshadow_10%2Ctext_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2F6OTk5Ng%3D%3D%2Csize_16%2Ccolor_FFFFFF%2Ct_70&refer=http%3A%2F%2Fimg-blog.csdnimg.cn&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1672293521&t=f5420de9a211c55e8928c293051e2347)]
3.0 MinIO介绍
MinIO 是一款基于Go语言发开的高性能、分布式的对象存储系统。特别适合与图片服务器。
客户端支持Java,Net,Python,Javacript, Golang语言。APACH提供的支持。注意,英文文档为准,中文文档坑比较多。
基本概念
1、Object:存储到minio的基本对象,如文件,字节流,Anything。。。。
2、Bucket:用来存储Object的逻辑空间。每个Bucket之间的数据是互相隔离的。对于客户端而言,就相当于存放文件的顶层文件夹。
3、Drlve:存储数据的磁盘,在MinIO启动时,以参数的方式传入。MinIO中所有的对象数据都会存在Drive里。
4、Set:即一组 Drive的集合,分布式部署根据集群规模自动划分一个或者多个Set,每个Set中的Drive 分布在不同位置。一个对象存储在一个Set上。
4.1、一个对象存储在一个Set上。
4.2、一个集群划分为多个Set。
4.3、一个Set包含的Drive数量是固定的,默认由系统根据集群规模自动计算得出。
4.4、一个Set中的drive 尽可能分布在不同的节点上。
5、纠删码:Minio 使用纠删码机制来保证高可靠性。
5.1、使用highwayhash来处理数据损坏(Bit Rot Protectio)。关于纠删码,简单来说就是可以通过数学计算,把丢失的数据进行还原。
5.2、纠删码是恢复丢失和算怀数据的数学算法,minio采用reed-solomincode将对象拆分成N/2数据和N/2奇偶校验块。这就意味着如果是12块盘,一个对象会被分成6个数据快、6个奇偶校验块,你可以丢失任意6块盘(不管其存放的是数据块还是奇偶校验块),你任可以从剩下的盘中的数据进行恢复。
5.2、纠删码模式,把数据分成 DATA BLOCk:数据块、 PARITY BLOCK:校验块。一个BLOCK 10M左右,如果一个文件小于10M,就以文件大小进行分块。如果一个文件大于10m,就以10M为一个文件单位进行分块。
应用场景
1、互联网非结构化数据的存储需求
1.1 、电商网站:海量商品图片
2.1、视频网站:海量视频文件
3.1、网盘:海量文件
4.0 阿里云OSS
云市场
比如,你的公司开发一个系统,要用到人脸识别技术。一般公司是不会自己去开发一套的,那个耗时又费力。
但这些服务,这些大佬公司早就开发好了,你只需要付点费用,调用他们相关接口就可以实现了。
像这样的服务还有很多,他们集合在一起,就形成了一个云市场。华为云,阿里云,百度云等由此而来。
阿里云OSS
阿里云OSS的一个简介,简而言之,他就是一个文件存储的服务。
以前我们的做法是,自己搭建一个图片服务器或者文件服务器,然后自己在写一套相关的实现方法。
但现在我们如果用了阿里云的OSS的话,这一块儿就可以省去我们买服务器的钱和写代码实现的时间。
阿里云OSS有点
对象存储OSS是阿里云提供的海量、安全、低成本、高持久性的云存储服务。本文将OSS与传统的自建存储进行对比,让您更好地了解OSS。
下表列举了与自建存储相比,OSS在易用性、持久性、数据安全等方面的优势。
应用场景
OSS可用于图片、音视频、日志等海量文件的存储。各种终端设备、Web网站程序、移动应用可以直接向OSS写入或读取数据。OSS支持流式写入和文件写入两种方式。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-beAhzMek-1669780194658)(http://static-aliyun-doc.oss-cn-hangzhou.aliyuncs.com/assets/img/zh-CN/0219177951/p141977.png “场景1”)]
利用海量互联网带宽,OSS可以实现海量数据的互联网并发下载。OSS提供原生的传输加速功能,支持上传加速、下载加速,提升跨国、跨洋数据上传、下载的体验。同时,OSS也可以结合CDN产品,提供静态内容存储、分发到边缘节点的解决方案,利用CDN边缘节点缓存的数据,提升同一个文件被同一地区客户大量重复并发下载的体验。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TQ951HcL-1669780194659)(http://static-aliyun-doc.oss-cn-hangzhou.aliyuncs.com/assets/img/zh-CN/1219177951/p141987.png “场景2”)]