海量小文件处理方式——facebook开源的Haystack(二)
今天来聊聊Haystack三个关键模块的作用。
先来张图回忆下Haystack组件架构
Haystack Directory主要完成下面4方面的功能:
第一、提供逻辑卷和物理卷之间的Map;
第二、负责通过逻辑卷写和通过物理卷读之间的平衡;
第三、决定图片处理从CDN获取还是Haystack Cache;
第四、标识逻辑卷为只读,根据两个因素:1、操作设置为只读;2、卷大小达到上限。
Haystack Store主要负责:
第一、保存图片元数据,比如Key、Alternate Key、 flags、size;
第二、维护逻辑卷和物理卷之间的关系,一般情况是备份三副本;
Haystack Cache主要负责缓存从Haystack Store获取的图片信息。
我们来看看图片写流程:
1、用户上传图片到web服务器,web服务器携带逻辑卷ID、key、alternate key、cookie和数据发送给Haystack Directory;
2、Haystack Directory将data存入Haystack store;
3、Haystack Directory在map中新增一条元数据记录。
删除流程:
1、同时将Haystack Directory元数据和逻辑卷文件的flags设置为deleted。
注意:并不会真实删除该图片
读流程:
1、用户发送访问图片请求到web服务器;
2、web服务器发送请求到Haystack Directory;
3、Haystack Directory将逻辑卷ID、cookie等信息从元数据获取后返回给web服务器;
4、web服务器携带步骤3中的信息发送给Haystack Store;
5、Haystack store将查询到的结果返回web服务器。
安装Haystack组件的文件系统,facebook官方主推XFS。原因是
1、对于几个连续大的图片可以存入小的内存空间;
2、文件预分配,以减少存储碎片并控制块映射的大小
总结一下,Haystack就是解决CDN无法解决的长期被查询的大量小图片速率问题。就是CDN解决方案的一个补充。与我想研究的smallFS场景不一样。smallFS主要是解决HDFS存储大量小文件导致namenode资源耗尽的问题。
下周开始研究HDFS提供的几种海量小文件解决方案
- 点赞
- 收藏
- 关注作者
评论(0)