三种节点的用例
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- 客户端uplink首先根据指定的冗余策略(Redundancy Scheme)计算出所需的存储空间(rs_size),然后向satellite节点的overlay服务(grpc服务)请求所需存储空间
- satellite节点返回提供具体存储空间的节点信息(node数组)
- 客户端uplink向satellite节点的pointerdb服务(grpc服务)请求存储带宽分配的计费信息PayerBandwidthAllocation结构(简称pba)用于计费
- satellite节点返回pba结构
- 客户端uplink向所有分配的storage节点的piecestore服务(grpc服务)上传具体数据分片
- storage节点向satellite节点提交存储带宽分配agreement信息
- 客户端uplink生成上传数据文件的元数据信息(pointer结构)
- 客户端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)
- 客户端uplink根据本地配置信息生成一个storj.Metainfo对象
metainfo
和一个streams.Store对象streams
- 由metainfo.CreateObject()根据传入的路径信息创建一个storj.MutableObject对象
obj
- 由obj.CreateStream()创建一个storj.MutableStream对象
mutableStream
- 最终由控制类stream.Upload操作对象
streams
与对象obj
完成相关文件数据上传操作
详细扩充类图:
storj_upload_class用户端下载文件的流程
以下只列举节点间的grpc交互流程(忽略其它流程细节,详细消息结构请查阅相关proto文件)
storj_down_sequential- 客户端uplink首先向satellite节点的overlay服务(grpc服务)请求指定路径的文件的元数据(pointer)
- satellite节点返回指定路径的文件的元数据(pointer),具体存储节点信息(node数组),以及pba结构
- 客户端uplink将返回的元数据(pointer)组装成storj.Object结构
- 客户端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)
- 客户端uplink根据本地配置信息生成一个storj.Metainfo对象
metainfo
和一个streams.Store对象streams
- 由metainfo.GetObjectStream()根据传入的路径信息创建一个storj.ReadOnlyStream对象`readOnlyStream``
- 最终由控制类stream.Download操作对象
streams
与对象readOnlyStream
完成相关文件数据下载操作
详细扩充类图:
storj_down_class
网友评论