1.论文名称
Windows Azure Storage:A Highly Available Cloud Storage Service with Strong Consistency
2. 产品简介
WAS (Windows Azure Storage) 是微软提供的强一致且高可用的云存储服务,几乎所有Azure产品都依赖于WAS。
3. 基础教程
参考微软存储官网
4. WAS设计目的
- 高可用且强一致性
- 持久性
- 可扩展性
- 可扩展全球命名空间
- 全球容灾
- 统一存储
- append only
5. WAS架构
- 用户通过其他云产品来使用WAS(如ECS、对象存储、表格存储、消息队列等)。通过URL来访问WAS服务。
WAS整体系统由Storage Stamps和Location Service两部分组成
5.1 Location Service
Location Service用于管理Storage Stamp,在Storage Stamp之间进行容灾恢复和负载均衡,并且负责全局命名空间管理。同时也负责将用户的请求分发到距离其最近的数据中心。
5.2 Storage Stamps
storage stamps分为FE layer,stream layer,stream layer三层
- front-end(FE) layer:无状态中间层,接收来自用户的请求,并缓存集群路由信息,分发请求到partition layer。
- stream layer:完整的分布式文件系统,管理底层存储设备,WAS底层数据复制及调度以extent为单位。向上为partition layer提供接口,stream layer只提供append接口,不支持overwrite in place。
- stream layer:作为统一的存储抽象层,将所有的产品统一为通用存储需求并与Stream Layer对接
其他概念:
- DNS:根据AccountName查找其所在的StorageStamp,LocationService决定了AccountName所属的StorageStamp后会将该信息同步至DNS
- VIP:虚拟ip层,负责将请求负载均衡至各前端接入层节点
- Intra-Stamp Replication (stream layer),这里保证数据在一个stamp之内的持久化。其复制操作是同步的。这里会将数据跨结点和fault domains来保持数据的可用性。由于这里是同步的复制,且在client写请求的关键路径上面,这里只有在复制成功之后才可以给client返回成功的信息,所以这里实现低延时的操作很关键。
- Inter-Stamp Replication (partition layer),这里的复制是stmap之间的异步的复制。复制操作在后台完成,不在client写请求的关键路径之上。这里的复制是对象级别的复制,与此对应的Intra-Stamp的复制则是复制数据block。
6. Stream Layer设计
6.1 stream数据组织
以Stream Layer存储Foo文件为例:
- Foo文件由多个extent组成,extent由多个block组成。单个Extent和Block的大小均有上限。数据以Extent为单位进行复制
- Block是数据读取写入的最基本的单元。Block的大小默认是4MB,数据校验也是在Block上。读取根据offset读取完整block.stream存储着每个block的校验和(checksum).
- extent复制备份的最小单元,一个stamp存储中保持Extent的三备份.每一个extent被保存为一个NTFS上面的文件。Extent的目标大小文1GB
6.2 Stream Layer设计
Stream Layer由Stream Manager (SM)和Extent Node (EN)两个主要部分组成。
- SM主要负责:
(a) SM是一个的标准的Paxos集群。维护所有stream,extend和EN的状态,stream namespace,存在内存中,并定期将状态信息checkpoint到文件中
(b) 监测EN的健康状况,
(c) 创建extend数据块并将其分配给 EN,
(d) 对因硬件故障或不可用而丢失的盘区副本执行延迟重新复制,
(e)GC, 回收没有被任何stream引用的extents
(f) 根据stream的相关策略调度EC(scheduling the erasure coding of extent data)
- EN
(a) 只负责存储SM分配的extend.只感知Extents和Blocks的信息。extend为一个磁盘文件。
7. Partition Layer设计
- WAS提供三种存储抽象,分别是表格(Table)、消息队列(Queue)、文件(Blob),WAS存储的每个对象(表格里的一行、队列里的一条消息、一个文件)都对应一个全局唯一的资源URI,其中AccountName为用户账户,service为存储服务类型(table、queue、blob中的一种)。Partition Layer在Stream Layter的基础上抽象出Table、Queue存储逻辑,主要由Partition Manager(PM)和Partition Server(PS)组成
- Partition Layer则是在Stream Layer的基础上实现其它的功能,主要负责的任务如下:
(a) 用于存储的不同类型的对象的数据模型,
(b) 逻辑和语义来处理不同类型的对象,
(c) 用于对象的大规模可扩展命名空间,
(d) 跨可用分区服务器访问对象的负载平衡,以及
(e) 事务排序和访问对象的强一致性。
- PM是管理节点,负责维护一个全局视图,而实际的读写操作都由PS完成。
7.1 Partition Manger (PM)
- Object TablePB级别表。根据负载和请求动态的被分割成多个RangeParitition,分布在一个stamp中的不同的Partition Server上。
- PM 负责将 Object Table 划分为若干个 RangePartition,分配到 PS 中,并将 RangePartition 与 PS 的对应关系记录在 Partition Map Table 中。
7.2 Partition Server (PS)
PS 负责响应若干个 RangePartition 的请求。在任意时刻只会有一个 PS 为一个 RangePartition 服务。
当出现 PS 不可用时,该 PS 负责的所有 RangePartition 会被 PM 迁移到其他的 PS 上。