如何基于libp2p构建一个端到端加密传输的分布式存储云盘


一、项目回溯

希望能自研一些存储需求方属性的C端应用。

5460c7e28ef980de96d66633b330f98b.png

这种C端类型的Killer级应用,暂选定为具有端到端加密、文件分片、种子高速下载、用户间分享、外部文件导入等特性的网盘和云协作工具,因此我们启动了这个项目。

d82d54d241573cf9d1825221259cb196.png

95258c0ce269257d4a5585ffadce3083.png

二、目标

  • 为客户提供可演示的个人数据中心Demo
  • 验证IPFS-Libp2p分布式上传下载的传输效率
  • 积累业务相关技术,培养团队默契

三、业务模型

graph LR
start[登录] -->  conditionA{校验}
conditionA -- YES --> conditionC{拉取用户所有信息}
conditionA -- NO --> conditionB{提示注册}
conditionC -- YES --> printA1[分片加密上传]
conditionC -- YES --> printA2[分片解密下载]
conditionC -- YES --> printA3[密钥管理]
conditionC -- YES --> printA4[配置管理]
conditionB -- YES --> printC[生成密钥信息]
conditionB -- YES --> printD[分配存储空间]
conditionB -- YES --> printE[保存用户信息]
printA1 --> stop1[结束]
printA2 --> stop1[结束]
printA3 --> stop1[结束]
printA4 --> stop1[结束]
printC --> stop[结束]
printD --> stop[结束]
printE --> stop[结束]

四、整体架构

4.1 前端

webpack
- build
- config
vue
- oss-server
- pb
- store
- router
- src
- views
- components
- element-ui
- utils
- keystore
- libp2p

4.2 后端

@徐潇

五、成果&完成度

基于libp2p网络传输协议封装(文件上下传,Node状态、接口通信)

libp2p的Vuex状态管理

src/store/modules/libp2p.js

基于libp2p的PB协议通信

src/utils/libp2p/index.js

账户状态与路由控制(登录、注册、注销)

src/permission.js

端多密钥对生成功能

src/utils/keystore/crypto.js

前端文件/文件树操作(新增文件、新增文件夹)

src/views/fileexplorer/index.vue

文件传输状态控制(上传、下载、暂停、速度计算)

src/utils/uploader.js

src/utils/downloader.js

六、疑难杂症&解法

异步语义转为同步语义

promise,async,await

WebCrypto的好处以及限制

好处:浏览器原生支持,效率和兼容性最好,支持最全,最标准

限制:需要在https下使用。

https及wss浏览器限制

必须https,所以必须wss,导致存储端必须用nginx代理证书,增加横向扩展成本。

使用worker实现浏览器中上传、下载、分片、加密

浏览器是单线程模型,使用worker执行异步串行任务,防止UI阻塞

asmcrypto.js的加密提速(40倍)

基于asm.js和WebCrypto的AES\RSA加密实现,提速更快。

asm.js最早由Mozilla牵头发起,从页游提速需求而来,是一个JavaScript的严格的子集,编译器可以将 C / C++ 代码编译成这种叫做 asm.js 的 JavaScript 变体,执行编译速度逼近本地原生应用。

目前比较火的WebAssembly就是Mozilla,Google,Microsoft, ,Apple对asm.js的标准化过程,适合浏览器端的强计算密集型场景。

asm.js由来最详细的介绍

并行传输速度精度调参策略

  • 网络连接建立之初(植入头数据,使得速度曲线抖动平滑)
  • 分片零界点有跳跃

a721d20240b109a81040d4bc152697cc.png

七、可复用经验点

  • 如果我们未来有做云端文件管理系统,可以复用。

  • 前端工程可为未来的雾存储和计算PaaS平台提供一个基本的MIS框架。

  • libp2p + Protocol Buffer的传输解决方案。

  • 存储端(分布式)- 控制端(中心式)调度架构。

八、QA & 未来计划

  • webcrypto补充实现(历史遗留)
  • 文件删除功能(期望能补上)
  • 入驻libp2p社区项目(PR素材)

声明:嘉乐的SOHO | 版权所有,违者必究 | 如未注明,均为原创 |

本网站采用CC BY-NC-SA 3.0国际化协议进行授权

转载:转载请注明原文链接 - 如何基于libp2p构建一个端到端加密传输的分布式存储云盘


只有汗水不会欺骗你