58同城WFS系统架构演进

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1.
2. W 58同城 WFS架构设计演进 WFS 架构设计演进 58同城 后端高级架构师 钟昌寿
3. W 目录 WFS架构演进 分布式读缓存系统 WFS一期架构 基于58原有的对象存储WOS与原有的 分布式KV存储WTable基础上搭建。 WFS是什么 简要介绍WFS的基本实现原理以及 适用的业务场景及其优势。 为了避免机械磁盘IO雪崩,在对象存储之上 搭建基于SSD磁盘的读缓存,加速热点访问。 WFS二期架构 重新设计两层模型的对象存储以及基于 Paxos数据同步的纯内存元数据管理。
4. W 58同城 WFS架构设计演进 01 WFS是什么 简要介绍 WFS 的基本实现原理以及适用的业务场景及其相对于 传统的对象存储的优势。
5. W WFS基本原理 基本访问流程与主要相关系统 File Read WFS Client File Write fuse库 文件系统 FUs 用户空间文件系统 内核空间 VFS 元数据管理层 WF 用户空间 WFS Client /dev/fuse 虚拟文件系统 数据存储层 WOS对象存储
6. W WFS适用业务场景 适用的业务场景及其优点简要介绍 由于Docker+K8S的服务特性,业务服务节点可能会根据系统调度等原因而在物理机之间漂移。对 有状态服务上云 替换本地存储 于那些有状态的服务,在他们服务节点漂移时需要把这台跟着转移。此时使用WFS将会十分方 便,在创建新的Pod时自动挂载业务的存储节点即可。 比较常⻅的比如AI系统,将训练素材放在WFS中,训练节点放在物理机或者云上。由于WFS支持 POSIX标准接口,不需要对程序做任何修改即可使用。还能够方便AI平台与业务部⻔共享训练素材 和训练模型的上传与下载。 存算分离 比如ES系统,ClickHouse,Hadoop系统,将这些系统的底层存储替换成WFS即可。 其他系统 原来存储到NFS,MFS,CephFS上的数据可以转移过来,可用于存储Nginx日志,私有云日志 等。
7. W 58同城 WFS架构设计演进 02 WFS一期架构 WFS 一期系统是构建在原有系统之上,存储层放置到原有的对 象存储,元数据则存储到分布式 KV 之中。
8. W 元数据Key设计 采用成熟的分布式KV作为存储 目录项多链表设计 文件Key设计 目录项链表数组 单目录支持 1万 * 65536 = 6.5亿 个文件 8 链表0 10 链表1 7 链表2 父目录InodeID + 文件名 InodeID 父目录InodeID 文件大小 Size 文件INodeID 用户 User 所在父目录索引项 创建时间 CreateTime …
9. W 元数据实现难点-相关Key一致性 采用成熟的分布式KV作为存储 1 2 8 链表0 10 链表1 7 链表2 3 4 5 父目录InodeID + 文件名 InodeID 文件分片列表 父目录InodeID 文件大小 Size Offset -> NeedleID 文件INodeID 用户 User Offset -> NeedleID 所在父目录索引项 创建时间 CreateTime … ……
10. W 元数据实现难点-互斥锁 采用成熟的分布式KV作为存储 01 02 03 删除空目录加锁 Rename&Remove时需要确保只删除空目录, 采用Cas与设置《目录锁》。 创建文件检查目录锁 允许并发创建文件,但是需要确保创建文件时父目 录没有被删除,采用两阶段检查《目录锁》。 文件并发写 写一个文件块涉及到写多个Key,由于没有原子更 新能力,因此也需要加锁,确保数据一致性。
11. W 元数据设计总结 采用成熟的分布式KV作为存储 元数据管理使用分布式KV存储的缺点: 一、没有分布式事务,对多个Key修改无法作为一个原子实现,需要设计合适容错机制或锁机制。 二、每次文件操作涉及到多个Key与锁检查,需要与KV存储多次交互,影响性能。 三、代码逻辑复杂,需要处理各种网络超时、并发等导致的失败,部分情况需要回滚修改。
12. W 数据存储层-对象存储 采用对象存储作为存储层服务 元数据KV存储 Server Proxy Server 对象存储 存储节点 路由服务 存储节点 WFS Client Block Proxy 存储节点
13. W 一期存储管理 采用对象存储作为存储层服务 Block合并存储 Store管理一个磁盘 Volume Volume1(32GB) Volume1.Blocks Block-1 Block-2 Volume2(32GB) Volume1.Index Volume…(32GB) Volume1.DelFile Volume203(32GB) Block-3 Block-4 ……
14. W 数据存储层总结 采用对象存储作为存储层服务 存储层直接使用分布式对象存储的缺点: 一、读写Block的IO路径太⻓,网络延迟较高。 二、存在较多的随机写场景,写入性能较差。 三、删除数据后,空间回收需要消耗大量IO资源并且速度很慢。
15. W 58同城 WFS架构设计演进 03 WFS二期架构 WFS 二期在架构上更注重读写的性能,不再局限于原有的系统 而是针对 WFS 业务特点进行定制化开发。
16. W WFS二期开发背景 海量小文件性能瓶颈,数据回收瓶颈 海量小文件高性能读写,存储空间快速回收: 一、海量小文件场景下,元数据操作十分频繁,成为主要瓶颈。 二、文件删除频繁,要求具备快速的空间回收能力。 三、存储层网络IO路径较⻓,文件调度等原因导致性能较差。
17. 采用MultiPaxos同步的纯内存存储 MetaServer 内存元数据 PaxosLo 可删除 MetaServer 内存元数据 MultiPaxo 一致性同步 MetaServer 内存元数据 纯内存读写 定期创建快照 PaxosLog 快照位置 PaxosLo 保留 W WFS二期元数据管理
18. W WFS二期元数据管理 采用MultiPaxos同步的纯内存存储 路由计算 WFS Client Hash(InodeID) % 200 Serv1 Serv2 Serv3 Slot ID Serv4 Paxos实例 Slot1 Slot1 Slot1 Slot4 Slot4 Slot2 Slot2 Slot2 Slot3 Slot4 Slot3 Slot3
19. W WFS二期元数据管理 采用MultiPaxos同步的纯内存存储 Slot1 Tree Slot2 Tree e Inode Inode
20. W WFS二期元数据管理 采用MultiPaxos同步的纯内存存储 跨Slot操作(Create、Remove、Rename),以Remove为例 一、在InodeInfo中增加锁标志位,modifyTime作为加锁时间。 二、以原子方式去查询待删除目录是否为空,若为空则加一个锁(5每秒过期)返回。 三、到父目录中删除目录项。 四、真正删除目标目录,此时需要检查锁还在(即使已经过期)则允许删除。 五、任何修改操作都需要去检查锁,若锁存在并且未过期则不允许操作。
21. W WFS二期元数据管理 采用MultiPaxos同步的纯内存存储 元数据管理优化后的效果: 一、平均一个元数据操作耗时下降了80%。 二、内存使用优化后,一亿个小文件一个MetaServer节点大概需要40GB内存。 三、代码逻辑复杂度大幅下降,代码量下降了60%。
22. W WFS二期存储层 采用双层模型,简化网络IO路径 两层模型:客户端具有整个集群拓扑信息, 直接与存储节点通讯: Store Store Store Store Store Store Store Store Store
23. W WFS二期存储层 采用双层模型,简化网络IO路径 集群拓扑信息: 1000台机器集群拓扑信息4MB Store Store Store Vol-ID Vol-ID Vol-ID Store Store Store Vol-ID Vol-ID Vol-ID Store Store Store Vol-ID Vol-ID Vol-ID 一、客户端启动时区Manager获取启动路由。 Vol-ID Vol-ID 二、然后去Store获取全量路由与增量路由。 Vol-ID FileID Vol-ID Time Sequence
24. W 一期存储管理 采用对象存储作为存储层服务 空间回收优化,增加一层Extent: Block合并存储 Store管理一个磁盘 Volume Volume1(32GB) 512MB Extent Volume1.Blocks Block合并存储 Block-1 Block-2 Volume2(32GB) Volume1.Index 512MB Extent Volume…(32GB) Volume1.DelFile Volume203(32GB) Block-3 Block-4 512MB Extent ……
25. W WFS二期元数据管理 采用MultiPaxos同步的纯内存存储 空间回收优化: 一、由于删除数据的时间属性较强,不同Extent被删除数据量不同,优先回收删除量较大的Extent。 二、即使删除数据没有时间属性,也有利于降低回收的粒度。 Extent1 Extent2 Extent3 Extent4 Extent5 Extent6 Extent7 Extent8
26. W WFS二期元数据管理 采用MultiPaxos同步的纯内存存储 其他性能优化:随机写转换成顺序写 一、从轮询调度Volume修改成单个Volume写满调度下一个Volume。 二、从8字节对⻬,修改成4KB对⻬。
27. W WFS二期元数据管理 采用MultiPaxos同步的纯内存存储 效果总结: 一、读写性能相较于老版本WFS提升4倍。 二、架构大幅简化,后期运维容易很多。 三、存储层空间回收速度大幅提升。
28. W 58同城 WFS架构设计演进 04 分布式读缓存系统 为了避免机械磁盘 IO 高时,延迟大幅升高导致性能降低,设计 SSD 存储的读缓存系统缓解读压力。
29. W 分布式读缓存设计 参考两层存储模型做设计 分布式读缓存设计要点: 一、依然采用两层存储模型,客户端缓存所有路由信息,直接与存储节点通讯。 二、存储节点采用LRU模型淘汰冷数据。 三、每份数据只有一个备份,不用考虑数据容灾。
30. W 分布式缓存设计 集群管理与路由设计 路由计算 WFS Client Hash(FileID) % 2048 Serv1 Manager Manager Serv2 Slot ID Serv3 Serv4 Slot1 Slot2 Slot3 Slot4 Slot5 Slot6 Slot7 Slot8 Slot9 Slot10 …… ……
31. W 分布式缓存设计 存储节点LRU与文件管理 存储节点设计要点: 一、Slot有Extent组成Extent有 Block+Index文件组成 二、Slot内存中有一个LRU 三、Exent内存中有索引 Slot1 Slot1-LRU Extent索引 Extent FileID Extent FileID Offset Extent FileID Extent FileID Offset Extent FileID Extent FileID Offset FileID Extent FileID Offset
32. W 分布式缓存设计 存储节点LRU与文件管理
33.

Home - Wiki
Copyright © 2011-2024 iteam. Current version is 2.137.1. UTC+08:00, 2024-11-15 15:13
浙ICP备14020137号-1 $Map of visitor$