美团分布式⽂件存储EFS
如果无法正常显示,请先停止浏览器的去广告插件。
1. 美团分布式文件存储EFS
美团基础技术部
2. 自我介绍
• 2015年毕业于华中科技大学
• 2015年入职美团,从事分布式KV缓存Squirrel相关研发工作
• 目前主要负责分布式文件存储相关工作
3. ·EFS简介
目录
·架构设计
·落地实践
·未来规划
4. 01·EFS简介
5. EFS(Elastic File System)
一个兼容POSIX接口、高可扩展、高可用的分布式文件存储服务
EFS支持完全兼容POSIX接口的文件系统语义,完
备的目录树功能以及文件随机读写特性的支持,可以更
方便的让PaaS服务实现其存储计算分离的架构改造。同
时,分层的架构设计中每一个存储引擎对接底层MStore
的所有存储节点,并且对每个文件都进行分片并发处
理,使得它可以轻松实现极高的并发和吞吐,满足高性
能文件存储需求。
ES DTS HULK
EBS EFS ……
MStore
6. Why EFS
缺乏文件系统接口的数据共享存储服务
像客服录音、无人配送地图等业务场景,需要上传之后在多个业务机器共享。对象存储可以做到数据共享,但是不
支持文件系统接口,业务对接成本较高。块存储可以支持文件系统方式访问,但是无法支持多点挂载,做不到数据
共享。
PaaS系统对接MStore完成存储计算分离的成本高
MStore不支持目录树,而且对随机读写的支持并不完备,PaaS对接的研发成本很高。虽然直接对接MStore可以
实现更低的端到端访问延迟,但是对很多延迟不敏感的PaaS来说,如何降低研发成本和系统复杂度才是他们考虑
的重点。
缺乏AI机器学习等场景需要的高性能文件系统
在AI机器学习等业务场景,有许多框架会依赖分布式文件系统来做模型和特征存储,并且在这些场景下,文件系统
的并发和吞吐能力,将直接影响其上任务的运行效率。
7. 02·架构设计
8. 设计目标
文件系统
共享:多点挂载
随机读写
分布式高可用
9. 整体架构
Meta
MetaServer
Client
MetaServer
(主)
Raft
MetaServer
EFS
Data
DataServer
DataServer
MStore
DataServer
MStore
10. Client
Fuse User FileSystem
用户在接入的时候,除了业务本身为了向共享存储做的
代码改造,其他文件系统相关操作无需任何修改。内核
下定制开发文件系统难度较高,在用户空间实现文件系
统开发简单,开发周期短,且方便调试。即使代码有
bug,也不会导致系统崩溃。目前业界开源的文件系
统,moosefs、cephfs、juicefs、chubaofs等都是基
于fuse实现文件系统的接入, 其中cephfs支持内核态的
客户端。
User Application
VFS
FuseLibrary
FuseDriver
Kernel FileSystem
LocalStorage
11. Client
EFS-Client
open(“/mnt/fuse/file”,O_CREATE
|
create():rpc
MetaServer
O_RDWR)
efs_create()
/mnt/fuse
libfuse
User
fuse_create_open()
pipe
Kernel
VFS
Fuse
DataServer
12. Meta设计
元数据存储
Client 侧实现了FUSE 的文件操作接口,但实际上相关的元数据信息都是存储在MetaServer,如何高效的处理文
件系统元数据是首先要解决的问题。
高可用
MetaServer保存了整个文件系统的元信息,它的可用性至关重要;
同时,MetaServer也负责DataServer的高可用调度、生命周期管理。
Placement
作为Client 与 DataServer的桥梁,MetaServer保存了文件具体需要在哪个DataServer上处理的相关信息。
13. MetaServer
Raft组保证元数据的高可用
MetaServer
(主)
RocksDB
MetaServer RocksDB
Raft
元数据KV存储
Client Session管理
MetaServer
RocksDB
DataServer生命周期管理
回收站管理
InodeTable
DirTable
Column Family Key Value
volume {type, mode, uid, …}
i$inode
Column Family Key
volume
Value
d$inode$name {inode, type}
14. MetaServer(回收站)
.trash
• rename 到 trash/current 目录下
• 后台定期将文件归档到分钟级目录(代表什么时候可以直
接删除)
• 回收站内仅支持查看/删除
current
yyyyMMddhhmm
yyyyMMddhhmm
15. MetaServer(Placement)
Volume(Inode 0 ~ ∞)
Volume
Range
Inode(0~100000)
Inode(100000~200000)
GroupIndex = inode % GroupCount
Group
Group_0 Group_1 Group_2 Group_3
DataServer
DataServer
Inode…….
(Inode 与 Group 的映射规则)
MetaServer事先决策 Group 映射到具体的DataServer
DataServer
DataServer
16. Data设计
存储引擎
类LSM-tree的存储引擎,EFS通过将随机写转为顺序写来支持随机写操作。
高可用
一方面,DataServer的无状态,保证了在任一DataServer宕机的情况下可以由另外一个DataServer去重新负责相
关的数据读写;另一方面,通过主备模式进一步的减小其中的不可用时间。
17. DataServer(引擎)
Rotate
2.Update Index
WriteRPC
Group
Key : inode, o set, length
Value : blob_id, blob_o set
UpdateTable
ImmTable
1.Write Data (inode, o set, length, data)
WriteAheadLog(LogBlob)
WAL
…
WAL
WAL WAL
Dumped Dumped
4k 4k
4k 4k 4k 4k
4k 4k 4k 4k
4k 4k 4k …
4k 4k
异步Dump
ExtentBlob(4k) ExtentBlob ExtentBlob(16K)
ExtentBlob ExtentBlob ExtentBlob(64M)
ExtentTable
(LSM-tree)
18. DataServer(主备)
WAL-64
WAL-65
WAL-66
WAL-67
WAL-68
WAL-69
ImmTable
WAL-70
WAL-71
UpdateTable
ExtentTable(LSM-tree)
SST
wal
LogBlob的最新数据 数据冗余
在另外的一个进程中读打开LogBlob,无法获
取最新的数据,需要写打开的客户端来传递最
新⻓度 时间序上,我们根据SST中保存的ExtentBlob
数据,加上相对更多的 WAL 数据就能恢复出
全量数据。
19. DataServer(主备)
WriteRPC
同步索引
Group(主)
Update
ReadRPC
Imm
Extent
Group(备)
Update
Imm
Extent
ReadOnly
ReadWrite
MStore
扩展读能力 提高可用性
在热备节点上提供读能力,一方面扩展了
Group的读能力;另一方面DataServer可以多
机房部署,从而实现业务节点的机房就近读。 在DataServer故障的时候,可以在备节点上更快的
启动主Group(切换到主只需要追加WAL少量的最
新数据索引即可),缩短了系统不可用时间
20. 03·落地实践
21. DTS(数据传输服务)
改造前
Binlog
Reader
RingBu er (in memory)
BinLog (in disk)
Binlog
Reader(备)
Writer
RingBu er (in memory)
Writer
BinLog (in disk)
Writer
输入到下游
输入到下游
输入到下游
22. DTS(数据传输服务)
改造后
Writer
Binlog
Writer
Reader
输入到下游
输入到下游
RingBu er (in memory)
Writer
BinLog (in EFS)
输入到下游
23. ElasticSearch
1.Write
Primary
3.Write
2.Write Local Engine
1.Write
6.Update Index
3.Write
Primary
.定期 sync index
3.Update Index
.定期 sync index
5.Response
Replica
Replica
Replica
Replica
2.Write EFS
4.Write Local Engine
4.Write Local Engine
EFS
24. 04·未来规划
25. 可用性提升
增加故障场景下的可用性演练,提升各种极端场景下系统的可用性
降成本
优化存储引擎,充分利用底层LogBlob的压缩特性,来实现降成本的需求。
云原生
可以帮助业务更加便捷的接入存算分离的架构
性能优化
优化海量小文件场景下的读写性能
可观测
持续迭代EFS可观测性,构建全链路监控
26. Q&A
27. 更多技术干货
欢迎关注“美团技术团队”
美团存储团队
招聘岗位请扫码