MogileFS
MogileFS 服务请求处理流程
1. 用户浏览器发送"GET/foo"请求到负载均衡服务器
2. 请求分配到应用服务器(perl,php,ruby等)
3. 应用请求MogileFS的Tracker(mogilefsd进程)获取文件位置(或者缓存处理等)
4. 应用返回包含文件地址 'X-REPROXY-URL: http://path/from/mogilefs/tracker'的header
5. 拦截header,返回对应的文件
MogileFS高效的原因在于不用读取相应的文件再返回,而是直接从数据库查找并返回文件的存储位置
MogileFS图片系统处理流程:
1. 客户端请求图片(带宽高等参数)
2. 图片处理服务程序
3. 程序判断是否有对应的缓存,有则直接返回
4. 调用MogileFS Tracker 查找文件
5. 对图片进行处理(缩放,水印,裁剪等)
6. 缓存图片
7. 返回请求文件
MogileFS高级
-
Application
: 应用,存储和读取文件 -
Tracker
(mogilefsd进程): 基于事件的父级 process/message bus,管理所有的来自应用的客户端通信请求。包括均衡请求到"Query workers",处理所有的mogilefsd与子进程之间的通信。 可以在不同的主机上运行两个tracker,或者更多的用于负载均衡(推荐使用多个tracker).mogilefsd的子进程包括:- Replication 文件复制
- Deletion 文件删除
- Query 查询
- Reaper reenqueuing files for replication after a disk fails
- Monitor 主机和device状态监视器
-
Database
: 存储MogileFS的meta数据(namespace,文件对应路径). -
Storage Nodes
: 文件存储节点
MogileFS工作原理
- app发送请求打开一个文件
- Tracker 做一些负载均衡的处理,决定在哪儿处理,会返回给app一些可用的位置
- app使用其中一个位置存储文件
- app 通过 “create_close” API 通知tracker 文件的写入位置
- tracker 将名称加入domain的namespace(通过数据库)
- app通过(key == "filename")向该domain发送一个get_paths请求,tracker在通过数据库或缓存系统等获取文件的保存位置,所有的该文件可访问的URL,基于权重的存储位置 ,返回响应结果
- app按顺序尝试URL
其他
可以直接使用WebServer处理文件请求,无需后端程序(比如PHP)
来源:oschina
链接:https://my.oschina.net/u/101118/blog/199607