大家好,我是指北君,为回馈大家一致以来的热情,指北君今天掏压箱底的私货来教授小伙伴们怎么处对象,是纯处?那怎么行呢,俗话说得好那什么不X,什么不爱来着,当然不能傻傻地纯处,所以我们必须谈的是对象存储,这好像有点备胎的意思,良心有点小小的不安,指北君的私货貌似有点渣呢!
概述
不管渣不渣,先让我们今天的猪脚登场————对象存储,先来个自我介绍
图中站右边的老大哥,他们是处文件的,所有非结构化的,比如图片、语言、日志这类都是有自己性格的。这些有老古董DAS、NAS、SAN这些,也有外国友人GFS,还有本土帅哥FastDFS。 左边的一看名字,就知道不用介绍了,所有结构化的妞都被他们网络了。 最中间亮瞎眼的就是今天的猪脚————对象存储,代表人物有S3,XX OSS(XX是指实现厂商),由于是混血可以通吃所以处的叫对象。你问指北君为啥叫对象?因为有结构化部分,也有非结构化的部分,对象嘛可以包含一切,所以就这么叫了。不是你想的那个对象,技术博客怎么能乱谈对象!
为啥混血就吃香呢
因为他可以做文件存储和关系型数据做不了的事。比如数据库都是存结构化的,文件图片这些你要放数据库,数据库会疯掉;又比如文件系统,可以搞定图片、语言,但是不好检索。对象存储就可以搞定这两样事情:
- 文件内容非结构存储
- 元数据结构化存储,元数据可以包含文件的各个维度信息和Tag
当然除了上面两个显著不同于传统存储的特征外,对象存储外还有很多优点:
- 可以无限(理论)扩展
- 可以按需申请,杜绝浪费
- 高可靠(多副本,异地容灾)
- 分层存储,根据业务特征支持低频和高频分层存储
- 使用方便,提供多种方式的访问和存储
对象存储的基本概念
在对象存储中我们要了解两个最基础的概念:Bucket,Object。Object好理解就是我们要存储的内容,Bucket则是用来分配Object存储的逻辑空间,我们的Object必须归属于Bucket。当然在Bucket上还有Region的概念,对于需要考虑跨域问题则需要根据数据的地域选择对应的Region,以获取数据传输的效率优势。
- Region 地域
- Bucket 存储桶/空间
- Object 对象
对象由三部分内容组成:
- Key 全局唯一ID
- Data 数据
- Metadata 用户自定义的属性、标签等
除了上面的存储概念外,为了便于权限控制和访问,还有账户(Account)和服务(Service)概念:
- Account 账户,鉴权和权限控制
- Service 服务,访问的接口
对象存储支持的能力(操作)
这里不针对特定的产品介绍,介绍大部分的OSS产品都具备的能力
- Service相关操作,比如获取可用Regions,获取可用服务列表
- Bucket操作,比如:创建、删除,获取Bucket;对Bucket属性进行操作,比如Policy,WebSite,Logging,Lifecyle,accelerate,CORS,lock等等。
- Object操作,比如:创建,删除、获取Object基本操作;以及拷贝、断点续传,共享设置等等特色能力
- 统计操作,针对Object的统计操作
- 跟踪操作,用于定位分析
- 访问控制(IAM)操作
实现架构
为便宜理解,这里简单列出对象存储的主要逻辑组成部分:
从图中可以看到对象存储包含三个主要部分:
-
客户端 访问对象存储的客户端工具,提供传统的文件系统接口方便访问以及其客户端方式的接口访问等
-
元数据服务器 元数据除了包含单个文件的属性和标签之外,我们还可以用来存储目录结构等
-
对象存储设备 对象存储设备,是存储的核心部件,除了提供数据的物理存储外,还需要具备:负载管理,多副本管理,容灾等。
开源项目参考
云厂商的对象服务这里就不介绍了,避免大家说时在打广告。指北君以开源为基础,介绍几个热门的可以支持对象存储的开源项目,我们也可以利用开源项目自行搭建自己对象服务
- HBase MOB
HBase MOB采用Hbase+HDFS的设计方式,分别用以存储元数据和文件数据。在针对不同大小规模的文件时,采用了不同的处理方式。文件首先缓存在memstore里,然后被写入特殊的HFile文件— “MOB File”。每个文件有多个MOB入口。MOB file使用独立的region存储,通过Hbase API进行读写。
- Swift
Swift是一个高可用的、分布式的、最终一致的对象存储。可以使用Swift高效、安全、廉价地存储大量数据。它是为扩展而构建的,并针对整个数据集的持久性、可用性和并发性进行了优化。Swift非常适合存储无约束增长的非结构化数据。
官方文档:https://docs.openstack.org/swift/latest/overview_architecture.html
- Minio
MinIO是一个高性能、原生支持Kubernetes的对象存储套件,可应用于公有云,私有云和混合云等复杂场景的构建。Minio基于 Apache 2.0 许可协议,采用 Go语言实现。
官网:https://min.io/
总结
关于怎么处对象指北君进行就分享到这里了,小伙伴特别是单身的小伙伴赶紧行动起来!
我是指北君,操千曲而后晓声,观千剑而后识器。感谢各位人才的:点赞、收藏和评论,我们下期更精彩!