# 新网盘 **Repository Path**: ljc_man/new-cloud-storage ## Basic Information - **Project Name**: 新网盘 - **Description**: No description available - **Primary Language**: C++ - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2025-06-22 - **Last Updated**: 2025-07-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 云存储项目分析报告 ## 项目概述 这是一个基于C++开发的云存储系统,项目经历了从v1.0到v5.0的五个主要版本迭代,展现了从单体应用到微服务架构的演进过程。项目实现了用户注册登录、文件上传下载、文件列表管理等核心功能。 ## 技术栈分析 ### 核心技术栈 - **后端框架**: wfrest (基于workflow的HTTP服务器框架) - **数据库**: MySQL - **加密**: OpenSSL (SHA256哈希、JWT令牌) - **构建工具**: CMake - **编程语言**: C++17 - **云存储**: 阿里云OSS - **消息队列**: RabbitMQ (v3.0+) - **RPC框架**: SRPC (v4.0+) ### 依赖库 - **wfrest**: HTTP服务器框架 - **workflow**: 异步网络库 - **OpenSSL**: 加密库 - **jwt**: JWT令牌库 - **nlohmann/json**: JSON处理 - **alibabacloud-oss-cpp-sdk**: 阿里云OSS SDK - **SimpleAmqpClient**: RabbitMQ客户端 - **protobuf**: 序列化库 - **srpc**: RPC框架 ## 代码规模统计 ### 各版本代码行数对比 | 版本 | 代码行数 | 增长量 | 增长率 | 主要变化 | |------|----------|--------|--------|----------| | v1.0 | 1,168行 | - | - | 单体应用基础架构 | | v2.0 | 1,268行 | +100行 | +8.6% | 集成阿里云OSS存储 | | v3.0 | 1,441行 | +173行 | +13.6% | 引入RabbitMQ消息队列 | | v4.0 | 18,181行 | +16,740行 | +1162% | 微服务架构+SRPC+Protobuf | | v5.0 | 18,515行 | +334行 | +1.8% | 微服务架构优化 | ### 代码规模分析 #### 代码增长趋势 - **v1.0 → v2.0**: 小幅增长,主要是OSS集成相关代码 - **v2.0 → v3.0**: 适度增长,消息队列架构带来的复杂性 - **v3.0 → v4.0**: 爆发式增长,微服务架构导致代码量激增 - 引入SRPC框架和Protocol Buffers - 服务拆分带来大量样板代码 - 自动生成的protobuf代码占很大比重 - **v4.0 → v5.0**: 微调优化,代码量基本稳定 #### 代码复杂度分析 1. **v1.0-v3.0**: 代码量适中,架构相对简单 2. **v4.0-v5.0**: 代码量大幅增加,但主要原因: - 自动生成的protobuf代码(.pb.h/.pb.cc文件) - 微服务架构的样板代码 - 服务间通信的接口定义 #### 开发效率影响 - **正面影响**: 微服务架构提高了模块化程度和可维护性 - **负面影响**: 代码量激增可能影响新人理解和维护成本 - **建议**: 应该区分核心业务代码和自动生成代码的比例 ## 版本演进分析 ### v1.0 - 单体应用架构 **特点**: - 所有功能集成在一个可执行文件中 - 直接文件系统存储 - 基础的用户认证和文件管理 **核心模块**: - `CloudiskServer`: 主服务器类,采用装饰者模式 - `Sigup/Sigin`: 用户注册/登录模块 - `UserInfo`: 用户信息管理 - `FileUpLoad/FileDownLoad`: 文件上传/下载 - `FileList`: 文件列表管理 - `CryptoUtil`: 加密工具类 **启动方式**: ```bash cd v1.0 g++ -o disk *.cc -lwfrest -ljwt -lssl -lcrypto ./disk ``` ### v2.0 - 云存储集成 **主要变化**: - 集成阿里云OSS存储 - 引入CMake构建系统 - 代码结构重组(include/src分离) **新增模块**: - `OSSManage`: 阿里云OSS管理类 **启动方式**: ```bash cd v2.0 mkdir build && cd build cmake .. make ../disk ``` ### v3.0 - 消息队列架构 **主要变化**: - 引入RabbitMQ消息队列 - 分离生产者和消费者服务 - 异步文件处理 **架构变化**: - `prosrc/`: 生产者服务源码 - `consrc/`: 消费者服务源码 - `proinclude/coninclude/`: 对应头文件 **新增模块**: - `RabbitMqPro`: 消息生产者 - `RabbitMqCon`: 消息消费者 **启动方式**: ```bash cd v3.0 mkdir build && cd build cmake .. make # 启动两个服务 ../disk # 主服务 ../yunStorage # 存储服务 ``` ### v4.0 - 微服务架构 **主要变化**: - 完全微服务化架构 - 引入SRPC框架 - 反向代理服务器 - Protocol Buffers通信 **服务拆分**: - `reverseProxyServer`: 反向代理服务器 - `signService`: 登录注册服务 - `usrInfoService`: 用户信息服务 - `fileListService`: 文件列表服务 - `uploadService`: 文件上传服务 - `downloadService`: 文件下载服务 - `yunStorageService`: 云存储服务 **启动方式**: ```bash cd v4.0 mkdir build && cd build cmake .. make # 启动所有微服务 cd ../bin ./reverseProxyServer & ./signService & ./usrInfoService & ./fileListService & ./uploadService & ./downloadService & ./yunStorageService & ``` ### v5.0 - 架构优化 **主要变化**: - 微服务架构的进一步优化 - 代码结构调整 - 性能优化 ## 项目结构分析 ### 目录结构 ``` 项目根目录/ ├── v1.0/ # 单体应用版本 │ ├── *.h/*.cc # 源码文件 │ ├── static/ # 静态资源 │ └── file/ # 文件存储目录 ├── v2.0/ # OSS集成版本 │ ├── include/ # 头文件 │ ├── src/ # 源码 │ ├── build/ # 构建目录 │ └── static/ # 静态资源 ├── v3.0/ # 消息队列版本 │ ├── proinclude/ # 生产者头文件 │ ├── prosrc/ # 生产者源码 │ ├── coninclude/ # 消费者头文件 │ ├── consrc/ # 消费者源码 │ └── build/ # 构建目录 ├── v4.0/ # 微服务版本 │ ├── include/ # 公共头文件 │ ├── src/ # 各服务源码 │ ├── protobuf/ # Protocol Buffers定义 │ ├── bin/ # 可执行文件 │ └── build/ # 构建目录 └── v5.0/ # 优化版本 └── (类似v4.0结构) ``` ### 模块调用关系 #### v1.0 调用关系 ``` CloudiskServer (主服务器) ├── Sigup (用户注册) ├── Sigin (用户登录) ├── UserInfo (用户信息) ├── FileUpLoad (文件上传) ├── FileList (文件列表) ├── FileDownLoad (文件下载) └── CryptoUtil (加密工具) ``` #### v4.0/v5.0 微服务调用关系 ``` ReverseProxyServer (反向代理) ├── signService (登录注册服务) ├── usrInfoService (用户信息服务) ├── fileListService (文件列表服务) ├── uploadService (文件上传服务) ├── downloadService (文件下载服务) └── yunStorageService (云存储服务) ``` ## 核心功能分析 ### 1. 用户认证系统 - **注册**: 用户名密码注册,密码加盐哈希存储 - **登录**: JWT令牌认证机制 - **安全**: SHA256哈希 + 随机盐值 ### 2. 文件管理系统 - **上传**: 支持文件上传到本地/OSS - **下载**: 文件下载功能 - **列表**: 用户文件列表查询 - **去重**: 基于SHA256文件哈希去重 ### 3. 存储系统 - **本地存储**: v1.0版本使用本地文件系统 - **云存储**: v2.0+集成阿里云OSS - **异步处理**: v3.0+使用RabbitMQ异步处理 ### 4. 前端界面 - **技术栈**: HTML + CSS + JavaScript + jQuery + Bootstrap - **页面**: 注册、登录、主页、文件上传 - **交互**: Ajax异步请求 ## 启动项目指南 ### 环境依赖 1. **系统要求**: Linux/Unix系统 2. **编译器**: GCC 7.0+ (支持C++17) 3. **数据库**: MySQL 5.7+ 4. **消息队列**: RabbitMQ (v3.0+需要) 5. **云服务**: 阿里云OSS账号 (v2.0+需要) ### 依赖安装 ```bash # 安装基础依赖 sudo apt-get install build-essential cmake sudo apt-get install libssl-dev libcurl4-openssl-dev sudo apt-get install mysql-server mysql-client libmysqlclient-dev # 安装workflow和wfrest git clone https://github.com/sogou/workflow.git cd workflow && make && sudo make install git clone https://github.com/wfrest/wfrest.git cd wfrest && make && sudo make install # 安装其他依赖 sudo apt-get install libjwt-dev sudo apt-get install nlohmann-json3-dev ``` ### 数据库初始化 ```sql CREATE DATABASE newCloudDisk; USE newCloudDisk; CREATE TABLE tbl_users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) UNIQUE NOT NULL, password VARCHAR(255) NOT NULL, salt VARCHAR(20) NOT NULL, signup_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE tbl_user_file ( id INT AUTO_INCREMENT PRIMARY KEY, uid INT NOT NULL, filename VARCHAR(255) NOT NULL, hashcode VARCHAR(64) NOT NULL, size BIGINT NOT NULL, upload_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (uid) REFERENCES tbl_users(id) ); ``` ### 启动步骤 #### v1.0版本 ```bash cd v1.0 g++ -std=c++17 -o disk *.cc -lwfrest -ljwt -lssl -lcrypto -lpthread ./disk # 访问 http://localhost:8888/user/signup ``` #### v4.0/v5.0版本 ```bash cd v4.0 # 或 v5.0 mkdir build && cd build cmake .. make cd ../bin # 启动所有服务 ./reverseProxyServer & ./signService & ./usrInfoService & ./fileListService & ./uploadService & ./downloadService & ./yunStorageService & # 访问 http://localhost:8888/user/signup ``` ## 改进建议 ### 1. 安全性改进 - **敏感信息**: OSS密钥硬编码在代码中,应使用环境变量或配置文件 - **SQL注入**: 存在SQL注入风险,应使用参数化查询 - **HTTPS**: 生产环境应启用HTTPS - **令牌刷新**: JWT令牌缺少刷新机制 ### 2. 代码质量改进 - **错误处理**: 缺少统一的错误处理机制 - **日志系统**: 缺少完善的日志记录 - **配置管理**: 硬编码配置应提取到配置文件 - **代码复用**: 存在重复代码,需要重构 ### 3. 架构改进 - **服务发现**: 微服务版本缺少服务发现机制 - **负载均衡**: 缺少负载均衡策略 - **监控告警**: 缺少服务监控和告警 - **容器化**: 建议使用Docker容器化部署 ### 4. 功能改进 - **文件分片**: 大文件上传应支持分片 - **断点续传**: 支持文件断点续传 - **文件预览**: 支持图片、文档预览 - **文件分享**: 支持文件分享功能 - **回收站**: 支持文件删除和恢复 ### 5. 性能优化 - **数据库连接池**: 使用连接池管理数据库连接 - **缓存机制**: 引入Redis缓存热点数据 - **CDN加速**: 静态资源使用CDN加速 - **压缩传输**: 启用gzip压缩 ### 6. 运维改进 - **健康检查**: 添加服务健康检查接口 - **优雅关闭**: 实现服务优雅关闭 - **配置热更新**: 支持配置热更新 - **自动化部署**: 使用CI/CD自动化部署 ## 总结 这个云存储项目展现了从单体应用到微服务架构的完整演进过程,技术栈选择合理,功能实现基本完整。项目的亮点在于: 1. **架构演进清晰**: 从v1.0到v5.0的演进路径清晰,体现了软件架构的发展趋势 2. **技术栈现代化**: 使用了现代C++特性和优秀的开源库 3. **功能完整**: 实现了云存储系统的核心功能 4. **代码结构良好**: 采用了合适的设计模式和代码组织方式 但同时也存在一些需要改进的地方,主要集中在安全性、错误处理、配置管理等方面。总体而言,这是一个很好的学习项目,展现了现代C++在服务端开发中的应用。