OSS、NAS、EBS有什么区别?

近期,AIGC、GPT大模型、数据中台等热点话题备受关注,那么具体在不同的行业场景下,如何选择对应的存储介质呢?选型的时候该考虑哪些因素呢?通过本文主要介绍常用的存储类型及它们之间的对比差异,辅助帮助大家在不同需求和场景下选择合适的存储类型。

存储类型简介

存储的物理层实际无非就是磁盘(disk),即磁记录技术存储数据的存储器。磁盘是计算机主要的存储介质,可以存储大量的二进制数据,并且断电后也能保持数据不丢失。早期计算机使用的磁盘是软磁盘(Floppy Disk,简称软盘),如今常用的磁盘是硬磁盘(Hard disk,简称硬盘)。

磁盘知识简介

存储磁盘常见的三大指标:吞吐量、IOPS、时延。三个指标之间存在着关系,具体呈现为如下公式:每秒吞吐 = I/Osize * IOPS * 并行度(IOPS-延时)。

1.吞吐量是指对网络、设备、端口、虚电路或其他设施,单位时间内成功地传送数据的数量(以比特、字节、分组等测量)。

2.IOPS是(Input/Output Operations Per Second)是一个用于计算机存储设备(如机械硬盘HDD、固态硬盘SSD、混合硬盘HHD或存储区域网络SAN等)性能测试的量测方式,可以视为是每秒的读写次数。

3.时延是发起读取数据请求到读取到数据之间的时间间隔。

阿里云存储产品底层原理

阿里云存储是在物理层的磁盘资源上利用虚拟化技术将物理存储资源池化,架构分布式资源调度系统——盘古系统,可以为用户、客户提供类似于水电煤资源使用按量付费、按需取用的使用体验。

存储类型区别

存储方式区别

文件、块和对象是三种以不同的方式来保存、整理和呈现数据的存储格式。

1.文件存储NAS会以文件和文件夹的层次结构来整理和呈现数据;

2.块存储EBS会将数据拆分到任意划分且大小相同的卷中;

3.对象存储OSS会管理数据并将其链接至关联的元数据。

接口协议区别

三种存储产品的接口协议也不一样。

1.文件存储NAS文件系统构造的协议为NFS、SMB协议,支持POSIX接口访问;

2.块存储EBS协议为阿里云自研协议,封装接口为iSCSI;

3.对象存储OSS协议为HTTP/HTTPS协议(Restful API),通过URL域名地址定位文件,支持AWS的S3接口。

应用场景区别

由于三款产品存储数据存储结构的不同,适用于不同的应用场景。

文件存储NAS

NAS文件系统存储架构是目录树状结构,可以支持上千台虚拟机通过POSIX接口同时、高并发访问,支持随机读写、在线修改、直读直写。

块存储EBS

1、EBS的优势是性能高、时延低,适合于OLTP数据库、NoSQL数据库等IO密集型的高性能、低时延应用工作负载,支持随机读写。

2、EBS是裸磁盘,挂载到ECS后不能被操作系统应用直接访问,需要格式化成文件系统(ext3、ext4、NTFS等)后才能被访问。

3、EBS无法实现容量弹性扩展,单盘最大容量为32TB,并且对共享访问的支持有限,需要配合类Oracle RAC、WSFC Windows故障转移集群等集群管理软件才能进行共享访问。因此,块存储EBS主要还是针对单ECS的高性能,低时延的存储产品。

对象存储OSS

OSS存储架构为S3(Simple Storage Service 简单存储服务)扁平化文件组织形式,不支持文件随机读写,主要适用于互联网架构的海量数据的上传下载和分发。对象存储在存储段bucket中,对象就像是文件,存储段就像是文件夹或目录,对象和存储段通过统一资源标识符(Uniform Resource Identifier,URI)进行查找,虽然在控制台界面是好像是有树状结构,但实际显示的文件夹/.resource只是前缀。

存储产品时延吞吐协议访问模式(虚机访问存储数据的接口)应用场景
文件存储NAS毫秒级数百GbpsNFS、SMB上千个ECS通过POSIX接口并发访问,随机读写高并发访问、在线修改、直读直写的场景
对象存储OSS几十毫秒级数百GbpsHTTP、HTTPS(Restful API)数百万客户端通过Web并发,追加写互联网架构的海量数据的上传下载和分发
块存储EBS微秒级数十Gbps自研协议单ECS通过POSIX接口访问,随机读写适合IO密集型的数据库/单ECS高性能、低时延应用工作负载

协议、接口详细区别

什么是接口?什么是协议?

协议:协议定义了在两个或多个通信实体之间进行交换的报文格式和次序,以及报文发送和/或接收一条报文或其他事件所采取的行动。

接口:在程序设计的情况下,接口往往与模块挂钩。模块是从物理上对程序实体的定义进行分组,是可以分别编写和编译的程序单位。一个模块包括接口和实现两部分。模块的接口规定了在模块中定义的、可以被其他模块使用的一些程序实体;模块的实现是指在模块中定义的程序实体的具体实现。接口起到了模块设计者和使用者之间的一种约束作用:使用者按照模块的接口来使用模块所提供的功能;模块的实现者根据规定的模块接口进行实现。

二者的联系:协议和接口常常放在一起或者混淆使用,本质上都是抽象的规则集合,在不同的场合有不同的含义。例如,在计算机网络语境下,我们使用协议往往指网络协议/通信协议,网络模型中的每层都有对应的不同协议。在编程场景中 ,我们往往具体指某种接口,可以狭义地理解为交互点(类似于去政务大厅的办事窗口)、函数/方法。但在具体场景的使用中,有时会默认背景,比如将API简称为接口(实际上是包含关系,而不是等价关系)。广义上讲,接口和协议可以一起使用,它们都是高度抽象的概念。狭义上,协议有各种具体的协议,接口有各种具体的接口(如java中有可定义的interface,常用来与抽象类比较),这时两者是不同。

一句话概括:协议是多个通信实体之间互通的规则和范式。接口是按照协议规定规则的具体实现。二者的联系:协议是接口的既定规则,接口是协议的具体实现。二者的区别:不需要过分区分协议和接口,他们的联系更加紧密。

协议介绍

NFS协议

1.定义:NFS(Network File System,网络文件系统)是由SUN公司研制的UNIX表示层协议(presentation layer protocol)文件共享协议,能使使用者访问网络上别处的文件就像在使用自己的计算机一样。

2.NFS 差异化特点

a.NFS只提供基本的文件处理功能,而不提供任何四层TCP/IP与OSI七层数据传输功能,需要借助 RPC 协议才能实现 TCP/IP 数据传输功能;

b.NFS 默认没有加密,对客户端来说是完全透明的,且仅依靠 IP 地址或主机名来决定是否允许客户端挂载指定的共享目录【明文传输】,需要可通过 Kerberos 进行认证及加密。

3.NFS与其他文件共享协议共同点:使用C/S 架构。4.NFS实现原理:共享资源的属主、属组和权限。

a.NFS 服务器和客户端通过 UID 和 GID 来识别共享资源的所有者信息。当客户端挂载 NFS 共享目录时,共享目录中资源的 UID 和 GID 将与服务器上面的保持一致;而客户端会将 UID 和 GID 映射到客户端上所对应的用户名和组名。NFS 服务器与客户端上共享资源的权限及 ACL 信息(若支持)将保持一致。

SMB协议

1.定义:SMB网络文件共享系统协议,全名服务器消息块(Server Message Block),允许应用程序和终端用户从远端的文件服务器访问文件资源,CIFS(通用互联网文件系统 Common Internet File System)是SMB的衍生协议。

2.SMB与NFS的区别:操作系统OS不同,NFS适配linux操作系统,SMB适配windows/linux,但是兼容linux时相关存储性能会收到影响。

3.SMB协议运用过程:SMB协议协商(Negotiate)> 建立SMB会话(Session Setup)> 连接一个文件分享(Tree Connect)> 文件系统操作 > 断开文件分享连接(Tree Disconnect)> 终止SMB会话(Logoff)。

iSCSI协议

1.定义:iSCSI(Internet Small Computer System Interface),Internet小型计算机系统接口,又称为IP-SAN,是一种基于因特网及SCSI-3协议下的存储技术,由IETF提出,并于2003年2月11日成为正式的标准。

2.实现原理:iSCSI利用了TCP/IP的port 860 和 3260 作为沟通的渠道。透过两部计算机之间利用iSCSI的协议来交换SCSI命令,让计算机可以透过高速的局域网集线来把SAN模拟成为本地的储存装置。

3.应用场景/功能:可以与任意类型的 SCSI 设备进行通信,总是使用它来连接服务器计算机 (例如,数据库服务器) 和磁盘卷上存储阵列。

a.使用iSCSI SAN 的目的通常有以下两个:

i.存储集成公司希望将不同的存储资源从分散在网络上的服务器移动到统一的位置(常常是数据中心);这可以让存储的分配变得更为有效。SAN 环境中的服务器无需任何更改硬件或电缆连接就可以得到新分配的磁盘卷。

ii.灾难恢复公司希望把存储资源从一个数据中心镜像到另一个远程的数据中心上,后者在出现长时间停电的情况下可以用作热备份。特别是,iSCSI SAN 使我们只需要用最小的配置更改就可以在 WAN 上面迁移整个磁盘阵列,实质上就是,把存储变成了“可路由的”,就像普通的网络通信一样。

POSIX协议

1.定义:可移植操作系统接口POSIX(Portable Operating System Interface)是IEEE为要在各种UNIX操作系统上运行软件,而定义API的一系列互相关联的标准的总称。

2.原理应用程序通过应用编程接口(API)而不是直接通过系统调用来编程(即并不需要和内核提供的系统调用来编程)。

a.一个API定义了一组应用程序使用的编程接口。它们可以实现成调用一个系统,也可以通过调用多个系统来实现,而完全不使用任何系统调用也不存在问题。

b.API可以在各种不同的操作系统上实现给应用程序提供完全相同的接口,但是API本身在这些系统上的实现却可能迥异。比如,当应用程序调用printf()函数时,printf函数会调用C库中的printf,继而调用C库中的write,C库最后调用内核的系统的函数,但是可能windows调用的是函数A,linux调用的是函数B。完成同一功能,不同内核提供的系统调用(一个函数)是不同的。

RESTful API

展开阅读全文

本文系作者在时代Java发表,未经许可,不得转载。

如有侵权,请联系nowjava@qq.com删除。

编辑于

关注时代Java

关注时代Java