OpenStack Swift 海量小文件优化之路

QCon2017 PPT下载

1. OpenStack Swift海量小文件优化之路 爱奇艺 技术产品中心 李杰辉
3. 关于我 • 盛大云/VMware/爱奇艺 • Cloud Foundry/vNAS/vBlob/Swift • Cloud Computing/Distributed Storage/DevOps/Docker • @blue-salt
4. Agenda • 背景 • Swift海量小文件问题以及应对之法 • Swift合并存储设计和实现 • 性能数据对比 • 展望
5. 爱奇艺Swift实践 • 爱奇艺12年开始调研使用Swift • 视频、图片、文本 • 海量小文件需求
6. 分布式存储系统3个基本问题 • 副本定位 • 数据持久化 • 副本一致性
7. Swift介绍 • 高可用容错分布式对象存储系统 • 本质是一个键值系统
8. Swift副本定位 • 类一致性哈希 • 虚拟节点 • 副本以虚拟节点为单位 o1 o1 o2 Partition 0 Partition x Node A o1 o2 Partition 0 Partition y Node B o2 Partition 0 Partition z Node C
9. • • Replication Swift数据持久化 • 一个对象保存成一个POSIX文件 • 元数据保存在POSIX文件的扩展属性上 Erasure Coding
10. Swift副本一致性 • 最终一致性 • 哈希列表 63c : 12c76fd39c8a409049d30ec30d1c2c21
11. Agenda • 背景 • Swift海量小文件问题以及应对之法 • Swift合并存储设计和实现 • 性能数据对比 • 展望
12. 性能问题定位 • 阅读源码 • 原因猜测 • 代码性能分解
13. Replication 引擎写流程 对象写请求 过程结束 创建临时文件 重命名 写入数据 创建目录结构 写入元数据 刷新Hash文件 FSYNC Drop Cache
14. Replication 存储引擎的问题 • 一个对象多层目录 • Inode占用过多 • Random IO操作 • 同步操作 • 文件锁
15. 应对方法 • 加机器 • PyPy • Go Swift • 合并存储
16. 合并存储介绍 • 源于Log Structured File System • 核心思想:将Random IO变为Sequential IO • FastDFS, Haystack,SeaweedFS,Ambry, TFS,BFS等
17. 合并存储架构 • 副本定位 • • 副本一致性 • • 中心服务器 + 文件Handle 异步同步 数据持久化 • 小文件合并存储到大文件 • 索引文件 + 文件Handle
18. Agenda • 背景 • Swift 海量小文件问题及应对方法 • Swift合并存储设计和实现 • 性能数据对比 • 展望
19. Swift合并存储的难点 • Python WSGI 并发模式 • 去中心化副本定位 • 自定义元数据 • 基于目录哈希列表同步
20. Swift合并存储设计 • 副本定位 • 数据持久化 • 副本同步
21. Swift合并存储副本定位 • 虚节点映射大文件 • 索引信息定位到偏移量 o1 o1 o2 o1 o2 o2 Volume 0 Volume x Volume 0 Volume y Volume 0 Volume z Partition 0 Partition x Partition 0 Partition y Partition 0 Partition z Node A Node B Node C
22. Swift合并存储数据持久化 • Volume大文件 • 嵌入式键值数据库 KV Database Volume 0 Disk A Volume n
23. Swift合并存储副本同步 • 基于哈希列表 • 模拟目录结构 DB Key: /3/63c/3e19cafe6fc6d71c6ee3fe814ef4d63c/
24. Swift合并存储实现 • Go语言为主 • RocksDB作为元数据库 • 复用Python Replicator和Auditor代码 • gRPC
25. Agenda • 背景 • Swift 海量小文件问题及应对方法 • Swift合并存储设计和实现 • 性能数据对比 • 展望
26. 写延迟
27. 95%写延迟
28. 读延迟
29. 95%读延迟
30. Agenda • 背景 • Swift 海量小文件问题及应对方法 • Swift合并存储设计和实现 • 性能数据对比 • 展望
31. 后续工作 • Full Go Stack • Swift 组件 • 原生Go Key Value Database • 大文件优化 • 性能监测支持
32. 总结 • 分布式存储系统3个基本问题 • Swift 架构介绍以及Replication存储引擎剖析 • Swift合并存储设计与实现