项目总体介绍:https://github.com/Jnu-Survey/Introduce
状态吗返回文档:https://github.com/Jnu-Survey/Introduce/blob/main/code.md
APIfox在线文档地址:https://www.apifox.cn/apidoc/shared-1a5c59a5-a923-47a7-8dac-a03c3e7b7577
后端项目开发负责人:HengY1Sky
借软件工程大作业的机会,想将自己所学所会运用起来,便在“没有拿任何奖项,只想做好的“驱动力下进行《暨数据》后端研发。
后端从设计到研发始终秉承着尽可能减小耗时,实现高并发低延时的想法,以Golang作为主要的后端开发语言,使用了Gin作为Web开发框架,加入了Redis作为缓存层,消息队列;Mysql设计数据表以及实现增删改查;MongoDb存储以及分析Json;并使用了RabbitMQ来实现异步削峰;同时使用了ZSTD无损压缩算法以及基础的对称与非对称加密等来实现后端系统。作为一个单机小团队项目,使用了Docker编排部署环境,尽可能满足需求。更多亮点请看下面描述
当然相比于企业等有组织有分工的体系,从容灾;日志;预警;备份等角度,本项目仍然存在很多不足。但是随着迭代会不断进行改进,我觉得我还是能继续优化的。
😊 前提准备:建议是Ubuntu20.4
- 自己设置好Go环境/Docker环境:谷歌搜一下一大堆
- 微信小程序个人中心拿到自己的appId/appSecret
- 因为涉及邮箱通知:可以到QQ邮箱等设置里面拿到第三方SMTP密钥
- 因为涉及七牛云第三方存储:到七牛云管理平台里面拿到accessKey/secretKey并创建对象桶
- 安装
SCREEN
后台运行
😊 配置Nginx反向代理
因为涉及Websocket,在反向代理的时候进行了协议升级
#PROXY-START/
location ^~ /
{
proxy_pass http://127.0.0.1:8880;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
#PROXY-END/
😊 配置common/secret.go
- 根据提示将第三方的密钥设置上去
- 自己设置用于整个项目的AES密钥以及偏移量
😊 配置conf
文件夹
conf里面的连接命令是根据docker编排的账号密码进行设置的
*如果你不使用Docker编排,那么你需要自己安装Mysql
;Redis
;MongoDB
;RabbitMQ
;
然后在conf
文件中与common/secret.go
修改连接命令并使用init.sql
手动初始化数据库即可。
具体版本可以参考
docker-compose
中的版本来进行安装
😊 编排docker-compose
- 解压
durable.zip
为durable
文件夹:为持久化外部挂载文件unzip -o -d ./ durable.zip
- 使用
docer-compose
命令直接启动环境:docker-compose up -d
😊 准备开始运行
- 编译2个启动文件
go build main.go
;go build rabbitConsume.go
- 打开2个后台
screen -S GinBackEnd ./main --config ./conf/prod/
;screen -S rabbitMq ./rabbitConsume
- 主语言:Goalng
- 开发框架:Gin
- 数据库:Mysql、MongoDB
- 中间件:Redis、RabbitMQ
- 对象存储:七牛云对象存储
- 其他:压缩算法ZSTD;WebSocket;布隆过滤器
- MongoDb操作的封装:实现了JSON直接到BSON然后直接存储到MongoDb中
- 使用NewTicker心跳进行对WebSocket维护;控制第三方邮件请求频率等
- 使用布隆过滤器:对一小时内的相同用户请求的过滤,防止邮件爆破
- 中间件实现了:流量统计;QPS限制;Token校验;用户信息加入上下文等功能
- 使用了ZSTD无损压缩算法:尽可能减小数据库存储压力
- 使用了RabbitMQ对高并发流量进行削峰:尽可能减小大量写操作造成死锁等问题
- 使用Gorm进行了数据库映射:实现了基本业务的增删改查
- 使用了WebSocket与Nginx配合进行服务升级:在填写表单页面能实时获取别人填写表格信息
- Admin管理端实现:等我把手上全部忙完了来写(还有项目🐶)
- 容灾|降级|预警:等我以后发现了些好的第三方再来用上