这是我参与「第三届青训营 -后端场」笔记创作活动的的第 5 篇笔记。
本篇笔记主要是对抖音大项目的开发,以及相关技术栈进行简单的汇总。
课程总结
通过为期一个月的后端学习,一方面收获到很多后端开发知识,对课本上的理论知识有了深层次的理解,同时也了解到这些知识的企业级应用;另一方面,通过完成抖音后端开发项目,对学习到的知识加以运用,让知识学习地更加扎实。
项目总结
项目技术栈
本次项目主要应用到的技术包括:
- Gin:响应接口请求,实现路由分发
- Gorm:进行数据库操作
- MySQL:存储数据
- 腾讯云对象存储COS:存放用户发布的视频和封面截图
- 腾讯云数据万象:视频截帧作为封面
- JWT:鉴权token的生成与校验
项目结构
经过组内讨论,后端开发分为对外接口层(controller)、业务逻辑层(service)和数据操作层(model),此外还包括工具类(utils)、公共包(pkg)等。
项目时间线
项目的开发分为前期准备、接口开发、测试优化三个阶段。前期准备工作报告技术选型、数据表设计等;开发阶段成员分别完成负责的接口,并进行简单的测试;后期对代码进行整合,整体测试,并在性能和安全性方面作出优化。
项目实现
接口功能实现不做过多描述,主要对项目中应用到的框架进行概述。
- JWT 鉴权
JWT 全称 json web token,是基于 JSON 的一种信息传递方式。我们选择 JWT 实现用户鉴权。相比传统的 session 认证机制存在的开销大、不安全等缺点,基于 token 的鉴权机制,数据量小、传输速度快,可以缓解服务器的压力。另外,JWT的适用有效期短的场景,与本项目的更为契合。
- Gorm 框架
Gorm 是基于 Golang 语言开发的 orm 库,能够实现关系型数据库和对象之间的映射关系,支持多种关系型数据,不需要编写复杂的 SQL 语句,只需要给出对象类型和字段即可完成对数据的 CURD,简化建表查表等操作。与之类似的框架有.Net 开发中的 LINQ、Java 当中的 MyBatis 等。
- 服务器 HTTP 文件传输
在实现发布视频接口的初期,选择的方式是将上传的视频和封面截图存放在本地服务器的某个文件路径下,并使用 gin 实现服务器 HTTP 文件上传下载服务。用户获取 feed 流时,访问视频的播放链接,查询到视频文件存放路径并下载视频。
虽然这个方式能够实现视频发布与获取,但是几次测试后发现,视频下载速度缓慢,比较影响服务的性能。因此,经过调研,改用云存储来实现视频发布的功能。
- 腾讯云存储 COS
腾讯云COS提供了对象存储的服务,可以用来存储图片、视频、压缩包、css文件等。相比在本地服务器上搭建 HTTP 文件传输服务,使用云存储服务可以分担本地服务器 的存储压力、带宽成本等。如果多个用户同时访问服务器上的视频文件,可能会造成流量并发,导致带宽占用超出峰值,加载缓慢甚至无法访问。
同时,腾讯云 COS 还提供视频截帧的功能,截取上传视频的某一帧作为封面,并返回封面存放路径。
总结
本次抖音项目,团队成员共同开发,实现了所有接口的功能,取得较为满意的结果。通过这次的项目,将学到的知识在实际项目中应用,学习效果有非常大的提升。另外,组员之间相互协作,相互理解,在轻松的氛围下完成开发工作,对团队意识有了一定的培养。经过此次项目之后,大家都有很大的提升,不过仍存有一些问题,比如项目开始时间较晚,前期没有做好充足的工作准备;没有将课上学到的知识充分利用到项目当中。