12 KiB
12 KiB
抖音App技术架构文档
1. 架构设计
1.1 整体架构
graph TD
A[用户设备] --> B[React Native App]
B --> C[API Gateway]
C --> D[用户服务]
C --> E[内容服务]
C --> F[推荐服务]
C --> G[直播服务]
C --> H[消息服务]
D --> I[用户数据库]
E --> J[内容存储]
F --> K[推荐引擎]
G --> L[直播CDN]
H --> M[消息队列]
subgraph "客户端层"
B
end
subgraph "服务层"
C
D
E
F
G
H
end
subgraph "数据层"
I
J
K
L
M
end
1.2 客户端架构
graph TD
A[React Native] --> B[Redux Store]
A --> C[React Navigation]
A --> D[Native Modules]
B --> E[用户状态]
B --> F[内容状态]
B --> G[UI状态]
D --> H[相机模块]
D --> I[音视频处理]
D --> J[推送通知]
D --> K[本地存储]
subgraph "状态管理"
B
E
F
G
end
subgraph "原生功能"
D
H
I
J
K
end
2. 技术栈描述
2.1 前端技术栈
- 跨平台框架: React Native 0.72 + TypeScript 5.0
- 状态管理: Redux Toolkit + RTK Query
- 导航: React Navigation 6.0
- UI组件: React Native Elements + 自定义组件库
- 动画: React Native Reanimated 3.0
- 手势: React Native Gesture Handler
- 视频播放: react-native-video 6.0
- 相机: react-native-vision-camera 3.0
- 图片处理: react-native-fast-image
2.2 后端技术栈
- API网关: Kong Gateway
- 用户服务: Node.js + Express + TypeScript
- 内容服务: Node.js + Express + TypeScript
- 推荐服务: Python + FastAPI + TensorFlow
- 直播服务: Node.js + WebRTC + FFmpeg
- 消息服务: Node.js + Socket.io + Redis
- 数据库: PostgreSQL 14 + Redis 7.0
- 文件存储: AWS S3 + CDN
2.3 基础设施
- 容器化: Docker + Kubernetes
- CI/CD: GitLab CI + ArgoCD
- 监控: Prometheus + Grafana
- 日志: ELK Stack (Elasticsearch + Logstash + Kibana)
- 错误追踪: Sentry
- 性能监控: New Relic
3. 路由定义
3.1 应用内路由
| 路由 | 页面组件 | 说明 |
|---|---|---|
| / | HomeScreen | 首页推荐页 |
| /following | FollowingScreen | 关注页 |
| /create | CreateScreen | 创作页 |
| /inbox | InboxScreen | 消息页 |
| /profile | ProfileScreen | 个人主页 |
| /discover | DiscoverScreen | 发现页 |
| /live | LiveScreen | 直播页 |
| /video/:id | VideoDetailScreen | 视频详情页 |
| /user/:id | UserProfileScreen | 用户主页 |
| /search | SearchScreen | 搜索页 |
| /settings | SettingsScreen | 设置页 |
| /camera | CameraScreen | 拍摄页 |
| /editor | EditorScreen | 视频编辑页 |
| /publish | PublishScreen | 发布页 |
| /login | LoginScreen | 登录页 |
| /register | RegisterScreen | 注册页 |
3.2 嵌套路由结构
TabNavigator
├── HomeStack
│ ├── HomeScreen
│ ├── VideoDetailScreen
│ └── UserProfileScreen
├── FollowingStack
│ └── FollowingScreen
├── CreateStack
│ ├── CameraScreen
│ ├── EditorScreen
│ └── PublishScreen
├── InboxStack
│ ├── InboxScreen
│ └── ChatScreen
└── ProfileStack
├── ProfileScreen
├── SettingsScreen
└── EditProfileScreen
4. API定义
4.1 用户相关API
用户注册
POST /api/auth/register
请求参数:
| 参数名 | 类型 | 必需 | 描述 |
|---|---|---|---|
| phone | string | 是 | 手机号 |
| password | string | 是 | 密码 |
| verificationCode | string | 是 | 验证码 |
| nickname | string | 是 | 昵称 |
响应示例:
{
"code": 200,
"message": "success",
"data": {
"userId": "123456",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
}
用户登录
POST /api/auth/login
请求参数:
| 参数名 | 类型 | 必需 | 描述 |
|---|---|---|---|
| phone | string | 是 | 手机号 |
| password | string | 是 | 密码 |
获取用户信息
GET /api/user/profile
请求头:
Authorization: Bearer {token}
响应示例:
{
"code": 200,
"data": {
"userId": "123456",
"nickname": "用户名",
"avatar": "https://example.com/avatar.jpg",
"bio": "个人简介",
"followerCount": 1000,
"followingCount": 500,
"likeCount": 5000,
"videoCount": 50
}
}
4.2 内容相关API
获取推荐视频
GET /api/feed/recommend
请求参数:
| 参数名 | 类型 | 必需 | 描述 |
|---|---|---|---|
| page | number | 否 | 页码,默认1 |
| limit | number | 否 | 每页数量,默认10 |
| lastId | string | 否 | 最后一条视频ID |
上传视频
POST /api/video/upload
请求参数(FormData):
| 参数名 | 类型 | 必需 | 描述 |
|---|---|---|---|
| video | file | 是 | 视频文件 |
| cover | file | 是 | 封面图片 |
| title | string | 是 | 视频标题 |
| description | string | 否 | 视频描述 |
| tags | array | 否 | 标签数组 |
4.3 互动相关API
点赞视频
POST /api/video/:id/like
评论视频
POST /api/video/:id/comment
请求参数:
| 参数名 | 类型 | 必需 | 描述 |
|---|---|---|---|
| content | string | 是 | 评论内容 |
| parentId | string | 否 | 回复的评论ID |
5. 服务器架构
5.1 微服务架构图
graph TD
A[API Gateway] --> B[Auth Service]
A --> C[User Service]
A --> D[Content Service]
A --> E[Feed Service]
A --> F[Live Service]
A --> G[Message Service]
B --> H[Redis Cache]
C --> I[PostgreSQL]
D --> J[Object Storage]
E --> K[Recommendation Engine]
F --> L[CDN Network]
G --> M[Message Queue]
subgraph "Gateway Layer"
A
end
subgraph "Business Services"
B
C
D
E
F
G
end
subgraph "Data Layer"
H
I
J
K
L
M
end
5.2 服务间通信
- 同步通信: HTTP/HTTPS + REST API
- 异步通信: Apache Kafka + RabbitMQ
- 服务发现: Consul + gRPC
- 负载均衡: Nginx + HAProxy
6. 数据模型
6.1 核心数据实体
用户实体
interface User {
id: string;
phone: string;
nickname: string;
avatar: string;
bio: string;
gender: 'male' | 'female' | 'other';
birthday: Date;
location: string;
followerCount: number;
followingCount: number;
likeCount: number;
videoCount: number;
isVerified: boolean;
verifiedType: 'personal' | 'enterprise' | 'institution';
level: number;
experience: number;
status: 'active' | 'inactive' | 'banned';
createdAt: Date;
updatedAt: Date;
}
视频实体
interface Video {
id: string;
userId: string;
title: string;
description: string;
videoUrl: string;
coverUrl: string;
duration: number;
width: number;
height: number;
size: number;
format: string;
tags: string[];
location: {
address: string;
latitude: number;
longitude: number;
};
musicId: string;
effects: string[];
filters: string[];
stickers: string[];
visibility: 'public' | 'private' | 'friends';
allowComment: boolean;
allowDownload: boolean;
viewCount: number;
likeCount: number;
commentCount: number;
shareCount: number;
downloadCount: number;
status: 'processing' | 'published' | 'rejected' | 'deleted';
moderationStatus: 'pending' | 'approved' | 'rejected';
createdAt: Date;
updatedAt: Date;
publishedAt: Date;
}
互动实体
interface Like {
id: string;
userId: string;
videoId: string;
createdAt: Date;
}
interface Comment {
id: string;
userId: string;
videoId: string;
parentId: string | null;
content: string;
likeCount: number;
replyCount: number;
status: 'active' | 'deleted';
createdAt: Date;
updatedAt: Date;
}
interface Follow {
id: string;
followerId: string;
followingId: string;
createdAt: Date;
}
6.2 数据库设计
用户表
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
phone VARCHAR(20) UNIQUE NOT NULL,
email VARCHAR(100),
nickname VARCHAR(50) NOT NULL,
avatar TEXT,
bio TEXT,
gender VARCHAR(10),
birthday DATE,
location VARCHAR(100),
follower_count INTEGER DEFAULT 0,
following_count INTEGER DEFAULT 0,
like_count INTEGER DEFAULT 0,
video_count INTEGER DEFAULT 0,
is_verified BOOLEAN DEFAULT FALSE,
verified_type VARCHAR(20),
level INTEGER DEFAULT 1,
experience INTEGER DEFAULT 0,
status VARCHAR(20) DEFAULT 'active',
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
CREATE INDEX idx_users_phone ON users(phone);
CREATE INDEX idx_users_nickname ON users(nickname);
CREATE INDEX idx_users_status ON users(status);
视频表
CREATE TABLE videos (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL REFERENCES users(id),
title VARCHAR(200) NOT NULL,
description TEXT,
video_url TEXT NOT NULL,
cover_url TEXT NOT NULL,
duration INTEGER NOT NULL,
width INTEGER NOT NULL,
height INTEGER NOT NULL,
size BIGINT NOT NULL,
format VARCHAR(20) NOT NULL,
tags TEXT[],
location_address VARCHAR(200),
location_latitude DECIMAL(10, 8),
location_longitude DECIMAL(11, 8),
music_id UUID,
effects TEXT[],
filters TEXT[],
stickers TEXT[],
visibility VARCHAR(20) DEFAULT 'public',
allow_comment BOOLEAN DEFAULT TRUE,
allow_download BOOLEAN DEFAULT TRUE,
view_count INTEGER DEFAULT 0,
like_count INTEGER DEFAULT 0,
comment_count INTEGER DEFAULT 0,
share_count INTEGER DEFAULT 0,
download_count INTEGER DEFAULT 0,
status VARCHAR(20) DEFAULT 'processing',
moderation_status VARCHAR(20) DEFAULT 'pending',
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
published_at TIMESTAMP WITH TIME ZONE
);
CREATE INDEX idx_videos_user_id ON videos(user_id);
CREATE INDEX idx_videos_status ON videos(status);
CREATE INDEX idx_videos_created_at ON videos(created_at DESC);
CREATE INDEX idx_videos_published_at ON videos(published_at DESC);
7. 第三方服务集成
7.1 云服务
- 视频存储: AWS S3 / 阿里云OSS
- CDN加速: CloudFront / 阿里云CDN
- 直播服务: Agora / 腾讯云直播
- 推送服务: Firebase Cloud Messaging / 极光推送
7.2 AI服务
- 内容审核: 阿里云内容安全 / 腾讯云天御
- 人脸识别: Face++ / 腾讯云人脸识别
- 语音识别: 科大讯飞 / 百度语音识别
- 推荐算法: 自研推荐引擎 + 机器学习平台
7.3 支付服务
- 应用内购买: Apple App Store / Google Play
- 第三方支付: 支付宝 / 微信支付 / PayPal
8. 部署和发布策略
8.1 部署架构
graph TD
A[Git Repository] --> B[CI/CD Pipeline]
B --> C[Build Stage]
B --> D[Test Stage]
B --> E[Deploy Stage]
C --> F[Docker Image]
D --> G[Test Results]
E --> H[Kubernetes Cluster]
H --> I[Staging Environment]
H --> J[Production Environment]
I --> K[Integration Tests]
J --> L[Monitoring & Alerting]
8.2 发布流程
- 开发阶段: 功能开发 → 单元测试 → 代码审查
- 测试阶段: 集成测试 → 性能测试 → 安全测试
- 灰度发布: 5%用户 → 20%用户 → 50%用户 → 100%用户
- 监控回滚: 实时监控 → 异常告警 → 快速回滚
8.3 环境配置
- 开发环境: 本地开发 + 开发服务器
- 测试环境: 功能测试 + 集成测试
- 预发布环境: 生产数据副本 + 真实流量测试
- 生产环境: 多区域部署 + 负载均衡
8.4 监控告警
- 应用监控: 错误率、响应时间、吞吐量
- 基础设施监控: CPU、内存、磁盘、网络
- 业务指标监控: 用户活跃度、内容发布量、互动数据
- 告警机制: 实时告警 + 分级处理 + 自动恢复
8.5 备份策略
- 数据备份: 每日全量备份 + 实时增量备份
- 灾备方案: 异地多活 + 数据同步 + 故障切换
- 恢复测试: 定期演练 + 恢复时间验证 + 数据完整性检查