MogileFS

3,439 views

Published on

  • Be the first to comment

MogileFS

  1. 1. MogileFS
  2. 2. 谁在用? <ul><li>Live Journal </li></ul><ul><ul><li>曾经世界最大 BSP ,现被俄国公司收购 </li></ul></ul><ul><li>Six Apart 旗下( TypePad / VOX ) </li></ul><ul><li>Digg </li></ul><ul><li>豆瓣 ? 又拍网? </li></ul><ul><li>都用于 图片存储 </li></ul>
  3. 3. 我的感觉 <ul><li>实用至上 (山寨?) </li></ul><ul><li>解决并且只解决问题,没有花俏 </li></ul>
  4. 4. 整体架构 <ul><li>应用 </li></ul><ul><li>Tracker </li></ul><ul><li>数据库保存文件 meta data 、操作队列 </li></ul><ul><li>Storage Node </li></ul><ul><li>推荐最少两台服务器 </li></ul>
  5. 5. 功能特性 <ul><li>无单点故障 </li></ul><ul><li>自动复制 </li></ul><ul><li>不用 RAID ,但比 RAID 牛 </li></ul><ul><li>Shared-Nothing </li></ul><ul><li>不可 Append 、随机写 </li></ul><ul><li>随机读 ? </li></ul>
  6. 6. 使用技术 <ul><li>Linux 平台 </li></ul><ul><li>HTTP + WebDav </li></ul><ul><li>Perlbal </li></ul><ul><ul><li>超强悍的 http 反向代理服务器 </li></ul></ul><ul><li>Gearman </li></ul><ul><ul><li>山寨 Map/Reduce </li></ul></ul>
  7. 7. 拿来主义 <ul><li>数据库 </li></ul><ul><ul><li>MySQL 、 Postgres 、 SQLite </li></ul></ul><ul><li>反向代理 </li></ul><ul><ul><li>Perlbal 、 Nginx </li></ul></ul><ul><li>WebDav HTTP 服务器 </li></ul><ul><ul><li>存储 、 Serving 、 Monitor </li></ul></ul><ul><ul><li>Apache 、 Lighttpd </li></ul></ul><ul><li>DFS was easy </li></ul><ul><li>initial version = 1 weekend! :) </li></ul><ul><li>current version = many, many weekends </li></ul>
  8. 8. 其实很简单 <ul><li>initial version = 1 weekend! :) </li></ul><ul><li>current version = many, many weekends </li></ul>
  9. 9. Tracker / 服务器 <ul><li>7 种武器 Worker </li></ul><ul><ul><li>Delete </li></ul></ul><ul><ul><li>Fsck </li></ul></ul><ul><ul><li>JobMaster </li></ul></ul><ul><ul><li>Monitor </li></ul></ul><ul><ul><li>Query </li></ul></ul><ul><ul><li>Reaper </li></ul></ul><ul><ul><li>Replicate </li></ul></ul>
  10. 10. 文件管理 <ul><li>Node / Device </li></ul><ul><li>Domain / Class / Fid </li></ul><ul><ul><li>Domain + Fid 定位文件 </li></ul></ul><ul><ul><li>文件所属 Class 决定 </li></ul></ul><ul><li>http://192.168.1.109:7500/dev2/0/000/010/0000010820.fid </li></ul>
  11. 11. 一些细节 <ul><li>内置 memcache 支持 </li></ul><ul><ul><li>1) app <-> memcache </li></ul></ul><ul><ul><li>Rather than: </li></ul></ul><ul><ul><li>2) app <-> tracker <-> memcache </li></ul></ul><ul><ul><li>Although, if 1) is too hard, it's true that 2) is cheaper than 3): </li></ul></ul><ul><li>3) app <-> tracker <-> db. </li></ul>
  12. 12. 更多细节 <ul><li>负载均衡 </li></ul><ul><ul><li>Perlbal: “just use whatever's free. beats managing “weighted round robin” hell.” </li></ul></ul><ul><li>Replication Policy pluggable </li></ul><ul><ul><li>MultipleHosts </li></ul></ul><ul><ul><li>“Host awareness” </li></ul></ul><ul><ul><li>Union (MultipleHosts + backup) </li></ul></ul>
  13. 13. 还是细节 <ul><li>FSCK </li></ul><ul><ul><li>检查文件长度 </li></ul></ul><ul><ul><li>删除错误备份、重新备份 </li></ul></ul><ul><li>Node 失效 </li></ul><ul><ul><li>Monitor 检查 </li></ul></ul><ul><ul><li>管理员确认 </li></ul></ul>
  14. 14. 管理工具 - mogadm <ul><li>添加、修改 </li></ul><ul><ul><li>storage host / device / domain / class </li></ul></ul><ul><li>系统检查 </li></ul><ul><li>文件管理 </li></ul><ul><li>没有怎么办? -- 》直接修改数据库 </li></ul><ul><li>修改文件所属 class 的备份策略 </li></ul>
  15. 15. 简略测试 <ul><li>Test App / DB / tracker/ storage 全部都在一台奔 P4 2G 、内存 512M 的 ubuntu 上操作 </li></ul><ul><li>链接 tracker 1 百万次,耗时 : </li></ul><ul><ul><li>[47.08 , 39.78] </li></ul></ul>
  16. 16. 读 <ul><li>读同一个 50K 图片,顺序读 1 万次,耗时: </li></ul><ul><ul><li>[117.63, 120.24, 119.11] </li></ul></ul><ul><li>mogstored 占 CPU 约 40% ,内存 1.5% </li></ul><ul><li>几个 mogilefsd ( tracker)CPU 占用小于 7% ,内存 1.3% </li></ul>
  17. 17. 写 <ul><li>写同一个 50K 图片,顺序读 1 千次,耗时: </li></ul><ul><ul><li>[42.41, 43.99, 46.60] </li></ul></ul><ul><li>mysql / tracker / replicate work 等开始抢 cpu ,总体 CPU 占用低于 55% </li></ul><ul><li>实际上是不停添加、删除、准备 replicate 文件 </li></ul><ul><li>大文件 </li></ul><ul><li>写入一个 686M 的 iso 文件 </li></ul><ul><li>耗时约 110 秒 </li></ul><ul><li>python client 自动切割为 43 个约 16M 的小文件 </li></ul>
  18. 18. 大文件 <ul><li>686M 的 iso 文件 </li></ul><ul><li>耗时约 110 秒 </li></ul><ul><li>python client 自动切割为 43 个约 16M 的小文件 </li></ul>
  19. 19. 遇到问题 <ul><li>IO::AIO 库最新的 3.3 版有 bug </li></ul><ul><li>翻源码得知 mogadm 的配置文件路径 </li></ul><ul><li>写入操作似乎不稳定( Python Client ?) </li></ul>
  20. 20. 致命伤 <ul><li>文档奇弱! </li></ul><ul><li>社区支持? </li></ul><ul><li>Perl </li></ul><ul><ul><li>性能不是问题 </li></ul></ul><ul><ul><li>源码可读性、可维护性 </li></ul></ul>

×