一、fastdfs简介
FastDFS由跟踪服务器(tracker server)、存储服务器(storage server)和客户端(client)三个部分组成,主要解决海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size < 500MB)为载体的在线服务,例如图片分享和视频分享网站。
FastDFS向使用者提供基本文件访问接口,比如monitor、upload、download、append、delete等,以客户端库的方式提供给用户使用。
storage 没有主从关系,每个storage是独立的一台服务器。
一个storage可以有多个磁盘,可以提升写入、读取效率。
一个storage 有多个磁盘,多个磁盘对应多个路径。
高可用体现在?
1.tracker 集群,一个崩了使用另外一个
2.同一个Group的storage的内容是相同的,建议数量为3
3.强一致性:数据更加安全可靠但等待时间长,等待其他storage同步完毕 , 弱一致性:当前的storage存储完毕后就返回
二、fastdfs在图床中的应用
nginx部署在最前面,上传文件通过upload模块通知后台处理,注册、登录也是直接通过nginx访问后台,下载文件通过nginx定制的插件fast-ngnix模块从fastdfs文件系统中下载。
1.整体结构
具体的模块和api关系如下:
使用范例:
调用接口
http://服务器ip地址/api/login
参数
{
"pwd": "md5加密后的密码",
"user": "xxxx"
}
返回结果
{
"code": 0,
"token": "xxxxxxxx"
}
2、MD5加密算法
密码是MD5加密后的值,MD5 即 Message-Digest Algorithm 5(信息-摘要算法 5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有 MD5 实现。理论上 MD5 是不可逆的,而且 MD5 本来也不是作加密使用,而是用来校验数据的完整性,只是因为其不可逆且稳定、快速的特点,被广泛用于对明文密码的加密。但是简单密码来说,破解者完全可以将一定范围内的密码字典全部计算出来之后存为数据库,之后直接查询进行破解。
盐值加密方式:
https://www.yuque.com/docs/share/9276a004-7bc0-4d15-a477-c88068fb37ba?#
3、Token 验证
Token 的中文有人翻译成 “令牌”,意思就是,你拿着这个令牌,才能过一些关卡。Token 是一个用户自定义的任意字符串。在成功提交了开发者自定义的这个字符串之后,Token 的值会保存到服务器后台。只有服务器和客户端前端知道这个字符串,于是 Token 就成了这两者之间的密钥,它可以让服务器确认请求是来自客户端还是恶意的第三方。这里所说的 Token,本质上就是 http session:《http session 介绍》
使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的:
- 客户端使用用户名跟密码请求登录
- 服务端收到请求,去验证用户名与密码
- 验证成功后,服务端生成一个 Token,这个 Token 可以存储在内存、磁盘、或者数据库里,再
把这个 Token 发送给客户端 - 客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage
- 客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
- 服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回
请求的数据
简单而言,本服务器程序是采用随机数+base64+md5 生成的 token,对于过期时间是通过 redis 的 key 超时机制实现。
更进一步的阅读:https://www.yuque.com/docs/share/18838587-4e59-4f2a-abd2-8a35471ead9d?#《还分不清 Cookie、Session、Token、JWT》
三、文件系统对比
Ceph,TFS,FastDFS,MogileFS,MooseFS,GlusterFS 对比