随着互联网的高速发展,我们会面对越来越多海量非结构化数据的存储需求,在这样的背景下,对象存储解决方案为我们文件的存取提供了很大的便利和保障
然而,随着时代的发展,一种新的数据存储形态诞生,开始挑战前面三者的垄断地位,没错,它就是云计算时代存储技术的新网红——对象存储。
对象存储,也称为“面向对象的存储”,英文是Object-basedStorage,现在很多云厂商,也直接称之为“云存储”。
20世纪末,随着互联网的爆发,数据存储需求发生了两个重大的变化。
根据此前的预测,到2020年,全球数据总量的80%,将是非结构化数据,面对这两大趋势,因为本身技术和架构的限制,DAS、SAN和NAS无法进行有效应对。
下面我们来看下最常见的三种存储技术
块存储像是一块块硬盘直接挂载在主机上,以卷或硬盘形式体现,对于存储的数据内容和格式一无所知,只关心读取和写入,不关心关系和用途,数据按字节来访问,性能很高,但是太偏向于底层,不利于扩展,常见的有DAS(直连式存储)、SAN(存储区域网络)。
块存储,操作对象是磁盘,存储协议是SCSI、iSCSI、FC,以SCSI为例,主要接口命令有Read/Write/ReadCapacity/Inquiry等等。
文件存储一般以文件和目录形式体现,有多级访问路径和基于文件系统的目录结构,数据以文件的形式进行存取,也可以进行一些高级管理功能,比如文件层面的访问权限控制等。文件存储可以很方便的进行共享,用途也非常广泛,但是其读写速度相对较慢,常见的有NAS(网络附加存储服务器)。
NAS设备本质就是将本地主机的文件系统迁移至IP网络设备上,多个用户节点可以公用同一个NAS上的同一个文件系统。
由于块存储和文件存储的存储特点,并不适合公有云存储,一般只适合在局域网内部使用,另外随着互联网需求的发展,数据量爆炸式的增长,不断吞食着存储资源;数据类型也逐渐多元化,各类非结构化的数据占比显著增加,如何应对新的存储需求?对象存储应运而生。
文件存储,操作对象是文件和文件夹,存储协议是NFS、SAMBA(SMB)、POSIX等
对象存储是一种基于对象的存储设备,综合了NAS和SAN的优点,同时具有SAN的高速直接访问和NAS的分布式数据共享等优势。适合存储海量图片、视频、日志文件、备份数据、容器镜像等。
对象存储底层存储硬件介质,仍旧是硬盘,这一点和块存储、文件存储没有区别,但是底层硬件之上的系统和两者完全不同。
对象存储,主要操作对象是对象(Object)
存储协议是S3、Swift等,以S3为例,主要接口命令有PUT/GET/DELETE等,看出来了吧?接口命令非常简洁,没有那种目录树的概念,在对象存储系统里,你不能直接打开/修改文件,只能先下载、修改,再上传文件。
对象存储是用来描述解决和处理离散单元的方法的通用术语,对象在一个层结构中不会再有层级结构,是以扩展元数据为特征的
对象存储呈现出来的是一个“桶”(bucket),你可以往“桶”里面放“对象(Object)”,这个对象包括三个部分:Key、Data、Metadata。
可以理解文件名,是该对象的全局唯一标识符(UID)
Key是用于检索对象,服务器和用户不需要知道数据的物理地址,也能通过它找到对象,这种方法极大地简化了数据存储,看上去就是一个URL网址。如果该对象被设置为“公开”,所有互联网用户都可以通过这个地址访问它。
也就是用户数据本体。
Metadata叫做元数据,它是对象存储一个非常独特的概念,元数据有点类似数据的标签,标签的条目类型和数量是没有限制的,可以是对象的各种描述信息。
在传统的文件存储里,这类信息属于文件本身,和文件一起封装存储,而对象存储中,元数据是独立出来的,并不在数据内部封装,元数据的好处非常明显,可以大大加快对象的排序,还有分类和查找。
对象存储的架构是怎样的呢?如下图所示,分为3个主要部分:
这是对象存储的核心,具有自己的CPU、内存、网络和磁盘系统。它的主要功能当然是存储数据,同时,它还会利用自己的算力,优化数据分布,并且支持数据预读取,提升磁盘性能。
它控制Client和OSD的交互,还会管理着限额控制、目录和文件的创建与删除,以及访问控制权限。
提供文件系统接口,方便外部访问。
根据上面的架构可以看出,对象存储系统可以是一个提供海量存储服务的分布式架构。
对象存储的优点很多,简单归纳如下:
对象存储的容量是EB级以上,EB有多大?大家的硬盘普遍是TB级别,1EB约等于1TB的一百万倍,请自行脑补…
对象存储的所有业务、存储节点采用分布式集群方式工作,各功能节点、集群都可以独立扩容,从理论上来说,某个对象存储系统或单个桶(bucket),并没有总数据容量和对象数量的限制。
换句话说,只要你有足够的money,服务商就可以不停地往架构里增加资源,这个存储空间就是无限的,你可以根据自身需求购买相应大小的对象存储空间,如果需要调整大小,也是支持弹性伸缩的,你不要进行数据迁移和人工干预。
对象存储采用了分布式架构,对数据进行多设备冗余存储(至少三个以上节点),实现异地容灾和资源隔离
根据云服务商的承诺,数据可靠性至少可以达到99.999999999%(不用数了,一共11个9),这意味着,1000亿个文件里,每月最多只会有1个文件发生数据丢失,这比一个人被陨石击中的概率还要小143000倍。
数据访问方面,所有的桶和对象都有ACL等访问控制策略,所有的连接都支持SSL加密,OBS系统会对访问用户进行身份鉴权,因为数据是分片存储在不同硬盘上的,所以即使有坏人偷了硬盘,也无法还原出完整的对象数据
对于用户来说,对象存储是一个非常方便的存储方式。
很多人把它比喻为“代客泊车”,你只需要把车扔给他,他给你一个凭证,你通过凭证取车就可以了,你不需要知道车库的布局,也不需要自己去费力停放。
MinIO是一个基于ApacheLicensev2.0开源协议的对象存储服务
它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等
MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似NodeJS,Redis或者MySQL。
阿里云收费的oss也是对象存储,和与阿里云oss有什么区别呢?
HDFS也是经常使用的文件存储方案,与HDFS相比有什么区别呢
虽然HDFS能够利用内部的服务器级存储,它实际上是按照其标准的数据保护策略将所有数据做了三个副本
因此,尽管可以使用较便宜的服务器内部的硬盘驱动器,它可能并不像最初希望的那样经济,因为容量需求要乘以3。
HDFS具有一个主节点和一系列从节点,从节点处理数据并将结果发送给主节点,主节点还需要维护数据复制策略以及基本的集群管理
如果主节点发生故障,集群的其余节点将不能被访问,HDFS对主节点只提供了有限的保护,所以企业需要采取特殊措施来实现主节点的高可用性。
如上所述,在对象存储系统中,主节点与从节点都能受到相同的纠删编码的数据保护,此外,由主节点维护的管理Hadoop集群所需的所有元数据(metadata)都可以存储在集中化的对象存储系统中。这样当主节点发生故障时,从节点或备用节点可以迅速变成为主节点。
像任何其他架构一样,Hadoop对计算和存储容量也会有不同程度的需求,问题是,HDFS要求计算能力和存储容量需要按比例进行扩展,这意味着你不能单独对某一种资源进行扩充。
要说明这一点最常见的方式是当一个Hadoop架构的存储容量用尽时,因为增加更多容量就意味着加入另一个装满硬盘的节点,这也增加了更多的计算能力。反之亦如此,作为Hadoop基础设施,往往需要更多的处理能力,但存储空间却很充裕。大多数时候,当购置了一个新的服务器以增加计算能力时,它也带来了新的存储空间。其结果是,Hadoop架构总是在某种资源上浪费金钱,而对另一种资源却总是缺乏。
对象存储允许容量和计算能力各自独立地进行扩展,计算节点可以是1U或2U的机箱,通过固态存储引导,对象存储系统可以装满高容量驱动器,从而保持每GB成本最低。更重要的是,随着应用环境的变化,每一层都可以独立扩展。
MinIO是全球领先的对象存储先锋,目前在全世界有数百万的用户.在标准硬件上,读/写速度上高达183GB/秒和171GB/秒。
对象存储可以充当主存储层,以处理Spark、Presto、TensorFlow、H2O.ai等各种复杂工作负载以及成为HadoopHDFS的替代品。MinIO用作云原生应用程序的主要存储,与传统对象存储相比,云原生应用程序需要更高的吞吐量和更低的延迟,而这些都是MinIO能够达成的性能指标。
MinIO利用了Web缩放器的来之不易的知识,为对象存储带来了简单的缩放模型。
据有“简单可扩展”的特点,在MinIO,扩展从单个群集开始,该群集可以与其他MinIO群集联合以创建全局名称空间,并在需要时可以跨越多个不同的数据中心,通过添加更多集群可以扩展名称空间,,更多机架,直到实现目标。
其中包括支持Kubernetes、微服和多租户的的容器技术。使对象存储对于Kubernetes更加友好。
目前MinIO支持市面主流的开发语言并且可以通过SDK快速集成快速集成使用。
亚马逊云的S3API(接口协议)是在全球范围内达到共识的对象存储的协议,是全世界内大家都认可的标准
MinIO在很早的时候就采用了S3兼容协议,并且MinIO是第一个支持S3Select的产品.MinIO对其兼容性的全面性感到自豪,并且得到了750多个组织的认同,包括MicrosoftAzure使用MinIO的S3网关-这一指标超过其他同类产品的总和。
只需下载一个二进制文件然后执行,即可在几分钟内安装和配置MinIO,配置选项和变体的数量保持在最低限度,这样让失败的配置概率降低到接近于0的水平,MinIO升级是通过一个简单命令完成的,这个命令可以无中断的完成MinIO的升级,并且不需要停机即可完成升级操作-降低总使用和运维成本。
MinIO基于ApacheV2license100%开放源代码
这就意味着MinIO的客户能够自动的、无限制、自由免费使用和集成MinIO、自由的创新和创造、自由的去修改、自由的再次发行新的版本和软件.确实,MinIO强有力的支持和驱动了很多世界500强的企业。此外,其部署的多样性和专业性提供了其他软件无法比拟的优势。
下面我们来看下MinIO的一些基础概念
Set/Drive这两个概念是MINIO里面最重要的两个概念,一个对象最终是存储在Set上面的。
我们来看下边MINIO集群存储示意图,每一行是一个节点机器,这有32个节点,每个节点里有一个小方块我们称之Drive,Drive可以简单地理解为一个硬盘。
图中,一个节点有32个Drive,相当于32块硬盘,Set是另外一个概念,Set是一组Drive的集合,图中,所有蓝色、橙色背景的Drive(硬盘)的就组成了一个Set。
MINIO是通过数据编码,将原来的数据编码成N份,N就是一个Set上面Drive的数量,后面多次提到的N都是指这个意思,上图中,一个Set上面Drive的数量,是3。
对象被编码成N份之后,把每一份,写到对应的Drive上面,这就是把一个对象存储在整个Set上。
一个集群包含多个Set,每个对象最终存储在哪个Set上是根据对象的名称进行哈希,然后影射到唯一的Set上面,这个方式从理论上保证数据可以均匀的分布到所有的Set上。
根据的观测,数据分布的也非常均匀,一个Set上包含多少个Drive是由系统自动根据集群规模算出来的,当然,也可以自己去配置,一个Set的Drive系统会考虑尽可能把它放在多的节点上面,保证它的可靠性。