table和存储节点间的关联关系(拓扑信息)
通过这些信息,我们可以建立如下映射关系
- 在逻辑层,我们可以做这样的映射: (table_name, key) -> shard -> [replica0, replica1, replica2]->[addr0, addr1, addr2]
- 在物理层,集群由多个资源池组成,每个资源池由多个可用区构成,每个可用区由若干台服务节点(DataNode)构成。每个服务节点管理若干块磁盘
- replica最终对应到某个服务节点(DataNode)上的某个磁盘上的一个存储单位
新的架构
Day8回顾整个存储系统,可以发现目前S3元数据存储和object_id的生成还是单点,今天我们来解决这个问题。
元数据量级:
- 假设在S3元数据侧,每个对象需要100Byte进行描述(文件名、objectId等)
- 假设单个object大小为100KB,总存储规模为100PB,则对应的元数据空间为100T级别 (100PB/100KB * 100Byte)
- 假设单个object大小为10MB,总存储规模为1000PB,则对应的元数据空间为T级别 (1000PB/10MB * 100Byte = 10TB)
可见,对于一个大规模存储集群,通过元数据的提取和压缩,元数据完全可以使用一个小规模的NewSQL或者分布式KV进行存储。
新架构
在S3元数据侧引入新的元数据存储,修改后的架构如下图所示。
Day9目前object_id的使用MySQL的自增ID生成,存在单点。对于object_id的需求,我们只需要全局唯一,不需要递增。可以使用如下两种方案: