美文网首页
Storj用例场景与流程分析

Storj用例场景与流程分析

作者: tristan_lee | 来源:发表于2018-12-28 20:31 被阅读0次

    三种节点的用例

    storj_usecase
    • uplink用例场景
      • 客户端程序uplink可以创建bucket(类似文件夹)
      • 客户端程序uplink可以上传数据文件
      • 客户端程序uplink可以下载数据文件
      • 客户端程序uplink可以枚举bucket的文件列表
      • 客户端程序uplink可以删除bucket或者bucket中的文件
    • satellite用例场景
      • satellite节点提供kad发现服务,主要用于发现storage节点,并维护kad路由表
      • satellite节点提供数据文件的元数据存储服务(pointerdb)
      • satellite节点提供对存储数据进行审计的服务
      • satellite节点提供数据文件冗余修复服务
      • satellite节点提供存储计费服务
    • storage node用例场景
      • storage节点提供kad发现服务,主要用于发现satellite节点,并维护kad路由表
      • storage节点提供数据存储服务

    典型用例场景的流程

    用户端上传文件的流程

    以下只列举节点间的grpc交互流程(忽略其它流程细节,详细消息结构请查阅相关proto文件):

    storj_upload_sequential
    1. 客户端uplink首先根据指定的冗余策略(Redundancy Scheme)计算出所需的存储空间(rs_size),然后向satellite节点的overlay服务(grpc服务)请求所需存储空间
    2. satellite节点返回提供具体存储空间的节点信息(node数组)
    3. 客户端uplink向satellite节点的pointerdb服务(grpc服务)请求存储带宽分配的计费信息PayerBandwidthAllocation结构(简称pba)用于计费
    4. satellite节点返回pba结构
    5. 客户端uplink向所有分配的storage节点的piecestore服务(grpc服务)上传具体数据分片
    6. storage节点向satellite节点提交存储带宽分配agreement信息
    7. 客户端uplink生成上传数据文件的元数据信息(pointer结构)
    8. 客户端uplink将生成的元数据信息(pointer结构)上传给satellite节点的pointerdb服务(grpc服务),satellite节点存储文件的元数据信息以便进行文件数据索引

    用户端上传文件流程与相关类图的关系

    简单类图:

    storj_upload_class_simple

    代码流程摘要:

        metainfo, streams, err := cfg.Metainfo(ctx)
        if err != nil {
           return err
        }
    
        createInfo := storj.CreateObject{
           RedundancyScheme: cfg.GetRedundancyScheme(),
           EncryptionScheme: cfg.GetEncryptionScheme(),
        }
        obj, err := metainfo.CreateObject(ctx, dst.Bucket(), dst.Path(), &createInfo)
        if err != nil {
           return convertError(err, dst)
        }
    
    //......
    
        mutableStream, err := obj.CreateStream(ctx)
        if err != nil {
            return err
        }
    
    //......
    
        upload := stream.NewUpload(ctx, mutableStream, streams)
        _, err = io.Copy(upload, reader)
    
    
    1. 客户端uplink根据本地配置信息生成一个storj.Metainfo对象metainfo和一个streams.Store对象streams
    2. 由metainfo.CreateObject()根据传入的路径信息创建一个storj.MutableObject对象obj
    3. 由obj.CreateStream()创建一个storj.MutableStream对象mutableStream
    4. 最终由控制类stream.Upload操作对象streams与对象obj完成相关文件数据上传操作

    详细扩充类图:

    storj_upload_class

    用户端下载文件的流程

    以下只列举节点间的grpc交互流程(忽略其它流程细节,详细消息结构请查阅相关proto文件)

    storj_down_sequential
    1. 客户端uplink首先向satellite节点的overlay服务(grpc服务)请求指定路径的文件的元数据(pointer)
    2. satellite节点返回指定路径的文件的元数据(pointer),具体存储节点信息(node数组),以及pba结构
    3. 客户端uplink将返回的元数据(pointer)组装成storj.Object结构
    4. 客户端uplink根据storj.Object结构的信息向具体storage节点的piecestore服务(grpc服务)请求下载文件数据分片

    用户端下载文件流程与相关类图的关系

    简单类图:

    storj_down_class_simple

    代码流程摘要:

    metainfo, streams, err := cfg.Metainfo(ctx)
    if err != nil {
       return err
    }
    
    readOnlyStream, err := metainfo.GetObjectStream(ctx, src.Bucket(), src.Path())
    if err != nil {
       return convertError(err, src)
    }
    
    download := stream.NewDownload(ctx, readOnlyStream, streams)
    
    1. 客户端uplink根据本地配置信息生成一个storj.Metainfo对象metainfo和一个streams.Store对象streams
    2. 由metainfo.GetObjectStream()根据传入的路径信息创建一个storj.ReadOnlyStream对象`readOnlyStream``
    3. 最终由控制类stream.Download操作对象streams与对象readOnlyStream完成相关文件数据下载操作

    详细扩充类图:

    storj_down_class

    全文完

    相关文章

      网友评论

          本文标题:Storj用例场景与流程分析

          本文链接:https://www.haomeiwen.com/subject/mznelqtx.html