基于go-zero框架的butane-netdisk微服务网盘系统

项目基本介绍和技术使用情况

项目开源地址:butane123/butane-netdisk: 一个基于go-zero框架的微服务网盘系统 (github.com)

这是一个轻量级云盘微服务系统,基于go-zero实现,官网:go-zero帮助文档

开发背景

butane-netdisk的开发初衷,是通过设计一个云盘系统,解决资源上传共享问题,为用户提供一个高效的资源存储平台,使用户能够更方便快捷地进行资源分享。

项目技术栈&开发环境

  • 服务端框架:go-zero
  • 数据库:Mysql
  • 缓存:Redis
  • 本地环境:Golang 1.18
  • 容器管理:Docker-Compose
  • 服务注册、发现中心:Etcd
  • 服务监控:PrometheusGrafana
  • 链路追踪:Jaeger
  • 存储引擎:COS,官网:腾讯云COS帮助文档

其他小插件说明

使用JWT Token工具,生成了接口验证Auth的token,保证用户数据传输的安全

使用Squirrel工具,在go-zero框架中简化了Sql语句的编写

使用jordan-wright写的email工具,进行邮箱验证码的发送

使用go-uuid工具,方便UUID的生成

使用ApiFox工具,生成了在根目录下的接口测试导出文件butane-netdisk.openapi.json,标准是openapi-3.0.1版本

使用Goctl-Swagger插件,可以自行生成用于接口介绍的swagger网页

项目目录树介绍

butane-netdisk:.
├─common //通用工具包
│  └─utils
└─service //服务层├─repository //中心存储池服务│  ├─api │  ├─filePath│  ├─model│  └─rpc├─share //文件分享服务│  ├─api│  └─model├─user //用户信息服务│  ├─api│  ├─model│  └─rpc└─user_repository //个人存储池服务├─api├─model└─rpc

微服务内容简述

该项目的业务逻辑思想来源于当前市场上的其他主流网盘。

repository_pool 中心存储池资源管理服务

存储所有上传文件(注意不含文件夹)。

根据网盘存储系统的思想,文件分享保存后,不需要在中心存储池中复制一份,只需要在个人存储池复制即可,即不同个人存储池的文件共享一个中心存储池的文件。

share_basic 文件分享服务

将用户个人存储池中的文件分享等服务。

user_basic 用户信息服务

用户的信息相关等服务。

user_repository 个人存储池资源管理服务

存储用户上传文件、文件夹的简单信息。

存储结构就像一颗树一样,存储的每个值可能对应是文件夹或者文件,如果是文件夹则repository_id值为空,ext是0;
如果是文件,则repository_id可以去关联中心存储池的id,ext表示文件后缀,parent_id就表示该节点的父母节点的id。

根据网盘存储系统的思想,中心存储池的文件,映射到个人存储池中对应的userId数目可能为0,也可能不止1,即拥有同一个文件的用户可能不止一个,也可能一个也没有。
但个人存储池中的文件一定在中心存储池中找得到,即一定拥有repositoryId。

部分接口特别说明

  • fileListQuery是指在指定的文件夹里查询文件。
  • shareBasicSave是指把中心存储池的文件保存到自己的存储池下。
  • fileUpload中的文件秒传思想就是根据文件的md5码判断该文件在中心存储池是否存在,若存在则秒传成功,不存在则继续传。

如何运行该系统

先做好准备工作

  • 填写工具类中的设置常量

    • 为系统的验证码发送邮箱申请授权码,并填写EmailAuthCode等值。注意邮箱要开启SMTP功能服务。
    • 申请COS存储桶,并填写BucketNameWithAPPID、SecretID、SecretKEY等值。

再运行基础服务:

  • 运行ectd,并在每个服务的yaml文件中配置相应的地址和端口号
  • 运行redis,并在每个服务的yaml文件中配置相应的地址和端口号
  • 运行Mysql,并在每个服务的yaml文件中配置相应的地址、端口号、用户名和密码等信息
    记得每次都要改一下redis的host!

最后运行项目:

  • Windows环境直接运行脚本start.bat文件即可。
  • Linux环境,先运行startRpc.sh文件,再运行startApi.sh文件即可。
  • 或者直接运行四个服务中的共7个yaml文件即可。

最后

感谢GetcharZp/cloud-disk: 基于go-zero实现的网盘系统作者的贡献。

本项目是作者学习golang的项目。在构造并完善该项目的过程中,还是学习到了很多内容的。

若有其他问题的欢迎指出。

go语言实现的一个基于go-zero框架的微服务网盘系统butane-netdisk相关推荐

  1. 基于Python Flask框架的共享自习室预约系统的设计与实现-计算机毕业设计源码+LW文档

    1.1选题背景 信息技术的发展改变了我们的生活方式,许多行业的管理模式发生了根本性改变,特别是零售业受到电子商务强烈的冲击,越来越多的人参与到网购中.许多传统行业逐渐凋零,蓬勃发展的信息技术带来了大量 ...

  2. c语言编程实现二进制计算器,本程序是用纯C语言编的一个基于命令行的四则运算计算器。主要用于计算四则运算表达式的值,同时可以实现四...

    本程序是用纯C语言编的一个基于命令行的四则运算计算器.主要用于计算四则运算表达式的值,同时可以实现四 2016-08-22 0 0 0 暂无评分 其他 1 积分下载 如何获取积分? 本程序是用纯C语言 ...

  3. DIY一个基于树莓派和Python的无人机视觉跟踪系统

    DIY一个基于树莓派和Python的无人机视觉跟踪系统 无人机通过图传将航拍到的图像存储并实时传送回地面站几乎已经是标配.如果想来点高级的--在无人机上直接处理拍摄的图像并实现自动控制要怎么实现呢?其 ...

  4. 树莓派 python 无人机_DIY一个基于树莓派和Python的无人机视觉跟踪系统

    DIY一个基于树莓派和Python的无人机视觉跟踪系统 无人机通过图传将航拍到的图像存储并实时传送回地面站几乎已经是标配.如果想来点高级的--在无人机上直接处理拍摄的图像并实现自动控制要怎么实现呢?其 ...

  5. 一个基于.Net+Vue开发的开源权限工作流系统

    今天给大家推荐一个开源权限工作流系统,一个快速开发框架. 项目简介 这是一个基于.Net 5开发的权限管理.工作流系统框架.借鉴了Martin Fowler企业级应用开发思想,框架选项都是使用最新的技 ...

  6. php异业联盟平台源码,基于ThinkPHP5.1框架开发的B2C在线商城系统PHP源码

    会员优惠 会员优惠 月费会员8折.年费会员5折.永久会员2折 源码介绍 基于ThinkPHP5.1框架开发的B2C在线商城系统PHP源码,支持WAP手机端+微信小程序+支付宝小程序+多种支付方式! 这 ...

  7. 光伏储能容量优化MATLAB论坛,【推荐】基于需求响应的光伏微网储能系统多目标容量优化配置!...

    北极星储能网讯:基于需求响应的光伏微网储能系统多目标容量优化配置/周楠,樊玮,刘念,林心昊,张建华,雷金勇 研究背景 当前,大规模分布式光伏并网和消纳困难,弃光严重.在光伏微网中配置合理容量的储能设备 ...

  8. 推荐一个基于 Spring Boot+MyBatis Plus+JWT 的问卷系统!

    你好呀,我是 Guide!这里是 JavaGuide 的「优质开源项目推荐」第 8 期,每一期我都会精选 5 个高质量的 Java 开源项目. 时间过的真快,不知不觉「优质开源项目推荐」系列已经持续半 ...

  9. 一个基于.Net Core开发的适合外贸商城系统

    今天给大家推荐一个适合外贸的商城系统. 项目简介 这是一个基于.Net Core开发的,兼容PC.平板.移动端的商城系统.被下载次数超过300w,拥有最活跃的成员,由专业团队开发与支持.支持PayPa ...

最新文章

  1. flutter打包的app有多大_Flutter-最近搞了个项目(常用控件,第三方基本库)-底部导航,登录,启动画面,webview等...
  2. jhipster 配置 mysql_JHipster技术栈定制 - JHipster Registry配置信息加密
  3. 我的世界javaui材质包怎么下载_【我的世界指南】七、使用皮肤
  4. Spring Boot中使用PostgreSQL数据库
  5. 冒泡排序 oj - Google 搜索
  6. WebSocket-java实现
  7. 【OpenCV 例程200篇】26. 图像的旋转(以原点为中心)
  8. [CSS3] touch-action设置移动端拖动行为
  9. 2D空间中求线段与圆的交点
  10. 京东商品价格查询易语言代码
  11. python矩形法求定积分_如何用矩形法(梯形法)求定积分
  12. 【华人学者风采】于非 加拿大卡尔顿大学
  13. 电脑蓝牙突然无法使用,解决办法来了
  14. 联想e470加装固态硬盘_联想e470能不能加固态硬盘?
  15. 伦敦 quant_伦敦统一用户组11
  16. python爬网易云_python爬网易云音乐-知了汇智
  17. JMeter基础系列(八) JMeter断言之JSON断言
  18. oa办公系统都有哪家?
  19. 金融系统性风险的网络模型
  20. 闲鱼无货源怎样选品,能够做到日入几百?

热门文章

  1. 6.又双叒叕背包模拟
  2. 从IPv4到IPv6那消失的IPv5哪去了?
  3. google search
  4. 2022年广东省安全员A证第三批(主要负责人)考试题模拟考试题库模拟考试平台操作
  5. 网狐、6878 您所填写的推荐人不存在或者填写错误,请检查后再次注册
  6. C与C++游戏项目练习4:弹跳的小球2.0
  7. Qt中重定义的解决方案
  8. 通用管理系统顶部及侧面导航栏简易制作
  9. Activity启动模式singleInstance
  10. 修复恢复可疑的SQLServer数据库