这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天
v1
架构层面
包括以下组件:
数据存储: 使用分布式 NoSQL 数据库(如 MongoDB)存储用户数据、视频元数据等。(未实现)
网络层: 使用 API 网关 (如 Istio) 来处理来自客户端的请求并将其转发给后端服务。
应用层: 包含多个微服务,如认证服务、视频服务、评论服务等。每个服务使用grpc进行通信。
任务队列: 用于异步执行耗时任务,如视频转码(暂不实现)、推送通知等。使用k8s的Job来管理
缓存: 使用 Redis 作为缓存服务。
Kubernetes: 用来管理和部署微服务容器。(未实现)
目录结构
config/: 存储应用程序配置文件。(包括数据库连接配置、第三方服务配置、环境变量配置等)
data/: 存储应用程序数据。(视频文件,图片文件,日志文件,数据库备份等)
src/: 存储源代码。
auth/: 认证服务源代码。
video/: 视频服务源代码。
comment/: 评论服务源代码。
idl/: 存放idl文件
internal/: 内部使用的代码(服务的实现代码等)
test/: 存储测试代码。(单元测试,集成测试等)
scripts/: 存储脚本,(自动部署脚本,自动测试脚本等)
k8s/: 存储k8s相关配置文件,如(Deployment, Service, ConfigMap等。)
docs/: 存储文档(项目文档、接口文档)。
Tips
使用 thrift 工具将 thrift 文件编译成对应语言的代码,并在对应的目录中使用这些代码来实现对应的服务。
在 internal 目录中实现服务的细节,在 src 目录中暴露给外部调用的接口。这样可以更好地进行封装和隔离,保证服务的稳定性和安全性。
v2
概览
以上就是本次目录结构的整体预览,后面将一一赘述每个目录所表示的意思,我们先考虑实现一个单体项目,在后续慢慢迭代分布式的架构,本次是单体结构目录。
cmd
存放当前项目的可执行文件,就是把main函数所在的文件夹放入这个目录当中,保证这里面的代码尽可能少,在这里我还保存了初始化连接数据库的代码和路由的注册代码。
dal/db
数据库的初始化代码
router
路由的注册代码
config
保存一些配置信息,例如将数据库的连接信息封装成常量供上面数据库初始化代码中调用。
还有一些第三方配置环境变量配置等内容。
data
存储应用程序数据。(视频文件,图片文件,日志文件,数据库备份等)
docs
这个目录其实不是应用层面的内容了,里面存放的是开发过程中所记录的文档,保存在这里
internal
存放私有应用和库代码在这里面,主要存放应用的主要逻辑,这个目录下的代码不可以被外部访问(被编译器限制),里面还有若干子目录
errmsg
存放错误信息的目录
handle
对于注册路由的具体实现,存放在这个文件当中
middleware
存放中间件
model
存放模型结构体
repository
仓储层,在这里封装数据库的操作
response
在这里存放响应内容
service
这里面就是逻辑的具体实现,我springboot写多了看见这个service就格外亲切。
在这个文件夹中可以细化不同功能模块,以便后续迭代更新。
internal文件夹还可以根据项目的不断扩充而增加内容。具体日后再定。
k8s
存储k8s相关配置文件,如(Deployment, Service, ConfigMap等。)
我经验少,没用过k8s,组队队长补充的,具体内容我也不了解。
pkg
这里面封装对外暴露的包
test
这个目录下存放测试代码,单元测试集成测试等重要代码
scripts
这里面就是存储脚本,比方说自动部署脚本,自动测试脚本等内容
V3
api
cmd
存放当前项目的可执行文件,就是把main函数所在的文件夹放入这个目录当中,保证这里面的代码尽可能少,在这里我还保存了初始化连接数据库的代码和路由的注册代码。