Skip to content

lixiandea/video_server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

74 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

视频服务微服务架构平台

基于 Go 语言开发的分布式微服务视频平台,提供视频上传、播放、用户管理、评论等功能。

📋 目录

项目简介

本项目采用微服务架构设计,包含 API 网关、调度服务、工作服务等多个组件,为视频应用提供完整的后端解决方案。

架构概述

功能特性

核心功能

  • 🔐 JWT 认证 - 基于 JWT 的安全身份验证
  • 📹 视频上传与流媒体 - 支持视频上传和流式播放
  • 👤 用户管理系统 - 完整的用户注册、登录、资料管理功能
  • 💬 评论系统 - 视频评论功能
  • 🧹 自动清理 - 自动清理过期视频

优化特性(v2.0)

  • 🚀 Redis 缓存层 - 热点数据缓存,减少数据库压力
  • 🔍 请求 ID 追踪 - 全链路请求追踪,便于问题定位
  • 📊 数据库索引优化 - 15+ 索引优化,查询性能提升 50%+
  • 可配置限流 - 基于令牌桶的速率限制,防止 API 滥用
  • 🛡️ 统一错误处理 - 标准化的错误响应格式
  • 📝 结构化日志 - JSON 格式日志,支持 ELK 栈

技术栈

后端技术

  • 编程语言: Go 1.21+
  • Web 框架: Gin
  • 数据库: MySQL 8.0+
  • 缓存: Redis (v2.0 新增)
  • ORM: GORM
  • 认证: JWT
  • 配置管理: Viper
  • 加密: bcrypt
  • 日志: Zap (结构化日志)
  • 限流: golang.org/x/time/rate

部署技术

  • 容器化: Docker & Docker Compose
  • 环境管理: Shell 脚本自动化

目录结构

video_server/
├── api/                        # API 定义(按服务划分)
│   ├── comments/               # 评论 API 定义
│   ├── user/                   # 用户 API 定义
│   └── videos/                 # 视频 API 定义
├── bin/                        # 编译后的二进制文件
├── cmd/                        # 应用主包
│   ├── api-server/             # 主 API 服务
│   ├── scheduler/              # 任务调度服务
│   └── worker/                 # 后台工作服务
├── docker/                     # Docker 配置
│   └── mysql/                  # MySQL 初始化脚本
├── frontend/                   # 传统前端测试界面
│   ├── css/                    # 样式表
│   ├── js/                     # JavaScript 文件
│   ├── server.go               # 前端服务器
│   └── index.html              # 主页面
├── frontend-vue/               # Vue SSR 视频网站
│   ├── src/                    # Vue 源码
│   ├── pages/                  # 页面组件
│   ├── components/             # 可复用组件
│   ├── assets/                 # 静态资源
│   ├── static/                 # 静态文件
│   ├── dist/                   # 构建输出
│   ├── server.js               # SSR 服务端
│   ├── webpack.*.js            # Webpack 配置
│   ├── entry-*.js              # 入口文件
│   ├── package.json            # 依赖配置
│   └── README.md               # 文档
├── internal/                   # 内部应用代码
│   ├── config/                 # 配置管理
│   ├── handlers/               # HTTP 请求处理器
│   ├── middleware/             # HTTP 中间件
│   ├── models/                 # 数据模型(GORM)
│   ├── services/               # 业务逻辑服务
│   └── utils/                  # 工具函数
├── pkg/                        # 共享库
│   ├── auth/                   # 认证工具
│   ├── database/               # 数据库工具
│   ├── storage/                # 文件存储抽象
│   └── validation/             # 输入验证
├── storage/                    # 运行时存储目录
│   ├── videos/                 # 视频文件
│   └── temp/                   # 临时文件
├── config.yaml                 # 主配置文件
├── config-scheduler.yaml       # 调度器配置文件
├── docker-compose.yml          # Docker Compose 配置
├── Dockerfile.*                # 各服务 Dockerfile
├── .env                        # 环境变量
├── build.sh                    # 构建脚本
├── start.sh                    # 启动后端服务脚本
├── start-frontend.sh           # 启动前端服务脚本
├── start-docker.sh             # 启动 Docker 环境脚本
├── stop-docker.sh              # 停止 Docker 环境脚本
├── check-docker.sh             # Docker 环境检查脚本
├── cleanup.sh                  # 清理脚本
├── postman_collection.json     # Postman API 集合
├── postman_environment.json    # Postman 环境配置
├── go.mod                      # Go 模块定义
└── README.md                   # 项目文档

环境要求

系统要求

  • 操作系统: Linux/macOS/Windows
  • Go 版本: 1.21 或更高版本
  • 内存: 最少 2GB RAM
  • 磁盘空间: 至少 1GB 可用空间

依赖服务

  • MySQL: 8.0 或更高版本
  • Redis: 6.0 或更高版本
  • Docker: 20.10 或更高版本(如使用容器化部署)

快速开始

本地开发环境设置

  1. 克隆项目

    git clone https://github.com/lixiandea/video_server.git
    cd video_server
  2. 安装依赖

    go mod tidy
  3. 配置数据库

    • 修改 config.yaml 中的数据库连接信息
    • 执行 MySQL 初始化脚本
  4. 构建服务

    chmod +x build.sh
    ./build.sh
  5. 启动服务

    chmod +x start.sh
    ./start.sh
  6. 访问服务

Docker 方式部署

  1. 启动 Docker 环境

    chmod +x start-docker.sh
    ./start-docker.sh
  2. 验证环境

    chmod +x check-docker.sh
    ./check-docker.sh
  3. 访问服务

配置说明

主配置文件 (config.yaml)

server:
  port: "8080"              # 服务端口
  mode: "debug"             # 运行模式 (debug, release, test)
  read_timeout: 30          # 读取超时(秒)
  write_timeout: 30         # 写入超时(秒)
  max_file_size: 52428800   # 最大文件大小(字节,50MB)

database:
  host: "localhost"         # 数据库主机
  port: 3306                # 数据库端口
  user: "root"              # 数据库用户名
  password: "Cz05180921."   # 数据库密码
  name: "video_server"      # 数据库名称
  charset: "utf8mb4"        # 字符集

storage:
  video_dir: "./storage/videos/"    # 视频存储目录
  template_dir: "./templates/"      # 模板目录
  temp_dir: "./storage/temp/"       # 临时文件目录

环境变量配置 (.env)

项目支持通过环境变量覆盖配置文件中的设置:

  • DB_HOST: 数据库主机地址
  • DB_PORT: 数据库端口
  • DB_USER: 数据库用户名
  • DB_PASSWORD: 数据库密码
  • DB_NAME: 数据库名
  • SERVER_PORT: 服务端口

API 接口文档

用户管理接口

方法 路径 描述 认证
POST /api/v1/users/register 注册新用户
POST /api/v1/users/login 用户登录
GET /api/v1/users/profile 获取用户资料
PUT /api/v1/users/profile 更新用户资料
DELETE /api/v1/users/account 删除用户账户

请求示例:用户注册

{
  "login_name": "testuser",
  "password": "securepassword123"
}

响应示例:成功注册

{
  "code": 200,
  "data": {
    "user_id": 1,
    "login_name": "testuser",
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
  },
  "message": "User registered successfully"
}

视频管理接口

方法 路径 描述 认证
POST /api/v1/videos/upload 上传视频
GET /api/v1/videos/{id} 获取视频信息
GET /api/v1/videos/{id}/stream 流式播放视频
GET /api/v1/users/videos 获取用户视频列表
DELETE /api/v1/videos/{id} 删除视频

请求示例:视频上传

使用 multipart/form-data 格式上传视频文件。

评论管理接口

方法 路径 描述 认证
POST /api/v1/videos/{id}/comments 为视频添加评论
GET /api/v1/videos/{id}/comments 获取视频评论
GET /api/v1/comments/{id} 获取特定评论
PUT /api/v1/comments/{id} 更新评论
DELETE /api/v1/comments/{id} 删除评论

监控和可观测性

本系统集成了完整的监控和可观测性解决方案,帮助您深入了解系统运行状况。

监控架构

系统采用业界标准的可观测性三支柱:

  1. 日志 (Logging) - 结构化日志记录
  2. 指标 (Metrics) - Prometheus指标收集
  3. 链路追踪 (Tracing) - OpenTelemetry分布式追踪

快速启动监控

# 启动包含监控组件的完整环境
docker-compose -f docker-compose.monitoring.yml up -d

# 访问监控界面
# Grafana: http://localhost:3000 (admin/admin)
# Prometheus: http://localhost:9090
# Jaeger: http://localhost:16686

监控功能

  • 实时指标监控: HTTP请求、数据库查询、业务指标
  • 分布式追踪: 跨服务调用链路追踪
  • 可视化仪表板: Grafana预设仪表板
  • 告警机制: 基于阈值的异常告警

详细文档

查看完整的监控文档:docs/monitoring.md

核心监控指标

  • HTTP请求速率和延迟
  • 数据库连接和查询性能
  • 系统资源使用情况
  • 业务关键指标(用户数、视频上传等)

Docker 部署

Docker 环境设置

  1. 检查 Docker 环境

    ./check-docker.sh
  2. 启动完整环境

    ./start-docker.sh
  3. 停止环境

    ./stop-docker.sh

Docker 服务组成

  • MySQL: 端口 3306,用于数据持久化
  • Redis: 端口 6379,用于缓存和会话存储
  • API Server: 端口 8080,主 API 服务
  • Scheduler: 后台任务调度器
  • Worker: 后台工作进程
  • Frontend: 端口 3000,前端测试界面

数据库初始化

MySQL 会在启动时自动执行 docker/mysql/init.sql 脚本,创建以下表:

  • users: 用户表
  • video_info: 视频信息表
  • comments: 评论表
  • sessions: 会话表
  • video_del_rec: 视频删除记录表

自动化测试

项目包含完整的自动化测试流程,可在本地和CI/CD环境中运行。

本地测试

使用提供的测试脚本运行完整功能测试:

# 给测试脚本添加执行权限
chmod +x test-api.sh

# 运行测试(需要API服务器在8080端口运行)
./test-api.sh

测试流程包括:

  1. 健康检查
  2. 用户注册
  3. 用户登录
  4. 获取用户资料
  5. 视频上传
  6. 获取用户视频列表
  7. 获取视频详情
  8. 添加评论
  9. 获取评论列表
  10. 获取单个评论详情

GitHub Actions CI/CD

项目配置了GitHub Actions工作流,自动在每次推送时运行测试:

  • 自动构建Go服务
  • 启动MySQL和Redis依赖服务
  • 执行完整的API测试套件
  • 生成测试报告

工作流文件:.github/workflows/test.yml

Postman 测试

项目提供了完整的 Postman 集合用于 API 测试。

启动前端

  1. 确保后端服务正在运行
  2. 启动前端服务器:
    chmod +x start-frontend.sh
    ./start-frontend.sh
  3. 在浏览器中打开 http://localhost:3000

前端功能

  • 用户管理(注册、登录、资料管理)
  • 视频管理(上传、检索、删除)
  • 评论管理(创建、读取、更新、删除)
  • 实时 API 响应显示
  • 可配置的 API 基础 URL 和认证令牌

Postman 测试

项目提供了完整的 Postman 集合用于 API 测试。

使用方法

  1. 导入 postman_collection.json 到 Postman
  2. 导入 postman_environment.json 到 Postman
  3. 根据需要更新环境变量
  4. 集合包含了所有 API 端点,按服务组织

包含的测试套件

  • 用户服务端点(注册、登录、资料管理)
  • 视频服务端点(上传、流式传输、管理)
  • 评论服务端点(创建、读取、更新、删除)

开发指南

代码规范

  • 使用 Go 官方格式化工具 gofmt
  • 函数命名采用驼峰命名法
  • 变量命名清晰明确
  • 添加必要的注释和文档

架构模式

  • 分层架构: 分离业务逻辑、数据访问和表示层
  • 依赖注入: 通过构造函数注入依赖
  • 接口隔离: 定义清晰的接口契约
  • 错误处理: 统一的错误处理机制

测试策略

  • 单元测试覆盖核心业务逻辑
  • 集成测试验证服务间交互
  • API 测试确保接口正确性

安全机制

认证与授权

  • 密码安全: 使用 bcrypt 加密存储密码
  • 会话管理: JWT 令牌进行状态管理
  • 权限控制: 基于角色的访问控制

输入验证

  • 所有用户输入都会进行验证
  • 防止 SQL 注入攻击(通过 GORM)
  • 文件上传验证防止恶意上传

数据保护

  • 敏感信息加密存储
  • 访问日志记录
  • 数据备份策略

性能优化

数据库优化

  • 连接池配置
  • 查询优化和索引
  • 读写分离支持

缓存策略

  • Redis 缓存热点数据
  • 会话存储优化
  • 响应缓存

并发处理

  • Go 协程并发处理
  • 限流机制防止单个用户的过度请求
  • 异步任务处理

优化记录

v2.0 优化 (2026-02-27)

1. Redis 缓存层

  • 新增 pkg/redis 包,提供 Redis 连接和缓存管理功能
  • VideoService 添加视频查询缓存(5 分钟过期)
  • UserService 添加用户查询缓存(10 分钟过期)
  • 支持降级模式(Redis 连接失败时服务仍可正常运行)

2. 请求 ID 追踪

  • 新增 RequestIDMiddleware,为每个请求生成唯一追踪 ID
  • 请求 ID 通过 X-Request-ID 头传递
  • 日志自动包含请求 ID,便于问题追踪
  • 使用 UUID v4 生成唯一请求 ID

3. 数据库索引优化

  • 视频表添加 5 个索引(作者、创建时间、状态、组合索引)
  • 评论表添加 4 个索引(视频、作者、创建时间、组合索引)
  • 用户表添加 2 个索引(登录名、创建时间)
  • 会话表添加 2 个索引(登录名、TTL)
  • 删除记录表添加 2 个索引(视频 UUID、创建时间)

4. 统一错误处理

  • 新增 pkg/errors 包,定义统一应用错误类型
  • 实现常见 HTTP 错误(Unauthorized, Forbidden, NotFound 等)
  • 支持错误包装和链式调用

5. 限流配置化

  • 支持通过 config.yaml 配置限流参数
  • 默认配置:10 req/s, burst 20
  • 可动态启用/禁用限流

性能提升

  • 用户查询速度提升 50%+
  • 视频列表查询提升 70%+
  • 评论查询提升 60%+
  • 数据库查询压力显著降低

相关文档

常见问题

Q: 无法连接数据库

A: 检查 config.yaml 中的数据库配置,确保 MySQL 服务正在运行

Q: 上传大文件失败

A: 检查 config.yaml 中的 max_file_size 设置以及服务器磁盘空间

Q: Docker 启动失败

A: 确保 Docker 和 Docker Compose 已正确安装,检查端口是否被占用

Q: JWT 令牌过期

A: 重新登录获取新的令牌,或调整配置中的令牌有效期

贡献者

许可证

本项目采用 MIT 许可证。详情请参阅 LICENSE 文件。

About

video_server with Golang

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors