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

MogileFS

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