zoukankan      html  css  js  c++  java
  • SeaWeedfs 分布式网络文件存储介绍

    引子
    随着业务量增长,一个系统需要存储上百万文件的情况越来越多,尤其是互联网网站。在这种情况下依然使用传统磁盘/共享存储的方式进行支持会有以下问题:
    * 文件的备份、恢复困难,大量文件的copy 耗时耗力
    * 文件数量暴增占满操作系统文件系统inode,导致磁盘空间虽然没有用完但是因为inode用尽无法使用
    * 文件读取效率太低,无法应对高并发读取要求
    针对以上问题,facebook 提出了自己的方案 Facebook’s Haystack design paper 。 之后各种实现出现,如tfs、MogileFS、GlusterFS等,其中Seaweedfs是一个比较优秀的实现。具有效率高、结构简单、代码清晰等优点。本文针对seaweesfs进行简要的分析,在开始之前推荐阅读facebook的论文以学习理解NoFS(Net Object File System) 相关的理念。

    拓扑结构
    111 模式下的复写
    --------------------------------------------------------
    | DataCenter A DataCenterB .... |
    | | | |
    | ├─Rack a ├─Rack b |
    | | | |
    | ├─DataNode1 ├─DataNode3 |
    | | ├─Volume1 | ├─Volume2 |
    | | ├─Volume2 | ├─Volume3 |
    | ├─Rack c ├─Rack d
    | ├─ DataNode2 ├─DataNode4 |
    | | ├─Volume2 | ├─Volume1 |
    | | ├─Volume3 | ├─Volume3 |
    --------------------------------------------------------
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    在逻辑上Seaweedfs的几个概念:
    * Node 系统抽象的节点,抽象为DataCenter、Rack、DataNode
    * DataCenter 数据中心,对应现实中的不同机房
    * Rack 机架,对应现实中的机柜
    * Datanode 存储节点,用于管理、存储逻辑卷
    * Volume 逻辑卷,存储的逻辑结构,逻辑卷下存储Needle
    * Needle 逻辑卷中的Object,对应存储的文件
    * Collection 文件集,可以分布在多个逻辑卷上

    在实际实现中

    代码结构
    文件目录 逻辑层级 用途
    weed
    ├── command 1 weed的命令抽象
    ├── filer 2
    ├── filer2 2 Filer 实现
    ├── filesys 2 FUSE mount到本地操作系统的实现
    ├── glide.yaml 0 包依赖关系
    ├── glog 4 日志组件
    ├── images 3 对图片的伸缩/矫正操作
    ├── operation 4 对于查询/读写的一些原子操作工具类,如通过http请求查询master下指定的volume
    ├── pb 4 MasterServer和VolumeServer之间 gRpc 心跳实现,主要是两个pb 文件以及自动生成的go-grpc文件
    ├── security 4 安全模块,主要是黑白名单实现,JWT实现
    ├── sequence 3 序列号生成
    ├── server 2 服务器实现,包括MasterServer/VolumeServer/FilerServer的实现
    ├── stats 3 监控状态,主要是主机内存、磁盘等
    ├── storage 3 物理存储的部分,包括物理Needle/物理卷Volume 的读写
    ├── tools 1 实用的工具
    ├── topology 2 逻辑拓扑结构,Datacenter、Rack、DataNode,主要是全局卷伸缩/查找等操作
    ├── util 4 工具类
    └── weed.go 0 主程序
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    部署结构
    ----------------------------------------------------------------------------------------------------------------
    | HttpClient
    | |
    | MasterServer1 <====Http/Raft=====> MasterServer2 <====Http/Raft=====> MasterServer3(leader)
    | || ||
    | ( grpc||HeartBeat) ( grpc||HeartBeat)
    | || ||
    | ├─VolumeServer(多个) ├─VolumeServer(多个)
    | ├─Stroage
    | ├─VolumeData(.dat/.idx)
    | ├─Needles
    | ├─VolumeData(.dat/.idx)
    | ├─Needles
    | ├─Stroage
    | ├─VolumeData(.dat/.idx)
    | ├─Needles
    |
    ----------------------------------------------------------------------------------------------------------------
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    使用指南
    详见: [Seaweedfs wiki](https://github.com/chrislusf/seaweedfs/wiki/Getting-Started)
    1
    不足与问题
    * seaweedfs 采用的是同步式复写有以下几个问题:
    a. 当在某个volume-server 下线又上线恢复的情况下,没有自动的同步机制
    b. 同步复写需要等待每个节点都复写成功,效率相对较低
    c. 虽然节点的上下线会快速通过心跳通知master节点,但是仍然存在一定的延迟,期间Volume-Server在复写的时候可能会出现因为复写已经下线的volume-server导致上传失败的情况
    * seaweedfs目前在权限管理方面还相对比较弱,目前仅有一个白名单控制机制,来控制外部的读写权限/恶意删除。
    ————————————————
    版权声明:本文为CSDN博主「shanggl8」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/github_37459410/article/details/81141365

  • 相关阅读:
    react 创建组件 (三)PureComponet
    [翻译] YLGIFImage 高效读取GIF图片
    iOS设计模式:静态工厂相关
    使用mac版思维导图软件MindNode
    使用NSHashTable存储引用对象
    [翻译] PBJNetworkObserver 网络监控
    使用富文本OHAttributedLabel
    [翻译] TLMotionEffect 重力感应
    [翻译] TSActivityIndicatorView 自定义指示器
    获取音视频文件AVMetadata数据
  • 原文地址:https://www.cnblogs.com/gaoyanbing/p/14487297.html
Copyright © 2011-2022 走看看