seaweedfs的使用和修改

Seaweedfs 是根据 facebook的一篇关于分布式图片系统的论文完成的. 这篇论文的英文原文地址,中文翻译版本的地址

Seaweedfs官方地址为: 这里. 用GO语言完成.

Seaweedfs 我主要用到的是:

weed master

weed volume

weed filer

weed upload

master可以作集群.其用raft来做一致性协议,选举master.

volume服务,就是一个存储的服务.

volume表示一个物理卷,实际上就是一个dat文件.

volume服务启动的时候,可以指定 dir= dir[,dir],

每一个dir可以指定maxVolumeCount,默认是7. 即一个dir对应7个volume.


有关于它的架构,我会再详细介绍.


先说说以前用FASTDFS的痛点:

之前使用fastdfs的时候,尤其是在做老图片导入到fastdfs的时候,还需要自己做处理.为的是原有的图片名称在进入fastdfs后发生了变化 ,比如 1.jpg 可能变成12ds0sdfj123.jpg.

这个时候就需要自己做适配.

要记录原有的图片名称和FASTDFS的名称的对应关系.


Seaweedfs 的 filer功能,就自带了这个处理. filer本身就是一个图片的上传和访问的接口,以HTTP的方式接受 GET 和 POST.

当我们需要传一张图片到文件系统中,只需要按照我们常规的传图方式,POST到 filer的端口即可.

它的对应关系默认存储有三种方式: 1.cassandra 2. redis 3. leveldb

出于对redis的了解程度比其他要深入,所以我选择了使用redis来存储映射关系.

在redis中, key为 图片的原始全路径名,value为seaweedfs的FID,比如:<"/test/1.jpg","2,022776cf3307">


再说说改造:

我在upload服务中,改造了一下代码. 因为用Upload服务可以批量导入一个文件夹下的所有文件. 但是由于文件不经过filer,所以无法完成映射关系.

所以,我在upload中,先记录了完成的图片原始路径和导入后的FID.

再批量插入到REDIS中.

REDIS的DB我默认都设置为了9. 这样如果接入已有的redis集群,对现有数据的影响较小.







你可能感兴趣的:(seaweedfs的使用和修改)