V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
herozem
V2EX  ›  分享创造

模拟 GFS 做了个块文件系统,分布式相关的功能还在做

  •  1
     
  •   herozem · 2018-07-05 20:17:04 +08:00 · 2158 次点击
    这是一个创建于 2366 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前已经完成了节点注册和分块功能,可以增加,下载和删除文件了。下一步要做的事情是把文件块在多个节点中分发,以及处理节点掉线的问题。

    源码: https://github.com/jiajunhuang/hfs

    欢迎一起来做。

    技术栈:

    • etcd
    • gRPC
    • Go

    示例:

    1. 首先起 etcd 服务
    2. 创建存储块的文件夹并且授权
    $ sudo mkdir -p /hfs/chunks/
    $ sudo chown -R jiajun:jiajun /hfs
    
    1. 拷贝代码并且编译
    $ git clone [email protected]:jiajunhuang/hfs
    $ cd hfs
    $ make
    
    1. 起 chunkserver
    $ ./bin/chunkserver
    
    1. 开一个新的窗口,执行命令
    $ ./bin/hfsclient upload ~/Downloads/ubuntu-16.04.4-server-amd64.iso
    file created, uuid is 60aca0d4-28d9-481b-9a62-460f642664d0
    $ ./bin/hfsclient download 60aca0d4-28d9-481b-9a62-460f642664d0
    file with UUID 60aca0d4-28d9-481b-9a62-460f642664d0 download successful! origin file name is ubuntu-16.04.4-server-amd64.iso
    $ md5sum 60aca0d4-28d9-481b-9a62-460f642664d0
    6a7f31eb125a0b2908cf2333d7777c82  60aca0d4-28d9-481b-9a62-460f642664d0
    $ md5sum ~/Downloads/ubuntu-16.04.4-server-amd64.iso
    6a7f31eb125a0b2908cf2333d7777c82  /Users/neo.huang/Downloads/ubuntu-16.04.4-server-amd64.iso
    
    1. 查看文件块:
    $ ls /hfs/chunks/
    06c520d5-9c01-438f-9760-7004decce303  28749da5-2ad7-4d01-8dff-3b4d5426b0bf  6cba4f9c-4121-4388-b1e9-5015d7aac9bb  d246ea5c-c66e-4ba6-a4aa-b4b3d46f0ef1
    0949ed79-4b75-4b9d-aa24-799e725aeffb  39d242e5-4c63-4d0f-8145-629a61e1b4a2  9021960b-b283-4f21-bcbb-9fc425609e99  e97c274b-0467-4295-a488-f917dceb2f70
    1dcb04a8-4f3e-4df4-a1bf-28b38de2ac7c  44884d3e-4017-42cd-b0e3-baf3bb0090f2  acb103bb-d140-4cd8-869f-a7ef0f14b1c0
    2581cc6c-3ae1-4b8f-8f69-86290d9e2191  4c18bf25-d652-4ed4-ab01-cda48f87a5e6  c3983a62-b770-43df-81c5-c8f2684951ea
    
    1. 检查 meta 信息(etcd 中):
    $ ETCDCTL_API=3 etcdctl get "" --prefix=true
    /hfs/chunks/06c520d5-9c01-438f-9760-7004decce303
    ...(ignore the rest)
    
    1. 删除文件:
    $ ./bin/hfsclient delete 60aca0d4-28d9-481b-9a62-460f642664d0
    
    carmark
        1
    carmark  
       2018-07-05 21:53:09 +08:00
    GFS 主要还是处理大文件,目前主流的存储都可以解决,但是针对小文件的优化一直是一个难题,为什么不考虑搞搞这个?
    herozem
        2
    herozem  
    OP
       2018-07-06 10:49:46 +08:00
    @carmark 对,目前主要是因为看了 GFS 的论文,就像搞一个出来。我不是专门做 user space file system 的,不过可以想像小文件优化确实不好做,毕竟大小不一致。不过好像 fastdfs 是专门用作小文件的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1021 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:26 · PVG 04:26 · LAX 12:26 · JFK 15:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.