一句话介绍,实现极简版抖音。每一个应用都是从基础版本逐渐发展迭代过来的,希望同学们能通过实现一个极简版的抖音,来切实实践课程中学到的知识点,如 Go 语言编程,常用框架、数据库、对象存储等内容,同时对开发工作有更多的深入了解与认识,长远讲能对大家的个人技术成长或视野有启发。
项目服务地址-目前为本地服务
Github 地址:https://github.com/Aserck-ck/tiktok
陈则宇
1、负责应用的控制模块开发
2、协调整个团队的工作,督促项目进程
3、提供技术支持和解决问题,确保应用的稳定性和安全性。
张佳烨
1、负责数据库模块开发
2、负责应用的文档编写和项目管理
3、协助其他团队成员完成其任务。
徐鑫
1、负责中间件开发
2、测试和调试应用的功能,包括上传、浏览等操作
3.1 技术选型与相关开发文档
要解决的问题:
• 如何实现短视频的上传、存储和播放功能?
• 如何实现用户的注册、登录和个人信息管理功能?
• 如何实现用户之间的关注和点赞功能?
• 如何保证应用程序的高性能和可用性?
在技术选型方面,我们可以使用以下技术来实现这个极简版抖音应用:
- Go语言:作为主要的编程语言,Go语言具有高性能、简洁易用的特点,适合进行Web应用的后端开发。
- GORM框架:作为轻量级的ORM框架,GORM框架具有简洁易用和高效稳定的特点,适合进行MySQL数据库的交互操作。
- MySQL数据库:作为常用的关系型数据库,MySQL具有高性能和稳定性的特点,适合用于存储应用的数据。
- Redis数据库:作为内存数据库,Redis具有高性能、高可用性和高扩展性的特点,适合用于缓存和计数器等场景。
- FFmpeg:FFmpeg是一个功能强大、灵活多样的音视频处理工具,可以满足各种音视频处理需求。
场景分析环节,我们假设这个极简版抖音应用的用户量不是很大,初步估计一千个活跃用户,每个用户平均每天上传1个视频,每个视频大小约10MB左右。因此,按照当前选型和架构,总体预计需要存储空间约100GB,每天需要处理的数据量约100GB。为了保证应用的高可用性和稳定性,我们需要至少两台服务器来部署应用,其中一台用于应用的Web服务,另一台用于MySQL数据库的存储和处理。同时,我们需要配置负载均衡和备份机制,以确保应用的可用性和数据的安全性。
相关开发文档方面,我们需要编写以下文档: - 需求分析文档
a. 随着社交网络和移动互联网的普及,短视频应用逐渐成为用户消费娱乐的重要方式。极简抖音App旨在为用户提供简洁、方便的短视频观看体验,让用户随时随地通过移动设备浏览和分享短视频内容。
b. 目标用户和使用场景
极简抖音应用的目标用户是年龄在18-35岁之间,热爱观看和分享短视频的用户。使用场景包括在地铁、公交车、公共场所等需要短暂消磨时间的情况下观看和分享短视频。
c. 功能需求
○ 视频上传功能:用户可以将自己拍摄的短视频上传到平台。
○ 视频浏览功能:用户可以浏览平台上的短视频,包括通过主页、热门推荐、分类浏览等多种方式。
○ 视频点赞和评论功能:用户可以对喜欢的短视频进行点赞和评论。 - 设计文档:
a. 后端设计
后端设计采用MVC架构,主要包括以下模块:
○ 用户模块:处理用户登录、注册、修改个人信息等请求。
○ 视频模块:处理视频的上传、删除、点赞、评论等请求。
○ 消息模块:处理用户收到的点赞、评论等消息推送。 ○ 数据库模块:使用MySQL存储数据,包括用户信息、视频信息、评论信息、点赞信息等。
a. 数据库设计
数据库设计采用关系型数据库MySQL,主要包括以下表:
○ 用户表(user):存储用户信息,包括用户ID、用户名、密码、手机号、邮箱等。
○ 视频表(video):存储视频信息,包括视频ID、标题、描述、上传时间、点赞数、播放数等。
○ 评论表(comment):存储评论信息,包括评论ID、用户ID、视频ID、评论内容、评论时间等。
○ 点赞表(like):存储点赞信息,包括点赞ID、用户ID、视频ID、点赞时间等。
a. 总结
极简抖音APP实现了基本的短视频分享功能,包括视频的上传、浏览、点赞、评论和分享等。前端使用React Native开发,后端使用Go语言编写,采用MySQL存储数据。
3.2 架构设计 以用户登录为例共需要经过以下过程:
- 进入中间件SHAMiddleWare内的函数逻辑,得到password明文加密后再设置password。具体需要调用gin.Context的Set方法设置password。随后调用next()方法继续下层路由。
- 进入LoginHandler函数逻辑,获取username,并调用gin.Context的Get方法得到中间件设置的password。再调用service层的QueryrLogin函数。
- 进入QueryLogin函数逻辑,执行三个过程:checkNum,prepareData,packData。也就是检查参数、准备数据、打包数据,准备数据的过程中会调用models层的LoginDAO。
- 进入LoginDAO的逻辑,执行最终的数据库请求过程,返回给上层。
Handlers
对于handlers层级的所有函数实现有如下规范:
所有的逻辑由代理对象进行,完成以下两个逻辑 - 解析得到参数。
- 开始调用下层逻辑。
例如一个关注动作触发的逻辑:
NewProxyPostFollowAction().Do()
Service
对于service层级的函数实现由如下规范:
同样由一个代理对象进行,完成以下三个或两个逻辑
当上层需要返回数据信息,则进行三个逻辑:
- 检查参数。
- 准备数据。
- 打包数据。
当上层不需要返回数据信息,则进行两个逻辑: - 检查参数。
- 执行上层指定的动作。
例如关注动作在service层的逻辑属于第二类:
NewPostFollowActionFlow(...).Do()
Models
对于models层的各个操作,没有像service和handler层针对前端发来的请求就行对应的处理,models层是面向于数据库的增删改查,不需要考虑和上层的交互。
而service层根据上层的需要来调用models层的不同代码请求数据库内的内容。
3.3 项目代码介绍
这是一个基于Go语言实现的极简版抖音项目,旨在通过Go语言编程、常用框架、数据库、对象存储等内容的运用,让开发者更深入地了解和认识这些技术,促进个人技术成长和视野的拓宽。
该项目使用MySQL作为主要数据库,Redis作为缓存存储,同时使用对象存储服务OSS作为视频存储的解决方案。
在项目的开发过程中,开发者将按照需求文档设计接口,并使用相应的技术实现这些接口。在设计接口时,需要考虑接口的安全性、易用性、稳定性等因素,确保用户能够正常地使用这些接口。
除了开发部分,该项目还包括了文档编写、需求分析、设计和测试等环节,开发者需要在这些环节中积极参与和配合,确保项目的进展和质量。通过参与整个项目开发流程,开发者将会获得更全面的开发经验和技能,以及协作和沟通的能力。
建议从功能测试和性能测试两部分分析,其中功能测试补充测试用例,性能测试补充性能分析报告、可优化点等内容。
- 目前存在的问题:
• 目前只是实现了基本功能,还有一些高级特性需要进一步完善。
• 在多人协作开发过程中,需要进一步完善代码管理与协作流程,提高团队协作效率。
• 安全性方面还需要更多的完善,比如加强身份认证、数据加密等方面的处理. - 已识别出的优化项:
• 可以引入缓存技术来优化访问速度,比如使用Redis缓存热点数据。
• 可以使用消息队列来异步处理一些任务,减少请求的响应时间,提高用户体验。
• 可以使用Docker来打包应用程序,方便部署和管理。 - 架构演进的可能性:
• 可以考虑引入更多的云服务,比如云存储、CDN等,来支持更多的用户和流量。
• 可以考虑使用Serverless架构,以更好地适应流量高峰,提升应用程序的弹性和可伸缩性。 - 项目过程中的反思与总结:
• 在项目开发过程中,需要充分考虑用户体验和性能,保证系统的可用性和稳定性。
• 在团队协作过程中,需要建立有效的沟通渠道和协作流程,保证项目进度和质量。
• 在技术选型和架构设计上,需要深入思考和全面评估各种方案,选择最合适的技术和架构。