学习笔记
1.对象存储概述
1.1 存储技术对比:
维度 | 块存储 | 文件存储 | 对象存储 |
---|---|---|---|
适用范围 (网络边界) |
数据中心内 | 数据中心内 | 互联网、移动互联网(3G/4G/5G) 数据中心内 |
使用者 (用户) |
机器 | 办公帐号(AD/LDAP) 机器 |
云账号、社交帐号 兼容办公帐号 机器 |
访问协议/接口 | 快协议 (ATA/SCSI) |
文件协议 (NFS/CIFS/SMB) |
对象接口 (S3/Blob/OSS) |
后端技术 | Drive、DAS、SAN | File System、NAS | Object Storage |
特点 | 机机交互 | 人机交互 机机交互 |
移动互联网交互 人机交互 机机交互 |
后端技术:
块存储:采用线性地址空间管理地址块,为主机提供指定容量空概念的访问。
文件存储:使用树来管理目录和文件的层级结构,目录类似树的中间节点,文件类似书的叶子节点,从而实现灵活的文件管理。
对象存储:采用桶和对象模型,在桶内采用平坦模式管理对象,提供线性扩展能力。
1.2 存储技术架构
存储区域网络(SAN Storage Area Network)--块存储
网络附加存储(NAS Network Attached Storage)--文件存储
对象存储架构(Object Storage)
1.3 公共云对象存储服务
1.3.1 架构
3层架构(基于分布式文件系统构建)
逻辑视图(从下到上):分布式文件系统(HDFS)、索引元数据(分布式键值存储,如HBASE)、对象服务功能 -----Google Cloud Storage、Aliyun OSS
2层架构(基于本地键值存储构建)
逻辑视图(从下到上):分布式键值存储、对象服务功能 ----Ceph
1.3.2 关键能力
按优先级从高到底:
安全性:数据加密
高可靠:协调和复制,容错和数据完整性
高可用:数据保护
扩展性:命名和同步,元数据索引设计,数据迁移
性价比:数据生命周期
2.协调(Coordination)和复制(Replication)
在分布式系统中通过协调达成共识是普遍需求,部署在多台服务器间的进程都需要通信协调将关键数据达成一致。两将军首次提出不可靠网络的共识问题,然后演化为存在拜占庭故障的拜占庭将军问题,通过对问题的分析提出原子广播解决方案(Atomic Broadcast,ABCAST),鉴于原子广播无法支撑数据持久化能力,业界提出改进优化的视图复制(Viewstamped Replication,VR)和PAXOS,鉴于PAXOS的理论复杂度,业界又提出RAFT,它将PAXOS用更简单的方式描述,同时参考VR的工程实现优化。
共识技术要支持数据持久化能力会用到日志复制技术,而分布式存储系统需要做数据冗余也需要实现数据复制。
2.1 协调
两将军问题,采用固定次数的消息确认,解决通信网络不可靠时的共识问题。----TCP/IP三次握手
拜占庭将军问题,两种解决。1)根据分布式系统的服务器总数,限定发生拜占庭故障的服务器数。2)根据数字签名识别伪装的服务器,或根据序列号识别亚健康服务器的错误消息
共识算法解决的核心问题是系统成员正常时如何解决多个请求提案的顺序处理问题并保证每个提案能够被系统成员投票达成一致,以及系统成员异常时如何重新选取成员并让系统重新进入正常状态。
VR 架构包含副本和客户端
VR在发生成员故障后,会在正常的副本中选主:
- 选主是基于日志做恢复。
- 选主会基于视图的逻辑时钟序号和日志顺序号完成。
- 客户端复制代理发送请求时会携带缓存的视图序号,主会比对本地视图序号和请求视图序号,只有相同才允许执行,从而避免视图切换时请求到不匹配的数据。
PAXOS 架构组件:客户端,接收者(Accepter/Voter),提案者(Proposer),学习者(Learner),领导者(Leader)
VR的副本和PAXOS的成员(提案者、接收者、学习者)对应,VR的主和PAXOS的领导者对应。VR用重配置(Reconfiguration)重新选主,PAXOS用提案者扮演领导者实现选主。
阿里云对象存储依赖女娲共识服务。
2.2 复制
2.2.1数据冗余技术:副本;RAID;纠删码。
2.2.2一致性
两个术语:
-CAP:C一致性(Consistency,读请求应该得到最新写入数据,或者返回错误),A可用性(Availability,读/写请求尽量得到响应,读可以不用返回最新写入数据),P表示分区容错能力(Partition tolerance,网络节点丢包后系统能够继续工作)。常用于分布式系统,最终一致性(BASE)选择满足A和P而牺牲C。
-ACID:常用于数据库系统。
一致性模型:
-客服端一致性模型
-服务端数据副本一致性模型
2.2.3复制协议
-基于主复制协议
至少2跳,第1跳由客户端发送请求给主,第2跳由主并行将请求发给多个副本。时延长,无并发冲突。
-客户端写复制协议
1跳,客户端并行发送给多个副本。时延短,有并发冲突。
2.2.4存储领域的复制技术
SAN/NAS的复制技术
按复制时间点分为基于快照的复制和基于IO日志的复制。
按复制位置分为同步复制和异步复制。
对象存储的复制技术
CEPH的对象存储构建在底层RADOS(Reliable Autonomic Distributed Object Store)技术上,其核心是基于OSD(Object Storage Device)的数据复制。OSD基于主复制协议。
3.命名和同步
对象存储通过命名技术管理分布式系统的海量服务器,通过物理时钟实现大规模服务期间的时钟同步,通过逻辑时钟实现大规模服务器间的时序、数据同步。
3.1 命名
对象存储综合应用了结构化命名、平坦命名,基于属性命名技术。
-平坦命名(非结构化命名):IPV4(32位)/IPV6(128位)、MAC地址(48位)、UUID(128位)。
-结构化命名:URL。(类似树形结构)
-基于属性命名:情形目录访问协议(Lightweight Directory Access Protocol,LDAP),记录多维度属性。
例子:
客户端请求访问“image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg”对象时:
(1)DNS域名解析:解析URL的主机名image-demo.oss-cn-hangzhou.aliyuncs.com,得到对象存储主机的IP地址。
(2)客户端将请求包发送到指定IPv4地址的机器(服务器X),同时包含完整的URL名。X将请求和URL发送到对象存储的后端服务器(服务器B)。
(3)服务器B通过传入的URL得到对象名example.jpg,按照平坦空间寻址方法(按范围分区的字节比对查找和按哈希分区的计算查找)找到数据所在硬盘的UUID。
(4)根据对象名example.jpg对应的硬盘的UUID,就可以取回数据。
(5)对象存储支持标签功能。标签按照基于属性命名技术组织,提供Key-Value键值对,为对象提供更多维度的信息。
3.2 同步
3.2.1 物理时钟
对象存储云服务中的服务器之间通常基于网络时间协议(Network Time Protocol, NTP),即基于网络包交换实现计算机系统间的时钟同步协议,位于OSI模型的应用层。
3.2.2 逻辑时钟
对象存储通常使用逻辑时钟来提供序号,为多节点的交互控制提供时许控制,保证请求的顺序性。
例子:
CEPH对于并发写请求,通过主OSD的ObjectStore::Sequencer递增序号来实现逻辑时钟,为每个客户端发送过来的写请求分配序号,然后主OSD将写请求复制到多个从OSD,并使用该序号作为并发请求的先后顺序,保证请求在多个从OSD上的顺序性。
4.容错和数据完整性
容错设计提升系统可用性,数据完整性提升系统的数据持久度。
4.1容错
容错(Fault Tolerance)是指部件出现故障后,系统仍然能够继续工作。
分布式系统的容错设计与存储区域网络(SAN)和网络附加存储(NAS)的双控(Dual Controller)系统容错思路不同。“不再通过单服务器内部件冗余提升可靠性,而是搭建多服务器系统使整体达到高可靠性”。
4.2数据完整性
Data Integrity: Secure(物理层面的安全),Accurate、Consistent、Complete(逻辑层面的正确、一致、完备)
从物理完整性看,要通过类似纠删码(Erasure Code,EC)的冗余技术来实现数据损坏的修复;从逻辑完整性看,要通过业务、应用层的保护机制实现数据损坏的修复,如数据复制和备份。
对象存储数据损坏:
运行时刻时通过端到端的循环冗余校验检测数据损坏:数据上传时;数据存储时校验数据和元数据(分片保存);写入磁盘前。
静态时刻时利用磁盘上的分布式存储模块(如HDFS)进行静态数据扫描,读取保存的数据和保存校验值,然后CPU通过计算保存数据得到计算的校验值,两个校验值比对。
5.元数据索引设计
元数据索引是为公共云对象存储服务提供键值管理的核心技术,它需要提供变长的空间管理和弹性扩展能力。
对象存储的元数据管理的关键在于存储空间(Bucket)/对象(Object)的写/读/删除/遍历操作,没有复杂查询需求。
几种NoSQL数据模型对比:
数据模型 | 性能 | 拓展性 | 灵活性 | 复杂度 | 功能性 |
---|---|---|---|---|---|
键值存储 | 高 | 高 | 高 | 低 | 可选择性实现 |
列存 | 高 | 高 | 中 | 低 | 最简单 |
文档存储 | 高 | 高 | 高 | 低 | 可选择性实现 |
图存储 | 可调整性能 | 可选拓展 | 高 | 高 | 图理论 |
键值存储通常采用树来组织键名,从而既支持读/写/删除操作,又友好支持遍历操作。通常采用树组织键名的顺序为字典序,可以按照字母顺序遍历键名。
键值存储基于CAP理论选择牺牲C(Consistency)、优化A(Availability)和P(Partition tolerance),从而可以选择实现从最终一致性(Eventual Consistency)到串行一致性(Serializability)的不同一致性模型。
6. 无
明确几个概念
存储空间(Bucket)是用户用于存储对象(Object)的容器,即“桶”。所有对象都必须隶属于某个存储空间。它具有各种配置属性,包括地域、访问权限、存储类型等。
- 同一个存储空间的内部是扁平的,没有文件系统的目录等概念,所有对象都直接隶属于其对应的存储空间。
- 每个用户可以拥有多个存储空间
- 存储空间的名称在对象存储服务范围内全局唯一,并且创建后无法修改存储空间的名称。
- 存储空间内部的对象数目没有限制。
对象(object)是对象存储服务存放数据的基本单元,也被称为对象存储服务的文件。对象由对象名(Key)、用户数据(Object Data)和元数据信息(Object Meta)组成。对象由存储空间内部唯一的对象名来标志,元数据信息是一组键值对,表示对象的属性,如最后修改时间、大小等信息,也可以自定义存储信息。
对象的生命是从上传成功到删除为止的,只有通过追加上传方式创建的对象能够不断增加数据内容,其他上传方式创建的对象无法直接修改写,但可以通过重复上传同名的对象来覆盖之前的对象。
访问域名(Endpoint)表示对象存储服务器对外提供的域名,对象存储服务以HTTP/HTTPS的RESTful API形式对外提供服务,当访问不同地域的时候,需要不同的域名,通过内网和外网访问对象存储OSS相同地域所对应的访问域名并不相同。
7.数据迁移
镜像回源
镜像回源功能,在业务读取OSS数据不存在时,将从源站抓取数据。
步骤如下:
- 迁移存量数据
- 配置镜像回源:在数据迁移过程中源站还在产生新数据
- 业务切换到OSS
- 迁移增量数据
8.安全与合规
数据加密
- 服务端加密(Server Side Encryption,SSE),是指上传到云的链路是明文,数据保存是密文,从而保证存储数据的私密性的一种加密技术。技术上,对象存储OSS对收到的用户数据进行加密,然后将得到的加密数据持久化保存下来:下载数据时,OSS自动对保存的加密数据进行解密并把原始数据返回给用户,并在返回的HTTP请求Header中,对象存储声明该数据进行了服务端加密。
- 客户端加密(Client Side Encryption,CSE),是指为进一步加强私密性,在上传到云之前就进行加密,整个上云的链路、数据保存都是密文的一种加密技术。客户端加密需要客户端来管理加解密的密钥,服务端只把数据作为普通对象保存。客户端加密的安全性更高,但对客户端有较大性能影响。
9.数据保护
数据持久性
数据持久性同时考虑了数据故障率。数据错误率,如11个9的持久性,就表示一万年的时间期限内,10MB数据只有1B数据有异常,表示该1B数据出现故障丢失或数据错误。
服务可用性
对象存储OSS基于请求错误率模型提供可用性SLA,其标准型(同城冗余)存储的可用性SLA已经提升到99.995%。就是10万个请求中,最多只有5个请求返回服务端错误。
版本控制
三种控制状态:
- 未开启
- 开启 对象存储OSS将为新上传的对象生成全局唯一的随机字符串版本ID
- 暂停 对象存储OSS将为新上传的对象生成特殊字符为“null”的版本ID
10.应用与实战
对象元信息
分为两种:HTTP标准属性(HTTP Headers)和User Meta(用户自定义元信息)
元信息 | 名称 | 描述 |
---|---|---|
Content-Type | 指定对象的文件类型、编码等 | |
Content-Encoding | 指定对象的压缩类型 | |
Content-Language | 指定对象使用的语言 | |
HTTP标准属性 | Content-Disposition | 指定对象的展示形式incline/attachment |
Cache-Control | 指定对象缓存配置 | |
Expires | 指定对象有效时间 | |
Last-Modified | 最后修改时间 | |
Content-Length | 大小 | |
User Meta | 以x-oss-meta-为前缀的参数 | 总大小不超过8KB,会在读对象(GetObject)或读对象元数据(HeadObject)的时候在HTTP头部中返回 |
数据生命周期
生命周期规则可以定期将非热点数据转换为低频访问、归档存储或冷归档存储,将不再需要访问的数据删除,从而使用户更高效地管理数据、节省成本。
生命周期规则包含以下三类信息:
-
匹配策略,匹配对象的名字、标签。
-- 按前缀匹配,按指定前缀匹配对象和碎片。
-- 按标签匹配,按指定标签的Key和Value匹配对象。
-- 按前缀+标签匹配,按指定前缀和一个或多个标签的筛选条件匹配对象。
-- 配置到整个存储空间,匹配整个存储空间内的所有对象和碎片。 -
文件过期策略,设置对象的过期时间。
-- 过期天数,指定一个过期天数N,对象会在其最后修改时间的N天后过期。
-- 过期日期,指定一个过期日期,最后修改时间在该日期之前的对象全部过期。 -
指定操作,设置文件过期后的动作。
--类型转换(Transition),将指定存储类型的对象转换为另外的存储类型。
--过期删除(Expire),将指定存储类型的过期对象按规则删除。
示例:
<LifecycleConfiguration>
<Rule>
<ID>test-rule0</ID>
<Prefix>doc/</Prefix>
<Status>Enabled</Status>
<Transition>
<Days>180</Days>
<StorageClass>IA</StorageClass>
</Transition>
<Expiration>
<Days>365</Days>
</Expiration>
</Rule>
<LifecycleConfiguration>
上传对象
简单上传
表单上传
-
分片上传和断点续传
追加上传
对象存储OSS的对象只能读取,不能修改。如果对象内容发生改变,只能重新上传同名对象进行覆盖。
追加上传方式对象类型为Appendable Object(其他上传为Normal Object),每次追加上传的数据都能够即时可读。
- 授权第三方上传
客户端直接上传文件到OSS,不需通过服务端转发。两种实现方式:URL签名和临时访问凭证。 - 上传回调
客户端上传对象到OSS后,OSS会向服务端主动发起HTTP请求进行回调,从而服务端就可以及时得到上传完成的通知并完成诸如数据库修改等操作,OSS收到服务端的回调请求响应后才会将状态返回给客户端。 - RTMP推流上传