Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Crayon鑫
Paddle
提交
e61d9720
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看板
提交
e61d9720
编写于
5月 04, 2017
作者:
G
gongweibao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add cmds
上级
0d7d8990
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
28 addition
and
30 deletion
+28
-30
doc/design/file_mananger/README.md
doc/design/file_mananger/README.md
+28
-30
doc/design/file_mananger/src/filemanager.graffle
doc/design/file_mananger/src/filemanager.graffle
+0
-0
doc/design/file_mananger/src/filemanager.png
doc/design/file_mananger/src/filemanager.png
+0
-0
未找到文件。
doc/design/file_mananger/README.md
浏览文件 @
e61d9720
# Desgin doc: FileManager
## Objetive
在本文档中,我们设计说明了用户上传、下载、管理自己在PaddlePaddle Cloud上的文件所涉及到的模块和流程
<image
src=
./src/filemanager.png
width=
600
>
## Module
### Client
Client是用户操作的命令行程序,支持的命令如下
-
ls
```
bash
ls
```
-
cp
Client提供用户管理本地或者远程文件的命令行程序。
```
bash
cp
```
-
路径参数:
当用户输入一个命令的时候,最起码需要指定一个路径参数。这里有两种路径参数:LocalPath 或者 PFSPath。
-
sync
LocalPath:代表本地的一个路径
PFSPath:代表PaddlePaddle Cloud上的一个路径。它需要满足类似这样的格式:
`pfs://dir1/dir2`
。路径必须要以
`pds://`
开始。
```
bash
sync
```
-
路径参数的顺序
如果命令都有一个或者多个路径参数,那么一般第一个路径参数代表source,第二个路径参数代表destination。
-
mv
```
bash
mv
```
-
支持的操作命令
-
[
rm
](
cmd_rm.md
)
-
[
mv
](
cmd_mv.md
)
-
[
cp
](
cmd_cp.md
)
-
[
ls
](
cmd_ls.md
)
-
[
mkdir
](
cmd_mkdir.md
)
-
[
sync
](
cmd_sync.md
)
### Ingress
-
在kubernets中运行
-
做Http转发
-
注意配置session保持
-
做Http转发
、负载均衡
-
注意配置session保持,以便来自一个用户的访问可以定向到一个固定的机器上,减少冲突写的机会。
### FileServer
...
...
@@ -61,7 +55,7 @@ GET /file/chunk: Get a chunk info
POST /file/chunk: Update a chunk
```
为什么有chunk的抽象:
用户文件可能是比较大的,上传到Cloud或者下载到本地的时间可能比较长,而且在传输的过程中也可能出现网络不稳定的情况。为了应对以上的问题,我们提出了chunk的概念
。chunk由所在的文件偏移、数据、数据长度及校验值组成。
数据内容的上传和下载都是都过chunk的操作来实现的。由于chunk比较小(默认256K),完成一个传输动作的transaction的时间也比较短,不容易出错。
用户文件可能是比较大的,上传到Cloud或者下载到本地的时间可能比较长,而且在传输的过程中也可能出现网络不稳定的情况。为了应对以上的问题,我们提出了chunk的概念
,一个chunk由所在的文件偏移、数据、数据长度及校验值组成。文件
数据内容的上传和下载都是都过chunk的操作来实现的。由于chunk比较小(默认256K),完成一个传输动作的transaction的时间也比较短,不容易出错。
```
type Chunk struct {
...
...
@@ -101,16 +95,20 @@ DELETE /dir: Delete a directory
FileServer从Client crt提取Client的身份(username),限制其可以操作的volume。 我们选择这种。
### 关于cp
cp的关键在于需要Client端对比src和dst的文件chunks的checkSum是否保持一致,不一致的由Client Get或者Post完成。藉由上述的方法完成断点的数据传输。
cp的关键在于需要Client端对比src和dst的文件chunks的checkSum是否保持一致,不一致的由Client Get或者Post完成。藉由上述的方法完成断点的数据传输。 upload文件时,由于一个文件可以是多个FileServer可写的,存在冲突的机会,需要Client端在Post最后一个chunk的时候检查dest文件的MD5值是否和src的一致。
-
优化的方法:
优化的方法:
- dst文件不存在时,可以没有Get的过程,只有Post。
- 文件的chunks信息可以做cache,不用每次启动传输都去读和计算。这个由于比较复杂,第一期暂时不做。
-
dst文件不存在时,可以没有Get的过程,只有Post。
-
文件的chunks信息可以做cache,不用每次启动传输都去读和计算。这个由于比较复杂,第一期暂时不做。
-
小的技巧:
tricky:
- 可以用[Fallocate](https://golang.org/pkg/syscall/#Fallocate)生成sparse文件,让dst和src文件保持相同的大小。不同位置的chunk可以同时写入。
-
可以用
[
Fallocate
](
https://golang.org/pkg/syscall/#Fallocate
)
让dst和src文件保持相同的大小。这样,chunk就可以写固定的偏移上。
### 关于框架
准备拿出一点时间测试一下用
[
swagger-api
](
https://github.com/swagger-api/swagger-codegen
)
生成Client和FileServer的框架部分。如果框架生成好用,我们的精力就可以更多的放到逻辑本身上。
## 参考文档
-
[
Do you see tls?
](
https://github.com/k8sp/tls/blob/master/README.md
)
-
[
s3
](
http://docs.aws.amazon.com/cli/latest/reference/s3/
)
doc/design/file_mananger/src/filemanager.graffle
浏览文件 @
e61d9720
无法预览此类型文件
doc/design/file_mananger/src/filemanager.png
查看替换文件 @
0d7d8990
浏览文件 @
e61d9720
49.5 KB
|
W:
|
H:
48.5 KB
|
W:
|
H:
2-up
Swipe
Onion skin
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录