技术架构

UDB-TO由 元数据子系统(Metadata Subsystem) ,数据子系统(Data Subsystem) 和 资源管理节点(Master) 以及 对象网关(Object Subsystem) 组成,可以通过POSIX/S3接口访问存储数据。
资源管理节点
由多个Master节点组成,负责异步处理不同类型的任务,如管理数据分片与元数据分片(包括创建、删除、更新以及一致性检查等),检查数据节点或者元数据节点的健康状态,维护管理卷信息等。
Master节点可以有多个,节点之间通过Raft算法保证元数据的一致性,并且持久化到RocksDB中。
元数据子系统
由多个MetaNode节点组成,多个元数据分片(Meta Partition)和Raft实例(基于Multi-Raft复制协议)组成,每个元数据分片表示一个Inode范围元数据,其中包含两个内存B-Tree:inode BTree与dentry BTree。
元数据实例最少需要3个,支持水平扩容。
数据子系统
分为副本子系统和纠删码子系统,两种子系统可同时存在:
副本子系统由 DataNode 组成,每个节点管理一组 数据分片,多个节点的数据分片构成一个副本组;
纠删码子系统(Blobstore)主要由 BlobNode 模块组成,每个节点管理一组数据块,多个节点的数据块构成一个纠删码条带。
数据节点支持水平扩容。
对象子系统
由对象节点组成,提供了兼容标准S3语义的访问协议,是一个S3协议网关,第三方应用通过S3协议访问存储系统的入口,通过Amazon S3 SDK或者是s3cmd等工具访问存储资源。
纠删码子系统
纠删码子系统通过将文件划分为数据块和校验块并分布存储在不同节点,实现了在减少存储开销的同时保证高可靠性。与传统三副本机制相比,纠删码可降低 30%~70% 的存储成本,并能在部分节点或数据丢失时通过校验块恢复数据。
卷
逻辑上的概念,由多个元数据和数据分片组成,从客户端的角度看,卷可以被看作是可被容器访问的文件系统实例。从对象存储的角度来看,一个卷对应着一个bucket(桶)。一个卷可以在多个容器中挂载,使得文件可以被不同客户端同时访问。