文件存储与对象存储
摘要:本文主要介绍文件存储NAS与对象存储OSS这2种目前主要的存储技术,以及差异,并介绍了各自的主要使用场景。
NAS(Network Attached Storage):是一套网络储存设备,通常是直接连在网络上并提供资料存取服务,一套 NAS 储存设备就如同一个提供数据文件服务的系统,特点是性价比高。NAS采用NFS或CIFS命令集访问数据,以文件为传输协议,通过TCP/IP实现网络化存储,可扩展性好、价格便宜、用户易管理,如目前在集群计算中应用较多的NFS文件系统,但由于NAS的协议开销高、带宽低、延迟大,不利于在高性能集群中应用。
第一,NAS适用于那些需要通过网络将文件数据传送到多台客户机上的用户。NAS设备在数据必须长距离传送的环境中可以很好地发挥作用。
第二,NAS设备非常易于部署。可以使NAS主机、客户机和其他设备广泛分布在整个企业的网络环境中。NAS可以提供可靠的文件级数据整合,因为文件锁定是由设备自身来处理的。
第三,NAS应用于高效的文件共享任务中,例如UNIX中的NFS和Windows NT中的CIFS,其中基于网络的文件级锁定提供了高级并发访问保护的功能。
NAS设备同样具有一些缺点。这是因为传统的TCP/IP协议不可避免的给NAS带来一些“先天”的缺点。
对象存储提供Key-Value(简称K/V)方式的HTTP RESTful数据读写接口,并且常以网络服务的形式提供数据的访问。对象存储服务OSS是海量高可靠的云存储服务,不限文件数量和大小,可以根据所需存储量无限扩展存储空间,支持流式写入和读出,特别适合非结构化大文件的业务场景。
对象是系统中数据存储的基本单位,对象由元信息(Object Meta),用户数据(Data)和文件名(Key)组成,并且由存储空间内部唯一的Key来标识。元信息可以定义基于文件的RAID参数、数据分布和服务质量等,对象通过与存储系统通信维护自己的属性。
在存储设备中,所有对象都有一个对象标识,通过对象标识OSD命令访问该对象。通常有多种类型的对象,存储设备上的根对象标识存储设备和该设备的各种属性,组对象是存储设备上共享资源管理策略的对象集合等。
对象的生命周期是从上传成功到被删除为止。在整个生命周期内,除通过追加方式上传的Object可以通过继续追加上传写入数据外,其他方式上传的Object内容无法编辑,您可以通过重复上传同名的对象来覆盖之前的对象。
存储空间bucket是用户用于存储对象(Object)的容器,所有的对象都必须隶属于某个bucket。bucket具有各种配置属性,包括地域、访问权限、存储类型等。用户可以根据实际需求,创建不同类型的bucket来存储不同的数据。
OSD的主要功能包括数据存储和安全访问。目前国际上通常采用刀片式结构实现对象存储设备。OSD提供三个主要功能:
OSD管理对象数据,并将它们放置在标准的磁盘系统上,OSD不提供块接口访问方式,Client请求数据时用对象ID、偏移进行数据读写。
OSD用其自身的CPU和内存优化数据分布,并支持数据的预取。由于OSD可以智能地支持对象的预取,从而可以优化磁盘的性能。
OSD管理存储在其上对象的元数据,该元数据与传统的inode元数据相似,通常包括对象的数据块和对象的长度。而在传统的NAS系统中,这些元数据是由文件服务器维护的,对象存储架构将系统中主要的元数据管理工作由OSD来完成,降低了Client的开销。
MDS控制Client与OSD对象的交互,主要提供以下几个功能:
MDS构造、管理描述每个文件分布的视图,允许Client直接访问对象。MDS为Client提供访问该文件所含对象的能力,OSD在接收到每个请求时将先验证该能力,然后才可以访问。
MDS在存储系统上构建一个文件结构,包括限额控制、目录和文件的创建和删除、访问控制等。
为了提高Client性能,在对象存储系统设计时通常支持Client方的Cache。由于引入Client方的Cache,带来了Cache一致性问题,MDS支持基于Client的文件Cache,当Cache的文件发生改变时,将通知Client刷新Cache,从而防止Cache不一致引发的问题。
在各语言SDK中,ObjectKey、Key以及ObjectName是同一概念,均表示对Object执行相关操作时需要填写的Object名称。例如向某一存储空间上传Object时,ObjectKey表示上传的Object所在存储空间的完整名称,即包含文件后缀在内的完整路径,如填写为abc/efg/123.jpg。
目前AWS是S3接口协议是事实上的对象存储通用接口,其他产品一般都会兼容此接口。
如上传文件:
curl -X PUT -T "${file}" \
-H "Host: ${bucket}.${url}" \
-H "Date: ${dateValue}" \
-H "Content-Type: ${contentType}" \
-H "Authorization: AWS ${s3Key}:${signature}" "http://${bucket}.${url}/${objname}"
下载文件:
curl -o ${file} -X GET \
-H "Host: ${bucket}.${url}" \
-H "Date: ${dateValue}" \
-H "Content-Type: ${contentType}" \
-H "Authorization: AWS ${s3Key}:${signature}" "http://${bucket}.${url}/${objname}"
不用厂家的OSS产品,一般都提供配套的SDK,支持JAVA、Python、Go、C++、PHP、C、.net、Node.js、安卓、iOS、Ruby等语言。
另一个常见对象存储接口是OpenStack Swift API。
对象存储系统,根据数据持久性和访问的频率,一般可以分普通存储、低频存储、归档存储、深度归档存储等,适合不同的场景,后端存储设备也可以选择不同,从而实现成本与性能的最优选择。
提供标准的RESTful API接口、丰富的SDK包、客户端工具、控制台。可以像使用文件一样方便地上传、下载、检索、管理用于Web网站或者移动应用的海量数据。
OSS的用户可以在任何时间、任何地点上传和下载数据。基于OSS,用户可以搭建出各种多媒体分享网站、网盘、个人企业数据备份等基于大规模数据的服务。用户可以存储和管理多大上千亿个数据对象(data object,可以使任何内容的文件,如数据记录,图片,流媒体文件等),每个数据对象大小可达20GB。OSS还能通过对象组合的方法构建最大5TB的单一对象。
OSS底层一般都使用分布式文件系统,拥有数据自动冗余、故障自动恢复的能力。OSS服务可用性不低于99.9%,数据可靠性大于十个9。OSS支持类似传统文件系统的目录结构,便于用户组织数据。存储在OSS的每个数据对象都拥有唯一的URL,便于用户在网页或移动应用上展示。OSS提供了PHP,Python,Java等多种语言的SDK方便数据读写。
专业NAS产品比较多,有商业和民用等很多产品。
下面介绍几个常见的开源NAS相关产品。
FreeNAS是最流行的免费和开源NAS操作系统,具有企业级功能和企业级ZFS开源文件系统。它可以虚拟安装,也可以安装在硬件上,以创建集中式数据环境。它提供的界面非常直观(Web界面)。它支持Windows共享SMB / CIFS,NFS和Apple文件共享(AFP),FTP,iSCSI。
CephFS全称Ceph File System,是Ceph对外提供的分布式文件存储服务。Ceph FS是一个支持POSIX接口的文件系统,它使用 Ceph 存储集群来存储数据。文件系统对于客户端来说可以方便的挂载到本地使用。Ceph FS构建在RADOS之上,继承RADOS的容错性和扩展性,支持冗余副本和数据高可靠性。
Linux系统一般自带(或安装)一个NFS服务,通过此服务,可以提供一个将本地存储共享为NFS的服务,即NAS存储。缺点是不支持Windows SMB/CIFS协议。
GlusterFS是Scale-Out存储解决方案Gluster的核心,它是一个开源的分布式文件系统,具有强大的横向扩展能力,通过扩展能够支持数PB存储容量和处理数千客户端。GlusterFS借助TCP/IP或InfiniBand RDMA网络将物理分布的存储资源聚集在一起,使用单一全局命名空间来管理数据。
GlusterFS支持运行在任何标准IP网络上标准应用程序的标准客户端,用户可以在全局统一的命令空间中使用NFS/CIFS等标准协议来访问应用程序。GlusterFS使得用户可摆脱原有的独立,高成本的封闭存储系统,能够利用普通廉价的存储设备来部署可集中管理,横向扩展,虚拟化的存储池,存储容量可扩展至TB/PB级。
Ceph对象存储可通过Amazon Simple Storage Service(S3)和基于OpenStack SwiftRepresentational State Transfer(REST)的应用程序编程接口(API)访问,以及用于与软件应用程序集成的本机API。
RADOS Gateway将对象存储公开为RESTful接口,可以同时显示本机Amazon S3和OpenStack Swift API。
Minio是一个基于Apache License v2.0开源协议的存储服务。它兼容亚马逊S3云存储服务接口,异常符合于存储大容量非构造化的数据,比如图片、视频、日记文献、备份数据和容器/杜撰机镜像等。
Minio有如下几个显著的优点:
除了上述支持S3 HTTP接口的对象存储以外,还有HDFS、FastDFS等通过专有API访问的分布式存储系统,也可以视为一种对象存储。
除了开源产品,商业化的对象存储、各种云平台上的对象存储,功能类似,除了支持S3接口外,可能还会实现
对比项 |
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的时候要尽量避免类似的操作。 |
受限于单个设备的性能。访问越深的目录消耗的资源也越大,操作拥有很多文件的目录也会非常慢。 |
访问方式 |
API,支持HTTP、SDK等方式访问 |
支持NFS/CIFS协议挂载访问 |
访问环境 |
不限环境 |
必须通过操作系统访问 |
存储类型 |
支持多存储类型 |
不直接区分存储类型 |
读操作 |
快速,性能均衡 |
文件较多时候存在延迟 |
对大量小文件支持 |
快速,性能均衡 |
会有较大延迟 |
文件修改 |
不支持修改操作,只能覆盖 |
支持 |
部署 |
复杂,需要很多组件协同 |
有简单的,也有复杂的,依产品而定 |
权限控制 |
通过账号或AK/SK访问 |
通过IP限制 |
容量限额 |
支持 |
支持 |
URL访问支持 |
对象可以创建为URL,提供互联网访问 |
不支持,只能操作系统访问,通过应用访问 |
k8s集群支持 |
不需要额外组件,应用直接访问OSS服务器 |
需要worke上安装nfs-util包才能访问。 |
文件ACL |
不支持,只通过账号限制权限,只能限制对象的私有、只读、公开。 |
可以设置文件级别的ACL |
旧系统迁移 |
需要改造 |
不需要改造 |
延时 |
较低时延(几十毫秒级) |
低时延(毫秒级) |
吞吐 |
数百Gbps |
数百Gbps |
访问模式 |
数百万客户端通过WEB并发,追加写 |
上千个ECS通过POSIX接口并发访问,随机读写 |
NAS提供的标准文件系统界面和文件系统语义能够将企业应用程序轻松迁移,或构建新的应用程序。
视频编辑、影音制作、广播处理、声音设计和渲染等媒体工作流通常依赖于共享存储来操作大型文件。强大的数据一致性模型加上高吞吐量和共享文件访问,可以缩短完成以上工作流所需的时间,并将多个本地文件存储库合并到面向所有用户的单个位置。
NAS提供了大数据应用程序所需的规模和性能,具备计算节点高吞吐量、写和读一致性以及低延迟的文件操作能力。许多分析工作负载通过文件接口与数据进行交互,依赖于文件锁等文件语义,并要求能够写入文件的部分内容。NAS支持文件锁定的文件系统语义,并且能够弹性扩展容量和性能。
NAS可以用作一种持久性强、吞吐量高的文件系统,用于各种内容管理系统和Web服务应用程序,为网站、在线发行和存档等广泛的应用程序存储和提供信息。普遍的,很多内容管理系统都是使用文件存储来持久化保存文件,所以使用NAS后,应用系统不需要改造就能适配。
NAS可提供对文件数据的持久共享访问权限,非常适合容器存储。
主要面向海量数据存储分析、历史数据明细查询、海量行为日志分析和公共事务分析统计等场景,向用户提供低成本、高性能、不断业务、无需扩容的解决方案。
海量数据存储分析的典型场景:PB级的数据存储,批量数据分析,毫秒级的数据详单查询等
历史数据明细查询的典型场景:流水审计,设备历史能耗分析,轨迹回放,车辆驾驶行为分析,精细化监控等
海量行为日志分析的典型场景:学习习惯分析,运营日志分析,系统操作日志分析查询等
公共事务分析统计的典型场景:犯罪追踪,关联案件查询,交通拥堵分析,景点热度统计等
用户通过DES等迁移服务将海量数据迁移至OBS,再基于华为云提供的MapReduce等大数据服务或开源的Hadoop、Spark等运算框架,对存储在OBS上的海量数据进行大数据分析,最终将分析的结果呈现在ECS中的各类程序或应用上。
OSS可用于图片、音视频、日志等海量文件的存储。
各种终端设备、Web网站程序、移动应用可以直接向OSS写入或读取数据。
用户手机、电脑、PAD等终端设备上的动态数据与搭建在云上的企业云盘业务系统进行交互,动态数据请求发送到企业云盘业务系统处理后直接返回给终端设备。静态数据保存在OSS中,业务系统通过内网对静态数据进行处理,用户终端直接向OSS请求和取回静态数据。同时,OSS提供生命周期功能,实现不同对象存储类别之间的自动转换,以节省存储成本。
在HPC场景下,企业用户的数据可以通过直接上传或数据快递的方式上传到OSS。同时OSS提供的文件语义和HDFS语义支持将OSS直接挂载到HPC flavors的节点以及大数据&AI分析的应用下,为高性能计算各个环节提供便捷高效的数据读写和存储能力。