TOS对象存储实战 | 青训营

119 阅读5分钟

1. 对象存储基本介绍

1.1 存储系统分类

  1. 单机系统:文件系统、Key-value存储;
  2. 单机数据库:关系型数据库、非关系型数据库;
  3. 分布式数据库:关系型数据库、非关系型数据库;
  4. 分布式存储:分布式文件系统、对象存储

1.2 分布式文件系统 vs 对象存储

分布式文件系统
海量:支持PB->EB海量存储;文件数量受Name Node限制。
易用:接口开发复杂;非云原生,搭建维护麻烦;视频/图像相关生态接入略复杂。
便宜:使用普通的x86服务器,成本低。
对象存储
海量:支持>EB海量存储;对象数量无限制。
易用:Restful接口,开发简单;云原生,按需申请使用;视频/图片相关生态丰富。
便宜:使用普通的x86服务器;具备冷热数据分级存储能力,成本更低。

1.3 对象存储-数据结构

Bucket:存储对象的桶。
Object:数据对象,每个数据对象包含key、Meta Data、Data。
key:数据对象的名字,可类比Map的key。
Data:对象的内容,例如视频/图片内容。
Meta Data:对象的元信息,例如大小....

image.png

1.4 对象存储使用场景

对象存储
适用场景:存储视频、图片、文本、安装包、备份等静态资源。
不适用场景:商品订单、缓存、在线编辑、频繁更新等数据。

2. 对象存储使用方法

2.1 对象存储使用

  1. 申请Bucket;
  2. Restful接口。对象存储对外提供的是Restful风格接口,通过PUT、GET、HEAD、DELETE等实现存储数据的操作。

2.2 MultiUpload接口

上传数据时,有时会面临上传数GB的大视频资源,这类数据往往会因为网络等原因,会上传失败。此时,可利用MultiUpload解决(三步上传),三步上传主要针对那些网络环境不好(传着传着就断了),或者上传的文件大于5GB,普通的上传方式满足不了的上传。三步主要为initUploadId、上传分块、完成上传。

  1. 初始化uploadID。客户端InitMultiUpload,服务器端根据客户端提供的bucket,object等信息生成在Bucket内唯一的Uploadid,并且将Uploadid返回给客户端。
  2. 上传分片。客户端:上传分片,并提供partNumber。服务器端:服务器端将文件PartData按照Object的逻辑去存储,并检查当前PartNum为接续块或重新上传的块,每个Part上传时的快照信息保存在PartData Object的Meta数据中。返回给客户端已上传数据的MD5信息,以便校验已上传数据的完整性。
  3. 完成上传。客户端提交Bucket、Object、Uploadid、PartList给服务器端。服务器检查每一个已上传的PartData Object的Meta并合并最终的SliceList。如正确,则根据收集到的SliceList、UserMeta信息生成Meta数据写入Meta表。

2.3 Listprefix接口

查看Bucket中的数据对象时,使用分页列举接口:ListPrefix。

  1. ListPrefix参数
    prefix:key前缀; delimiter:分隔符、默认为/
    max-keys:本次分页数量;
    start-after:分页起始对象key;
  2. ListPrefix返回 common-prefix:共同前缀;
    objects:对象key列表;
    isTurncated:是否已经列举完;

3. 开发一个对象存储

3.1 三次架构

接入层:接入解析并处理接口请求;
元信息层:存储对象元信息;
存储引擎层:存储对象内容;

image.png

3.2 梳理业务场景

image.png

3.3 问题解决

3.3.1 Partition-解决可扩展性问题

分而治之
分布式存储 = 分布式 + 单机存储
分布式存储:存储均匀分布、计算均匀分布、压力均匀分布。
每个节点负责一小部分数据的存储和计算。

持久度隐患原因

  • 不可靠的硬件
  • 不可靠的软件
  • 自然灾害

3.3.2 Replication复制

数据复制多个副本,达到高持久度、强吞吐能力。
副本放置策略

  1. 多机架:可抵抗机架级别故障;
  2. 多机房:可抵抗机房级别故障;
  3. 多Region:可抵抗Region级别故障;

3.3.3 EC-成本解决法

Replication虽然能解决持久度问题,但是多副本拷贝使得成本变高。
EC(Erasure Coding)冗余编码:可达到和多副本一样的持久度。是一种数据保护方法,它将数据分成片段,把冗余数据块扩展、编码,并将其存储在不同的位置,比如磁盘、存储节点或者其它地理位置。 特点:地冗余度,但会增加额外的编码和计算。

3.3.4 冷热转换-成本解法

根据数据查询调用的频率可将数据分为冷/热数据,热门数据存入SSD等高性能存储介质,对冷门数据分配至性能更差、更廉价的存储介质。

4. 总结

今天学习了对象存储知识,它所呈现出来的是一个“桶”(bucket),用户可以往“桶”里面放对象(Object),对象包括三个部分:Key、Data、Metadata。一般我们认为对象存储是指对于给定的唯一的key,获取对应的value,这是一种map的数据结构,但这里的map指带的是路由的map,非本地基于内存的数据映射,因为路由经常是分布式系统需要重要考虑的因素,也是影响性能的重要因素。如果从终端用户的角度看待对象存储,那么这个key就是一个filepath,或者存储系统中的url,而value就是文件内容。随着云计算、大数据、社交网络高速发展,非结构化数据呈爆炸式的增长。对象存储以无限扩容、扁平化结构的特点,成为目前最常用的存储技术,为企业数字化提供更灵活便捷的底层IT基础设施。