Fastdfs—基本介绍和底层模型详解
阿里OSS–官方文档
阿里OSS–基本介绍
阿里OSS–快速使用(附开发工具类)
在一些项目中我们通常将上传的图片存入到中转目录中,直接去获取目录中的图片。
但这样会存在一些问题,导致这个方案不是任何时候都能适用。
所以我们有时候就需要一个文件存储系统来进行统一的文件管理,而且可以进行海量存储、高可用
方案1:租用别人已经搭建好了的.
阿里云对象存储(收费),七牛云(10G内免费)
方案2:自己搭建
hdfs(hadoop),FastDfs(国产,小文件)…
开源免费!开源免费!开源免费!
FASTDFS是一个开源分布式文件存储系统:充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用 FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
Fastdfs—安装fastdfs和nginx
OSS 与文件系统的对比
对比项 | OSS | 文件系统 |
---|---|---|
数据模型 | OSS 是一个分布式的对象存储服务,提供的是一个 Key-Value 对形式的对象存储服务。 | 文件系统是一种典型的树状索引结构。 |
数据获取 | 根据 Object 的名称(Key)唯一的获取该 Object 的内容。虽然用户可以使用类似 test1/test.jpg 的名字,但是这并不表示用户的 Object 是保存在test1 目录下面的。对于 OSS 来说,test1/test.jpg 仅仅只是一个字符串,和a.jpg 这种并没有本质的区别。因此不同名称的 Object 之间的访问消耗的资源是类似的。 | 一个名为 test1/test.jpg 的文件,访问过程需要先访问到 test1 这个目录,然后再在该目录下查找名为 test.jpg 的文件。 |
优势 | 支持海量的用户并发访问。 | 支持文件的修改,比如修改指定偏移位置的内容、截断文件尾部等。也支持文件夹的操作,比如重命名目录、删除目录、移动目录等非常容易。 |
劣势 | OSS 保存的 Object 不支持修改(追加写 Object 需要调用特定的接口,生成的 Object 也和正常上传的 Object 类型上有差别)。用户哪怕是仅仅需要修改一个字节也需要重新上传整个 Object。OSS 可以通过一些操作来模拟类似文件夹的功能,但是代价非常昂贵。比如重命名目录,希望将 test1 目录重命名成 test2,那么 OSS 的实际操作是将所有以 test1/ 开头的 Object 都重新复制成以 test2/ 开头的 Object,这是一个非常消耗资源的操作。因此在使用 OSS 的时候要尽量避免类似的操作。 | 受限于单个设备的性能。访问越深的目录消耗的资源也越大,操作拥有很多文件的目录也会非常慢。 |
对象存储服务(Object Storage Service,OSS)是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。容量和处理能力弹性扩展,多种存储类型供选择,全面优化存储成本。
其中也使用的与平台无关的 RESTful API 接口,您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。
OSS 适合存储论坛网站与软件应用中的附件、高清图片、音视频、备份文件等,以及各种APP应用、多终端同步软件、网盘下载站的文
这里我直接贴一些官网文档的说明,也会带上一些自己的理解方便大家阅读
类似与windows 系统盘符,但是没有目录所有文件都在同一层
存储空间是用户用于存储对象(Object)的容器,所有的对象都必须隶属于某个存储空间。存储空间具有各种配置属性,包括地域、访问权限、存储类型等。用户可以根据实际需求,创建不同类型的存储空间来存储不同的数据。
存储空间的命名规范如下:
就是我们日常使用的文件,在OSS中以键值对的形式存储。文件上传后无法修改,只能进行通过覆盖达到修改的效果
对象是 OSS 存储数据的基本单元,也被称为 OSS 的文件。对象由元信息(Object Meta),用户数据(Data)和文件名(Key)组成。对象由存储空间内部唯一的 Key 来标识。对象元信息是一组键值对,表示了对象的一些属性,比如最后修改时间、大小等信息,同时用户也可以在元信息中存储一些自定义的信息。
对象的生命周期是从上传成功到被删除为止。在整个生命周期内,只有通过追加上传的 Object 可以继续通过追加上传写入数据,其他上传方式上传的 Object 内容无法编辑,您可以通过重复上传同名的对象来覆盖之前的对象。
对象的命名规范如下:
使用 UTF-8 编码。
长度必须在 1–1023 字节之间。
不能以正斜线(/)或者反斜线(\)开头。
说明 对象名称需要区分大小写。如无特殊说明,本文档中的对象、文件称谓等同于 Object。
选择离自己最近地点的服务器,越近越快
Region 表示 OSS 的数据中心所在物理位置。用户可以根据费用、请求来源等选择合适的地域创建 Bucket。一般来说,距离用户更近的 Region 访问速度更快。详情请查看 OSS 已经开通的 Region。
Region 是在创建 Bucket 的时候指定的,一旦指定之后就不允许更改。该 Bucket 下所有的 Object 都存储在对应的数据中心,目前不支持 Object 级别的 Region 设置。
Endpoint 表示 OSS 对外服务的访问域名。OSS 以 HTTP RESTful API 的形式对外提供服务,当访问不同的 Region 的时候,需要不同的域名。通过内网和外网访问同一个 Region 所需要的 Endpoint 也是不同的。例如杭州 Region 的外网 Endpoint 是 oss-cn-hangzhou.aliyuncs.com,内网 Endpoint 是 oss-cn-hangzhou-internal.aliyuncs.com。
身份认证信息,通过keyid和keySecret来进行验证
AccessKey(简称 AK)指的是访问身份验证中用到的 AccessKeyId 和 AccessKeySecret。OSS 通过使用 AccessKeyId 和 AccessKeySecret 对称加密的方法来验证某个请求的发送者身份。AccessKeyId 用于标识用户;AccessKeySecret 是用户用于加密签名字符串和 OSS 用来验证签名字符串的密钥,必须保密。对于 OSS 来说,AccessKey 的来源有:
Object 操作在 OSS 上具有原子性,操作要么成功要么失败,不会存在有中间状态的 Object。OSS 保证用户一旦上传完成之后读到的 Object 是完整的,OSS 不会返回给用户一个部分上传成功的 Object。
Object 操作在 OSS 上同样具有强一致性,用户一旦收到了一个上传(PUT)成功的响应,该上传的 Object 就已经立即可读,并且 Object 的冗余数据已经写成功。不存在一种上传的中间状态,即 read-after-write 却无法读取到数据。对于删除操作也是一样的,用户删除指定的 Object 成功之后,该 Object 立即变为不存在。
OSS 采用数据冗余存储机制,将每个对象的不同冗余存储在同一个区域内多个设施的多个设备上,确保硬件失效时的数据可靠性和可用性。
对象存储 OSS | 传统文件系统 |
---|---|
Object | 文件 |
Bucket | 主目录 |
Region | 无 |
Endpoint | 无 |
AccessKey | 无 |
无 | 多级目录 |
GetService | 获取主目录列表 |
GetBucket | 获取文件列表 |
PutObject | 写文件 |
AppendObject | 追加写文件 |
GetObject | 读文件 |
DeleteObject | 删除文件 |
无 | 修改文件内容 |
CopyObject (目的和源相同) | 修改文件属性 |
CopyObject | 复制文件 |
无 | 重命名文件 |
英文 | 中文 |
---|---|
Bucket | 存储空间 |
Object | 对象或者文件 |
Endpoint | OSS 访问域名 |
Region | 地域或者数据中心 |
AccessKey | AccessKeyId 和 AccessKeySecret 的统称,访问密钥 |
Put Object | 简单上传 |
Post Object | 表单上传 |
Multipart Upload | 分片上传 |
Append Object | 追加上传 |
Get Object | 简单下载 |
Callback | 回调 |
Object Meta | 文件元信息。用来描述文件信息,例如长度,类型等 |
Data | 文件数据 |
Key | 文件名 |
ACL (Access Control List) | 存储空间或者文件的权限 |