存储
常见的存储格式
- 文件存储会以文件和文件夹的层次结构来整理和呈现数据;
- 块存储会将数据拆分到任意划分且大小相同的卷中;
- 对象存储会管理数据并将其链接至关联的元数据。
DAS和SAN是基于物理块的存储方式,而NAS是基于文件的存储方式。
- 在DAS和SAN中,存储资源就像一块一块的硬盘,直接挂载在主机上,我们称之为块存储。
- 而在NAS中,呈现出来的是一个基于文件系统的目录架构,有目录、子目录、孙目录、文件,我们称之为文件存储。
文件存储
数据会以单条信息的形式存储在文件夹中,正如您将几张纸放入一个文件夹中一样。当您需要访问该数据时,您的计算机需要知道相应的查找路径。存储在文件中的数据会根据数量有限的元数据来进行整理和检索,这些元数据会告诉计算机文件所在的确切位置。
操作对象:文件和文件夹
存储协议:NFS、SAMBA(SMB)、POSIX
接口命令:以NFS为例,文件相关的接口命令包括:READ/WRITE/CREATE/REMOVE/RENAME/LOOKUP/ACCESS 等;文件夹相关的接口命令包括:MKDIR/RMDIR/READDIR 等
存储架构:NAS
块存储
块存储会将数据拆分成块,并单独存储各个块。每个数据块都有一个唯一标识符,所以存储系统能将较小的数据存放在最方便的位置。这意味着有些数据可以存储在 Linux环境中,有些则可以存储在 Windows 单元中。
由于块存储不依赖于单条数据路径(和文件存储一样),因此可以实现快速检索。每个块都独立存在,且可进行分区,因此可以通过不同的操作系统进行访问,这使得用户可以完全自由地配置数据。它是一种高效可靠的数据存储方式,且易于使用和管理。它适用于要执行大型事务的企业和部署了大型数据库的企业。这意味着,需要存储的数据越多,就越适合使用块存储。
块存储有一些缺点。块存储的成本高昂。它处理元数据的能力有限。
操作对象:磁盘
存储协议:SCSI、iSCSI、FC
接口命令:以SCSI为例,主要有Read/Write/Read Capacity
存储架构:DAS、SAN
对象存储
对象存储,也称为基于对象的存储,是一种扁平结构,其中的文件被拆分成多个部分并散布在多个硬件间。在对象存储中,数据会被分解为称为“对象”的离散单元,并保存在单个存储库中,而不是作为文件夹中的文件或服务器上的块来保存
操作对象:对象(Object)
存储协议:S3、Swift
接口命令:主要有PUT/GET/DELETE等,你不能直接打开/修改文件,只能先下载、修改,再上传文件
存储架构:去中心化框架
基本概念
对象存储呈现出来的是一个“桶”(bucket),你可以往“桶”里面放“对象(Object)”。这个对象包括三个部分:Key、Data、Metadata。
存储桶(bucket)
我们的数据都是存储在AWS 的存储桶中,我们可以把桶理解为磁盘分区,不过它是由一个桶名(字符串)唯一标识,即你不能创建别人已经创建过的桶。
对象
Key:可以理解文件名,对象的全局唯一标识符(UID)
Key是用于检索对象,服务器和用户不需要知道数据的物理地址,也能通过它找到对象。这种方法极大地简化了数据存储
例如这个云服务key,看上去就是一个URL网址:
Metadata 元数据
元数据有点类似数据的标签,标签的条目类型和数量是没有限制的,可以是对象的各种描述信息。
- 元数据的好处,可以大大加快对象的排序,还有分类和查找。
- 上传对象后,将无法修改对象元数据。它是那种把整个数据取出来,修改,再放回去的模式,不支持直接在存储上修改,哪怕只是加一行数据,都不行。所以,它不适合存储需要频繁查写的数据(例如关系型数据库的数据)。
举个例子,如果对象是一张人物照片,那么元数据可以是姓名、性别、国籍、年龄、拍摄地点、拍摄时间等。
在传统的文件存储里,这类信息属于文件本身,和文件一起封装存储。而对象存储中,元数据是独立出来的,并不在数据内部封装。
Data 数据:也就是用户数据本体
架构
对象存储系统可以是一个提供海量存储服务的分布式架构。
- 容量无限大,对象存储的所有业务、存储节点采用分布式集群方式工作,各功能节点、集群都可以独立扩容。
- 数据安全可靠:对象存储采用了分布式架构,对数据进行多设备冗余存储(至少三个以上节点),实现异地容灾和资源隔离。
- 使用方便:除了可以使用网页(基于http)直接访问之外,大部分云服务提供商都有自己的图形化界面客户端工具,用户存取数据就像用网盘一样。
常见的对象存储系统
Ceph:是一个分布式对象存储系统,具有高可用性、可扩展性和自修复性。
GlusterFS:是一个可扩展的分布式文件系统,旨在提供高可用性、可伸缩性和数据可靠性。
Sheepdog:是一个开源的对象存储系统,旨在为虚拟机提供可靠的存储服务。
Lustre:是一个高性能的对象存储系统,用于大规模并行计算。
Swift:是一个用于OpenStack的分布式对象存储系统,具有高可用性、可扩展性和自修复性。
Cinder:是一个用于OpenStack的块存储服务,提供高性能、低延时的块存储服务。
TFS:是一个分布式的对象存储系统,用于构建大规模的共享访问应用。
HDFS:是一个分布式文件系统,是大数据处理的重要基础设施。
MooseFS:是一个可扩展的分布式文件系统,具有高可用性、可伸缩性和数据可靠性。
FastDFS:是一个轻量级的分布式文件系统,用于共享访问、备份和镜像等应用。
MinIO:是一个高性能的分布式对象存储系统,用于云存储和共享访问等应用。中文文档:https://www.minio.org.cn/docs/minio/kubernetes/upstream/
MogileFS:是一个分布式的对象存储系统,具有高可用性、可扩展性和自修复性。
JuiceFS 是一款面向云原生设计的高性能分布式文件系统,介绍文档:https://juicefs.com/docs/zh/community/introduction/
go 操作s3
https://www.cnblogs.com/Yemilice/p/11490918.html
对象存储服务(Object Storage Service)
对象存储,也称为“面向对象的存储”,现在很多云厂商,也直接称之为“云存储”。
不同的云厂商对它有不同的英文缩写命名。例如阿里云把自家的对象存储服务叫做OSS,华为云叫OBS,腾讯云叫COS,七牛叫Kodo,百度叫BOS,网易叫NOS……五花八门,反正都是一个技术。
Amazon S3服务
Amazon S3(Simple Storage Service)对象存储出现得比较早且使用简单的RESTful API,于是成为了对象存储服务(Object Storage Service,OSS)业内的标准接口规范。它是一种面向 Internet 的存储服务,将数据作为对象存储在存储区中。一个对象由一个文件和可选的描述该文件的任何元数据组成。使用SDK的访问服务
用户文档:https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/userguide/Welcome.html
在S3里面实质上是没有目录和文件夹的概念,即目录概念实质只是对象的前缀,并不存在实体。
AliyunOSS服务
阿里云对象存储OSS,简单地说就是我们花钱在阿里购买一块存储空间,然后我们就可以将图片、音频、视频等各种文件资源存储在对象存储OSS服务器上。接着对象存储OSS服务器就可以供有权限的人员上传、下载、删除这些文件
参考文档:https://help.aliyun.com/product/31815.html
python SDK:https://help.aliyun.com/document_detail/32025.html?spm=a2c4g.32006.0.0
API文档:https://aliyun-oss-python-sdk.readthedocs.io/en/latest/api.html
数据以对象(Object)的形式存储在OSS的存储空间(Bucket )中。如果要使用OSS存储数据,您需要先创建Bucket,并指定Bucket的地域、访问权限、存储类型等属性。创建Bucket后,您可以将数据以Object的形式上传到Bucket,并指定Object的文件名(Key)作为其唯一标识。
OSS以HTTP RESTful API的形式对外提供服务,访问不同地域需要不同的访问域名(Endpoint)。当您请求访问OSS时,OSS通过使用访问密钥(AccessKey ID和AccessKey Secret)对称加密的方法来验证某个请求的发送者身份
-
存储空间(Bucket)
存储空间是用户用于存储对象(Object)的容器,所有的对象都必须隶属于某个存储空间。存储空间具有各种配置属性,包括地域、访问权限、存储类型等。用户可以根据实际需求,创建不同类型的存储空间来存储不同的数据。
-
对象
对象是OSS存储数据的基本单元,也被称为OSS的文件。和传统的文件系统不同,对象没有文件目录层级结构的关系。对象由元信息(Object Meta),用户数据(Data)和文件名(Key)组成,并且由存储空间内部唯一的Key来标识。对象元信息是一组键值对,表示了对象的一些属性,比如最后修改时间、大小等信息,同时用户也可以在元信息中存储一些自定义的信息。
-
对象名称
在各语言SDK中,ObjectKey、Key以及ObjectName是同一概念,均表示对Object执行相关操作时需要填写的Object名称。例如向某一存储空间上传Object时,ObjectKey表示上传的Object所在存储空间的完整名称,即包含文件后缀在内的完整路径,如填写为abc/efg/123.jpg。
-
地域
Region表示OSS的数据中心所在物理位置。用户可以根据费用、请求来源等选择合适的地域创建Bucket。一般来说,距离用户更近的Region访问速度更快。
-
访问域名
Endpoint表示OSS对外服务的访问域名。OSS以HTTP RESTful API的形式对外提供服务,当访问不同的Region的时候,需要不同的域名。通过内网和外网访问同一个Region所需要的Endpoint也是不同的。例如杭州Region的外网Endpoint是oss-cn-hangzhou.aliyuncs.com,内网Endpoint是oss-cn-hangzhou-internal.aliyuncs.com。
-
访问密钥
AccessKey简称AK,指的是访问身份验证中用到的AccessKeyId和AccessKeySecret。OSS通过使用AccessKeyId和AccessKeySecret对称加密的方法来验证某个请求的发送者身份。AccessKey ID用于标识用户;AccessKey Secret是用户用于加密签名字符串和OSS用来验证签名字符串的密钥,必须保密。
存储空间管理(Bucket)
对象管理(Object)
访问控制
验证中用到的AccessKeyId和AccessKeySecret。OSS通过使用AccessKeyId和AccessKeySecret对称加密的方法来验证某个请求的发送者身份。AccessKey ID用于标识用户;AccessKey Secret是用户用于加密签名字符串和OSS用来验证签名字符串的密钥,必须保密。
存储空间管理(Bucket)
对象管理(Object)
访问控制