目录
1.海量文件存储性能瓶颈
单点架构:
集群架构:
负载均衡、文件服务器:
项目只负责业务的处理,文件服务器只负责文件存储(下载,删除,访问)
2.文件服务器选型
问题
1)性能
2)功能支持程度 (上传,下载,删除,水印,压缩,访问..)
3)开发语言
4)有多少公司在使用
5)社区是否活跃
6)稳定性,是否支持集群
7)是否有完善文档
文件服务对比
GFS google 文件系统
小型企业:
云存储服务器 --- 500G --- 1000
中大型企业:
FastDFS 分布式文件系统
3.FastDFS文件系统
简介
FastDFS 特点:
1、c语言开发
2、专门为互联网量身定制 (存储中小型文件) ---- IDC --- 200亿
3、在线扩容、冗余备份、负载均衡
4、文件存储、文件同步、文件访问,上传,下载
中小型文件:1M以下是小文件, 1M 500M—中文件
FastDFS架构
Client(客户端:application应用程序)
Tracker: 调度服务器,负载均衡服务器
Storage: 存储文件
Tracker服务器:
1、tracker集群服务器是相互独立的服务器
2、storage 集群服务器定时向tracker汇报自身状态信息(30s)
健康信息
同步信息
磁盘是否还有空闲空间
IP
3、负载均衡:
Storage存储服务:
同组策略:
1、同组服务器数据是一样的
2、同组服务器数据要相互备份,服务器容量大小必须一致
3、同组之间服务器同步是在后台完成
4、同组集群:冗余备份,负载均衡
不同组策略:
1、组合组之间的文件是不相同的
2、整个组之间的容量集合就是整个文件系统的文件
3、分组就是文件系统的扩容
上传文件
互联网文件访问:
文件上传细节:
问题:
1、如何知道向那个group组中上传文件?
2、如何知道把文件写入同组中那个storage?
3、如何知道把文件写入到storage中那个磁盘?
文件名
当文件存储到某个子目录后,即认为该文件存储成功,接下来会为该文件生成一个文件名,文件名由group、存储目录、
两级子目录、文件名、文件后缀名(由客户端指定,主要用于区分文件类型)拼接而成
M00: 虚拟磁盘路径
思考:文件存储一定是存储磁盘上的,-- 磁盘目录—磁盘路径
store_path0=/kkb/fastdfs/storage ============== M00
store_path1=/home/yuqing/fastdfs2 ============ M01
目录:16*16*16*16 = 2的16次方
文件名:
1)源服务器IP
2)文件创建时间
3)文件大小
4)文件crc32
5)随机数
把以上数据Base64进行编码措施。
下载文件
同步状态
- FDFS_STORAGE_STATUS_INIT 初始化,未得到同步源服务器
- FDFS_STORAGE_STATUS_WAIT_SYNC 等待同步
- FDFS_STORAGE_STATUS_SYNCING 同步中
- FDFS_STORAGE_STATUS_DELETED 删除
- FDFS_STORAGE_STATUS_OFFLINE 离线
- FDFS_STORAGE_STATUS_ONLINE 在线,尚不能提供服务
- FDFS_STORAGE_STATUS_ACTIVE 在线,可以提供服务