极限版抖音项目总结-工具选用 | 青训营笔记

144 阅读4分钟

这是我参与「第五届青训营」伴学笔记创作活动的第 12 天

本项目的需求就是实现一款极简版抖音,实现基础的一些功能,具体如下 本项目的需求就是实现一款极简版抖音,实现基础的一些功能,具体如下

开发环境与工具选用

本项目旨在运用Go语言的相关知识,进行团队开发

那么首选的架构,就是微服务架构

微服务架构的思想:彻底地服务化,将每个功能模块分别作为一个服务进行开发

在性能方面,相比传统的单体架构,微服务架构将每个服务相独立,可以将不同的功能模块部署在不同的服务器上,这样在硬件的层次上,减轻了请求负载,有利于提高服务的性能。

同时,微服务架构中不同功能模块(服务与数据库等)相互独立,其稳定性是高于传统的单体架构的,当某一功能模块发生故障时,并不会导致其他模块发生故障;而传统的单体架构,耦合度较高,当某一功能发生故障,可能会引起其他功能模块甚至整个项目发生故障,造成重大损失。

其次,在团队开发方面,团队可以将不同的服务分配给不同的开发人员,每个人都可以专注于自己负责的服务。这样可以提高开发效率,缩短开发周期。

总之,微服务架构可以提高团队的协作效率,加速开发周期,同时提供更好的可扩展性、灵活性和容错性。这些优势可以帮助团队更好地满足业务需求,同时减少开发和维护成本。

开发框架及工具选择

在本项目中,运用了Gin+gRPC的组合方式,用于完成业务请求的接收和处理

Gin框架号称是Go语言中最快的Web框架,地址:Gin Web Framework (gin-gonic.com)

gRPC是高性能开源的RPC框架:gRPC

使用gRPC自然离不开Protocol Buffer:Protocol Buffers Documentation (protobuf.dev)

Protocol Buffer的代码生成工具Protoc:protobuf: Protocol Buffers - Google's data interchange format

因为Gin框架需要校验结构体参数,因此选用了标签注入工具,用于参数校验

Protocol Buffer文件标签注入工具:protoc-go-inject-tag: Inject custom tags to protobuf golang struct

服务发现:Consul by HashiCorp

项目中用Gin来接受Web请求,暴露服务,gRPC框架用来处理业务,后期为了提高项目构建能力,会考虑迁移到Hertz+Kitex框架

数据库部分使用了MySQL+GORM:GORM - The fantastic ORM library for Golang, aims to be developer friendly.

使用MongoDB来对业务过程中的token进行存储:MongoDB: The Developer Data Platform | MongoDB

GORM是Go语言的ORM(对象关系映射)可以很好地简化开发流程,实现数据库与数据结构之间的映射,简化操作。

其他可以考虑实现的

MongoDB可以用Redis平替

可以加上Nginx进行负载均衡

工程管理

首先是文档方面,前期使用了飞书文档,对项目进行简单的分析和总结,飞书文档支持多种组件,支持多人协作,支持Markdown语法,是创作的首选:可多人实时编辑的在线文档软件-在线文档-飞书官网

后期为了说明项目的实现细节、全面介绍,采用了VitePress + Github Pages的方式

官网:VitePress | Vite & Vue Powered Static Site Generator (vuejs.org)

开源地址:vuejs/vitepress: Vite & Vue powered static site generator. (github.com)

为了便于项目的开发、管理与使用,使用了Makefile对常见命令进行封装

官方网址&下载地址:Make - GNU Project - Free Software Foundation

模型构建

项目开发初期,首先应该对数据模型进行分析和构建。

这里尝试了三种工具,分别对概念模型,逻辑模型,物理模型进行设计,并转换为SQL进行使用

  • PowerDesigner:
  • PDMater:
  • Navicat:

Power Designer强大是强大,但是版本太过老旧,不支持MySQL8,最高5,一些操作很反人类,导出的SQL可能会报错.......不是很推荐使用

PDMater是国产的软件,数据类型没有提示,写起来很不舒服,但是比Power Designer好一些,但也不是很推荐

Navicat是众所周知的DBMS,具有很多强大的功能,,其模型图构建简约,数据类型又很好的提示,与数据库适配性好,最终选用了Navicat

测试工具

这里使用的API测试工具是Talend API Tester,要说优点嘛,就是另类,不是清一色的Postman

离线可用,无需登录

也可以体验Apifox,文档,测试,压测等功能俱全

Android端App测试采用Android Studio的Android Visual Device

单元测试使用GoLand