对象纯处

大家好,我是指北君,为回馈大家一致以来的热情,指北君今天掏压箱底的私货来教授小伙伴们怎么处对象,是纯处?那怎么行呢,俗话说得好那什么不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)操作

实现架构

为便宜理解,这里简单列出对象存储的主要逻辑组成部分:

对象存储的架构组成

从图中可以看到对象存储包含三个主要部分:

  • 客户端 访问对象存储的客户端工具,提供传统的文件系统接口方便访问以及其客户端方式的接口访问等

  • 元数据服务器 元数据除了包含单个文件的属性和标签之外,我们还可以用来存储目录结构等

  • 对象存储设备 对象存储设备,是存储的核心部件,除了提供数据的物理存储外,还需要具备:负载管理,多副本管理,容灾等。

开源项目参考

云厂商的对象服务这里就不介绍了,避免大家说时在打广告。指北君以开源为基础,介绍几个热门的可以支持对象存储的开源项目,我们也可以利用开源项目自行搭建自己对象服务

  1. HBase MOB

HBase MOB架构(图片来之官网)

HBase MOB采用Hbase+HDFS的设计方式,分别用以存储元数据和文件数据。在针对不同大小规模的文件时,采用了不同的处理方式。文件首先缓存在memstore里,然后被写入特殊的HFile文件— “MOB File”。每个文件有多个MOB入口。MOB file使用独立的region存储,通过Hbase API进行读写。

  1. Swift

Swift架构

Swift是一个高可用的、分布式的、最终一致的对象存储。可以使用Swift高效、安全、廉价地存储大量数据。它是为扩展而构建的,并针对整个数据集的持久性、可用性和并发性进行了优化。Swift非常适合存储无约束增长的非结构化数据。

官方文档:https://docs.openstack.org/swift/latest/overview_architecture.html

  1. Minio

Minio架构(图片来之官网)

MinIO是一个高性能、原生支持Kubernetes的对象存储套件,可应用于公有云,私有云和混合云等复杂场景的构建。Minio基于 Apache 2.0 许可协议,采用 Go语言实现。

官网:https://min.io/

总结

关于怎么处对象指北君进行就分享到这里了,小伙伴特别是单身的小伙伴赶紧行动起来!

我是指北君,操千曲而后晓声,观千剑而后识器。感谢各位人才的:点赞、收藏和评论,我们下期更精彩!

Java Geek Tech wechat
欢迎订阅 Java 技术指北,这里分享关于 Java 的一切。