美团分布式存储底座MStore
如果无法正常显示,请先停止浏览器的去广告插件。
1. 美团分布式存储底座MStore
2022年7月
1
2. 个人介绍
张彪,美团技术专家,7 年分布式存
储研发经验
2019年底加入美团,目前从事MStore
MetaServer相关研发工作
2
3. 目录
背景
整体架构
重要特性
应用与实践
未来规划
3
4. 背景
提升存储扩展能力 降低存储成本
降低重复研发成本 满足多样化的存储需求
现有的数据库/存储集群,如果计算资源达到瓶颈需要扩
容,仍然需要迁移数据,对于数据量较大的业务,扩容
操作时间很长
很多PaaS和业务系统都有数据存储的需求,由于公司目
前没有 套统 的底层存储可复用,需要各个组件自己
设计并研发数据存储功能,解决数据副本冗余、
failover、数据同步 致性等复杂的通用存储技术问题,
存在较多的重复建设工作
当前各分布式存储产品架构由于不是存储计算分离架构,
经常会因为存储或计算的资源瓶颈而需要扩容,进而造
成另一方面资源的更大浪费,不能充分利用计算或存储
资源
目前的KV存储、对象存储、块存储服务,不能很好的
满足业务多样化的存储需求。例如块存储由于技术特
性限制,不能支持多个客户端共享访问,这种场景需
要分布式文件存储来支持
高可用、高性能、高可扩展的分布式存储底座服务
4
5. 整体架构
5
6. 核心设计目标
分布式文件存储 分布式对象存储 消息队列 搜索
分布式块存储 分布式KV 传统数据库 分布式数据库
高可靠 高可用
高性能 高可扩展
采用多副本技术,至少保证在一台机器或一个机房不可
用的情况下,数据仍不丢失
利用新一代软硬件结合技术,包括SPDK、RDMA等,
充分发挥新硬件能力,提供极致IO性能
为上层PaaS层提供统一存储,赋能上层在迁移时的零数
据丢失及秒级切换能力;支持跨AZ部署,提供AZ容灾能
力;单节点机器失效无感知
集群规模可扩展至数万节点,元数据支持水平扩展
MStore
6
7. 相关概念
• Blob(Binary Large Object):用户访问MStore的基本单位
• Chunk:MStore数据存储基本单元,一个Blob可以由多个Chunk组成,Chunk默认大小为64MB
• Replica:副本,一个Chunk可以有多个副本
• LogBlob:只支持追加写的Blob类型,一个LogBlob可包含多个Chunk
• ExtentBlob:支持随机写的Blob类型,一个ExtentBlob仅包含一个Chunk
• PhysicalPool:在机器物理特性上一致或相近的一组数据存储节点的集合,不同PhysicalPool中的数据存储节
点物理隔离
• LogicalPool:对应于一个租户,一个LogicalPool中的数据存储于一个PhysicalPool中。任意一个Blob都属于某
一个LogicalPool
7
8. 整体架构
8
9. 基本读写流程
写流程
9
10. 基本读写流程
读流程
10
11. 重要特性
11
12. 重要特性
• 高性能
• 高可靠、高可用
• 高可扩展
12
13. 高性能
• 数据及请求拆分
• Client读写策略优化
• ChunkServer高性能
• RDMA
• Client与ChunkServer间读写支持RDMA
13
14. 高性能
数据及请求拆分
subreq(off, len1)
request(off, len)
Clien
t
subreq(off2, len2)
……
subreq(offx, leny)
off,len
Blob
Chunk3 CS
1
Chunk2 Chunk3 CS
2
Chunk1 Chunk2 Chunk3 CS
3
Chunk1 Chunk2
Chunk1
CS
4
14
15. 高性能
Client读写策略优化
•
t1
•
Backup read
read
()
read()
读副本择优
Clien
t
(AZ1)
t3 t4
t2
req1
写请求合并
time
CS1
(AZ1)
req1(bak)
•
t5
req2
CS2
(AZ2)
CS3
(AZ3)
15
16. 高性能
ChunkServer高性能
•
写请求合并
•
•
合并多次连续的写请求,单次写盘
Raw FS
裸盘系统+SPDK
Block Device
Device
16
17. 高可靠、高可用
• 数据分布
• 读写异常处理
• 数据恢复
• Rebalance
• QoS
• 支持以租户(LogicalPool)为粒度的QoS
• 支持数据复制流量的QoS
17
18. 高可靠、高可用
数据分布
LogicalPo
ol1
(HOST)
LogicalPo
ol2
(AZ)
PhysicalPool1
PhysicalPool2
AZ1
CS1
chunk
y
CS1
chunk
x
CS1
chunk
y
CS2
chunk CS3
chunk
CS2
chunk CS3
z
y
CS2
chunk
z
CS1
CS2
chunk
x
chunk
z
CS3
chunk
x
AZ2
x
CS3
chunk
AZ1
CS1
CS5
CS2
chunk
x
CS3
AZ3
CS4
chunk
x
chunk
x
CS5
AZ2
CS2
chunk
x
CS3
CS6
chunk
x
AZ2
AZ1
CS1
CS4
x
AZ3
CS6
AZ3
CS4
chunk
x
CS5
CS6
chunk
x
18
19. 高可靠、高可用
读写异常处理
• LogBlob Chunk快速切换 • SDK读时异常副本规避 CS1
• 元数据节点重定向 CS2
chunk2
chunk1
切换
chunk3
DISCONNECTING
CS3
CS4
CS5
19
20. 高可靠、高可用
数据恢复
• ChunkServer宕机、断网等导致不可用
• 磁盘只读等导致的磁盘不可用
• 磁盘坏块
• 主动下线ChunkServer、磁盘
•
LogicalPool配置变更
chunkx chunkx
chunky chunky
chunkx chunkx
chunky chunky
20
21. 高可靠、高可用
Rebalance
•
自动Rebalance
•
•
磁盘剩余空间感知
•
•
集群扩容
根据周期性心跳中的磁盘剩余空间情况动态调整数据迁入和迁出流
数据复制+删除
•
•
与数据恢复一样,均通过数据复制的方式完成,优先级低于数据恢复
数据搬迁后删除冗余副本
21
22. 高可扩展性
ChunkServer平滑扩容
•
•
理论上单集群可支持数万台ChunkServer
扩容不会导致大量数据搬迁,对读写影响小
磁盘动态上线
•
无需重启ChunkServer进程即可实现单机磁盘扩容
多MetaServer组
•
不同MetaServer组可共同管理相同的ChunkServer
22
23. 应用与实践
23
24. EBS on MStore
容器场景组件已接入
vdisk
Client
BlockServ
er
MStore
Client
segment1
BlockServ
er
MStore
Client
WAL
WAL
segment2
segment3
Seg
met
a
entry entry entry
LogBlob
ExtentBlob
MStore集
群
24
25. EFS on MStore
搜索场景、数据同步场景业务已接入
mount point
dir1
Client
file1
DataServ
MStore
er
Client
DataServ
MStore
er
Partition1
SST
(LSM-Tree)
file2
manife
st
Partition2
SST
(LSM-Tree)
manife
st
Client
Extent Map
LogBlob
ExtentBlob
MStore集
群
25
26. 工程实践
• 质量保障
• 监控告警
•
•
•
•
接口级别监控
多类目指标:性能、容量、内部状态
Trace:从业务侧至服务端的跨服务
Trace
告警:服务状态、性能、容量——
daily、weekly治理
混沌测试
长期运行
每周运行
•
代码质量
•
•
•
•
Clang-format (google c++ style)
静态代码检查:集成至PR流水线
PR至少2个reviewer通过
增量代码单元测试行覆盖率>=90%
每日运行
PR触发
长
稳
测
试
压力测试
稳定性测试
性能
测试
集成测试
单元测试
26
27. 未来规划
27
28. 未来规划
• 二三异步写
• RTC
• io_uring
• EC
• 元数据备份
• Scrub
• 更加丰富的长稳测试场景
28
29. Q & A
29
30. 更多技术干货
欢迎关注“美团技术团队”
30