Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Crayon鑫
Paddle
提交
0d7d8990
P
Paddle
项目概览
Crayon鑫
/
Paddle
与 Fork 源项目一致
Fork自
PaddlePaddle / Paddle
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
0d7d8990
编写于
5月 04, 2017
作者:
G
gongweibao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add cp...
上级
33eadfb8
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
50 addition
and
6 deletion
+50
-6
doc/design/file_mananger/README.md
doc/design/file_mananger/README.md
+50
-6
未找到文件。
doc/design/file_mananger/README.md
浏览文件 @
0d7d8990
...
@@ -5,7 +5,7 @@
...
@@ -5,7 +5,7 @@
## Module
## Module
### Client
### Client
Client是用户操作的
界面
,支持的命令如下
Client是用户操作的
命令行程序
,支持的命令如下
-
ls
-
ls
...
@@ -39,8 +39,12 @@ mv
...
@@ -39,8 +39,12 @@ mv
### FileServer
### FileServer
FileServer是gorpc写的HttpServer, 用来接收Client的REST API的请求,自身由kubernets来管理。
功能说明:
REST API说明
-
gorpc写的HttpServer
-
响应外部的REST API的请求
-
在kubernets中运行
REST API说明:
-
file
-
file
...
@@ -56,6 +60,17 @@ DELETE /file: Delete a File
...
@@ -56,6 +60,17 @@ DELETE /file: Delete a File
GET /file/chunk: Get a chunk info
GET /file/chunk: Get a chunk info
POST /file/chunk: Update a chunk
POST /file/chunk: Update a chunk
```
```
为什么有chunk的抽象:
用户文件可能是比较大的,上传到Cloud或者下载到本地的时间可能比较长,而且在传输的过程中也可能出现网络不稳定的情况。为了应对以上的问题,我们提出了chunk的概念。chunk由所在的文件偏移、数据、数据长度及校验值组成。数据内容的上传和下载都是都过chunk的操作来实现的。由于chunk比较小(默认256K),完成一个传输动作的transaction的时间也比较短,不容易出错。
```
type Chunk struct {
filePos int64
checkSum uint32
len uint32
data []byte
}
```
-
dir
-
dir
...
@@ -67,6 +82,35 @@ DELETE /dir: Delete a directory
...
@@ -67,6 +82,35 @@ DELETE /dir: Delete a directory
## 流程
## 流程
### cp
### 关于文件权限
### 断点续传
-
每一个用户在Cloud注册后可以申请分配用户空间,系统默认会在CephFS上分配一个固定大小(比如初始10G)的、有所有权限的volume,对用户而言就是自己的
`home`
目录。用户彼此之间的数据是隔离的、无法访问的。用户的空间大小第一期也不允许扩大。
### sync
-
公共数据集合放到一个单独的volume下,对所有外部用户只读。由于其被读取的可能比较频繁,需要提高其备份数,防止成为热点文件。
### 关于认证
> 通信各方都需要有各自的身份证。一个公司可以自签名一个CA身份证,并 且用它来给每个雇员以及每个程序签署身份证。这样,只要每台电脑上都预先安 装好公司自己的CA身份证,就可以用这个身份证验证每个雇员和程序的身份了。 这是目前很多公司的常用做法
身份的认证来自于用户或者程序是否有crt标识身份,以及是否有可信的CA确认这个身份证是否有效。我们这里描述的crt涉及到两个部分,一个是Client端程序访问FileServer的crt,不妨称之为Client crt;另外一个是FileServer访问CephFS的crt,不妨称之为CephFS crt。
-
Client和FileServer相互认证的办法
`cloud.paddlepaddle.org`
需要有自己的CA,FileServer和注册用户也要为其生成各自的私钥(key)、crt。这样用户把CA、自己的key和crt下载到本地后,Client程序可以用之和FileServer可以做相互的认证
-
CephFS验证FileServer的身份的两种方法
-
第一种:每一个用户都有自己单独的访问CephFS crt。
用户访问其空间时,由FileServer读取它然后才可以在CephFS上完成操作。
-
第二种:CephFS crt只有一个,也就是admin crt,拥有所有volume的读写权限。
FileServer从Client crt提取Client的身份(username),限制其可以操作的volume。 我们选择这种。
### 关于cp
cp的关键在于需要Client端对比src和dst的文件chunks的checkSum是否保持一致,不一致的由Client Get或者Post完成。藉由上述的方法完成断点的数据传输。
优化的方法:
-
dst文件不存在时,可以没有Get的过程,只有Post。
-
文件的chunks信息可以做cache,不用每次启动传输都去读和计算。这个由于比较复杂,第一期暂时不做。
tricky:
-
可以用
[
Fallocate
](
https://golang.org/pkg/syscall/#Fallocate
)
让dst和src文件保持相同的大小。这样,chunk就可以写固定的偏移上。
## 参考文档
-
[
Do you see tls?
](
https://github.com/k8sp/tls/blob/master/README.md
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录