CloudBackup
项目介绍
一个云备份项目,可以自动将本地计算机中指定的文件夹中需要的文件上传到服务器中,并且可以通过浏览器查看和下载。同时支持断点续传、热点管理、压缩存储...
支持功能
服务端模块划分
- 数据管理模块(管理备份文件信息)
- 网络通信模块(实现和客户端的通信,接受用户的请求)
- 业务处理模块(上传、下载、列表)
- 热点管理模块(非热点文件判定和压缩,对非热点文件进行文件压缩存储,并且用时解压)
- 用户管理模块(支持用户管理,对不同的用户进行备份容量限额)
客户端模块划分
- 数据管理模块(以前备份过的文件信息列表)
- 网络通信模块(实现和服务端的通信,上传需要备份的文件数据、客户端可以上传多种类型的文件到服务器中进行备份和管理。支持客户端浏览器下载文件,并且支持断点续传)
- 文件检测模块(监控指定的文件夹,获取文件夹内所有的文件信息)
- 界面管理模块(使用一定的前端技术进行装饰,支持客户端使用浏览器或者命令行来查看已备份文件列表)
技术选择
- 编程语言:
C89-C99/C++98-C++
- 系统环境:
Linux Centos7
- 协作工具:
git、gitee
- 编译器:
g++7.3
- 调试器:
gdb
- 序列化库:
json-cpp
- 数据压缩库:
bundle
- 协议库:
cpp-httplib
安装教程
待补充...
使用说明
待补充...
项目原理
工具封装
封装的 Filer 类
封装的 Jsoner 类
封装的 Config 类
- 服务器的
IP:PORT
- 数据库名和数据表名
- 热点判定时间标准
- 压缩包后缀名
- 源文件存放路径
- 压缩文件存放路径
-
URL
接口
数据管理
备份信息管理
- 文件的实际存储路径:当客户端需要下载文件时,需要知道历史备份文件再服务器中的实际路径
- 文件压缩包实际存储路径:非热点文件会被压缩,因此需要得知这些压缩包的路径,做解压后再返回响应
- 文件是否被压缩标志位:判断文件是否被压缩,如果没有被压缩就直接读取,有就解压再读取
- 文件属性信息:由于压缩导致文件属性无法直接获取,因此可以在压缩的时候就可以存储文件的属性信息,例如文件大小、文件最后一次修改时间、文件最后一次访问时间
- 发送请求资源获取对应的资源路径:就是
URL
中的 path
资源路径
如何管理数据呢?由于数据量简单,因此这里只采用文件来存储,等数据量大了再考虑使用 MySQL
。
- 涉及到数据访问,就使用
Hash
在内存中管理数据,以 path
作为 key
值,提高查询效率
- 涉及到持久管理,就使用
JSON
序列化文件把所有数据信息保存在文件中
为了更好管理数据,最好多封装一个类进行管理。
热点信息管理
测试环节
未来计划
以备份项目为主线, 逐步完善云备份项目,打造根据个人服务器, 自动化部署备份文件的高可用高性能云备份服务端
-
基于 http-lib+Thread-pool、log-system、jsoncpp、MySQL、React、bundle、doxygen 库的分支:
- ->Cpp-Serrver 基础版, 先保证基本的需求服务, 简单使用 Framer 做出精美的 Web 硬代码, 然后简单使用一些接口, 学习 Ajax API 来响应, 了解 JS 和 TS 的使用, 这一阶段主要是使用 Linux 工具和 JS/TS, 同时补充重要的笔记, 做下算法题目. 尝试熟练使用 telnet、Fiddle Classic、Postman 等网络工具, 保证全 Linux 化, VSCode 辅助开发.
- ->重构代码, 做可测试维护, 加强强日志系统的版本, 加入自己制作的日志系统
- ->购买较好的存储服务器和运行服务器, 做不同的测压测试, 开始查看 http-lib 的源码, 加入 MySQL 数据库, 尝试转化为多用户组的云备份, 租用一台存储服务器进行共享存储, 还有用户管理
- ->加入云备份的顶层应用, 博客自动部署系统(使用 Java)、成绩分析可视化(使用 Flask)、多用户纯备份应用(使用 React)
- ->购买多存储服务器, redis 的尝试, 加入中间件, 转化为高性能的软件
-
基于 mudou、spdlog、json、MySQl、Qt、LZMA-SDK、doxygen、以及 Jinja2、fmt 的分支: ...