Skip to content

FoBoHuang/feed-system

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Feed流系统 - 高性能社交媒体信息流

项目概述

这是一个基于Golang开发的高性能Feed流系统,采用推拉结合模式,支持亿级用户规模的社交媒体应用。系统设计遵循微服务架构原则,具备高可用、高并发、可扩展的特性。

核心特性

🚀 高性能架构

  • 推拉结合模式:智能选择推送或拉取策略,平衡读写性能
  • 分层缓存:多级缓存架构,大幅提升响应速度
  • 异步处理:基于Kafka的消息队列,解耦系统组件

🔧 技术栈

  • 后端语言:Golang 1.21+
  • Web框架:Gin
  • 数据库:PostgreSQL + GORM
  • 缓存:Redis
  • 消息队列:Apache Kafka
  • 部署:Docker + Kubernetes

📊 系统指标

  • 响应时间:P99 < 200ms
  • 并发能力:支持10万+ QPS
  • 可用性:99.9%+
  • 扩展性:支持水平扩展到亿级用户

系统架构

架构图

┌─────────────────────────────────────────────────────────────┐
│                        Load Balancer                        │
└─────────────────────┬───────────────────────────────────────┘
                      │
┌─────────────────────▼───────────────────────────────────────┐
│                    API Gateway                              │
│                  (Gin + JWT)                               │
└─────────────────────┬───────────────────────────────────────┘
                      │
┌─────────────────────▼───────────────────────────────────────┐
│                  Feed API Service                          │
│  ┌─────────────┐  ┌──────────────┐  ┌─────────────────┐   │
│  │User Service │  │Feed Service  │  │Like/Comment     │   │
│  └─────┬───────┘  └──────┬───────┘  └────────┬────────┘   │
│        │                 │                    │            │
└────────┼─────────────────┼────────────────────┼────────────┘
         │                 │                    │
┌────────▼─────┐  ┌────────▼──────┐  ┌────────▼────────┐
│   PostgreSQL │  │     Redis     │  │  Apache Kafka   │
│  (User Data) │  │   (Cache)     │  │ (Message Queue) │
└──────────────┘  └───────────────┘  └─────────────────┘
         │                                      │
         └──────────────────┬───────────────────┘
                            │
┌───────────────────────────▼───────────────────────────────┐
│                  Feed Worker Service                       │
│              (Async Message Processing)                   │
└────────────────────────────────────────────────────────────┘

核心组件

1. 用户服务 (User Service)

  • 用户注册、登录、认证
  • 用户关系管理(关注/取消关注)
  • 用户信息管理

2. Feed服务 (Feed Service)

  • 帖子创建、发布、删除
  • Feed流获取(推拉结合)
  • 帖子排序算法

3. 互动服务 (Interaction Service)

  • 点赞、取消点赞
  • 评论、删除评论
  • 分享功能

4. 消息队列 (Kafka)

  • 异步事件处理
  • 解耦系统组件
  • 流量削峰填谷

5. 缓存层 (Redis)

  • Feed流缓存
  • 用户会话存储
  • 热点数据缓存

推拉结合模式设计

模式选择策略

粉丝数量 ≤ 5000:推模式(Push)
粉丝数量 > 5000:拉模式(Pull)

推模式 (Push Model)

  • 适用场景:普通用户(粉丝数 ≤ 5000)
  • 优点:读取速度快,O(1)时间复杂度
  • 实现:发布时主动推送到所有关注者的timeline

拉模式 (Pull Model)

  • 适用场景:大V用户(粉丝数 > 5000)
  • 优点:存储成本低,写入性能好
  • 实现:读取时实时聚合关注者的帖子

混合策略

  • 智能切换:根据用户粉丝数量自动选择模式
  • 渐进推送:大V用户只推送给最活跃的1000个关注者
  • 冷热分离:结合用户活跃度进行优化

核心算法

1. 帖子排序算法

// 综合得分 = (用户权重 + 互动得分) × 时间衰减
score = (userWeight + engagementScore) * timeDecay

// 用户权重 = 1 + log10(粉丝数+1) × 0.5 + 关注数 × 0.01
userWeight = 1 + math.Log10(followers+1)*0.5 + following*0.01

// 互动得分 = 点赞数×0.1 + 评论数×0.2 + 分享数×0.3
engagementScore = likes*0.1 + comments*0.2 + shares*0.3

// 时间衰减 = e^(-小时数/24)
timeDecay = math.Exp(-hoursSinceCreated/24)

2. 缓存策略

  • 多级缓存:应用缓存 + Redis缓存
  • 缓存预热:启动时加载热点数据
  • 缓存失效:基于事件驱动的缓存更新
  • 缓存穿透:布隆过滤器防止缓存穿透

3. 分页游标

  • 游标编码:JSON格式,包含偏移量信息
  • 性能优化:避免深度分页的性能问题
  • 一致性保证:确保分页结果的一致性

API接口文档

用户相关接口

用户注册

POST /api/v1/users/register
Content-Type: application/json

{
  "username": "testuser",
  "email": "test@example.com",
  "password": "password123",
  "display_name": "Test User"
}

用户登录

POST /api/v1/users/login
Content-Type: application/json

{
  "username": "testuser",
  "password": "password123"
}

获取用户信息

GET /api/v1/users/{id}
Authorization: Bearer {token}

关注用户

POST /api/v1/users/follow
Authorization: Bearer {token}
Content-Type: application/json

{
  "user_id": "user-uuid",
  "following_id": "target-user-uuid"
}

Feed相关接口

创建帖子

POST /api/v1/posts
Authorization: Bearer {token}
Content-Type: application/json

{
  "content": "This is a test post",
  "image_urls": ["https://example.com/image1.jpg"]
}

获取Feed流

GET /api/v1/feed?cursor={cursor}&limit=20
Authorization: Bearer {token}

获取用户帖子

GET /api/v1/users/{id}/posts?offset=0&limit=20
Authorization: Bearer {token}

点赞帖子

POST /api/v1/posts/{id}/like
Authorization: Bearer {token}

创建评论

POST /api/v1/posts/{id}/comments
Authorization: Bearer {token}
Content-Type: application/json

{
  "content": "This is a comment",
  "parent_id": null
}

部署指南

Docker部署

1. 快速启动

cd deployments/docker
docker-compose up -d

2. 验证服务

# 健康检查
curl http://localhost:8080/health

# 查看服务状态
docker-compose ps

# 查看日志
docker-compose logs -f feed-api

Kubernetes部署

1. 构建镜像

docker build -f ../docker/Dockerfile -t your-registry/feed-system/api:latest ../..
docker build -f ../docker/Dockerfile.worker -t your-registry/feed-system/worker:latest ../..

2. 部署应用

cd deployments/k8s
kubectl apply -k .

3. 验证部署

# 查看Pod状态
kubectl get pods -n feed-system

# 查看服务状态
kubectl get svc -n feed-system

# 测试API
curl http://feed-system.local/health

性能优化

1. 数据库优化

  • 索引优化:为查询字段建立合适索引
  • 连接池:合理配置数据库连接池参数
  • 读写分离:主从复制,读写分离
  • 分库分表:按用户ID分片

2. 缓存优化

  • 缓存预热:启动时加载热点数据
  • 缓存更新:基于事件的缓存失效
  • 缓存穿透:布隆过滤器防护
  • 缓存雪崩:随机过期时间

3. 消息队列优化

  • 分区策略:按用户ID分区
  • 批量处理:批量处理消息
  • 背压机制:防止消息堆积
  • 重试策略:指数退避重试

4. 应用优化

  • 连接复用:HTTP连接池
  • 异步处理:非阻塞操作
  • 限流熔断:防止系统过载
  • 资源监控:实时性能监控

监控告警

关键指标

  • 响应时间:P99 < 200ms
  • 错误率:< 0.1%
  • 吞吐量:> 10万 QPS
  • 可用性:99.9%+

告警规则

  • API错误率过高
  • Feed生成时间过长
  • Worker队列积压
  • 数据库连接失败
  • Redis连接失败
  • Kafka连接失败

监控工具

  • Prometheus:指标收集
  • Grafana:可视化展示
  • Jaeger:链路追踪
  • ELK:日志分析

扩展性设计

水平扩展

  • 无状态服务:API服务无状态设计
  • 数据分片:按用户ID分片
  • 负载均衡:多实例负载均衡
  • 自动扩缩容:基于CPU/内存指标

垂直扩展

  • 资源调优:CPU、内存、磁盘优化
  • 参数调优:数据库、缓存参数优化
  • 架构升级:微服务拆分

安全性

认证授权

  • JWT认证:无状态认证
  • 权限控制:基于角色的访问控制
  • API限流:防止恶意攻击
  • CORS配置:跨域请求控制

数据安全

  • 数据加密:敏感数据加密存储
  • 传输加密:HTTPS传输
  • SQL注入:参数化查询
  • XSS防护:输入验证和转义

故障处理

常见故障

  • 数据库连接失败:检查网络连接和配置
  • Redis连接失败:检查Redis状态和配置
  • Kafka连接失败:检查Kafka集群状态
  • 服务不可用:检查Pod状态和资源使用情况

故障恢复

  • 自动重启:Pod失败自动重启
  • 健康检查:定期健康检查
  • 优雅降级:核心功能优先保障
  • 数据恢复:备份数据恢复

开发规范

代码规范

  • Go代码规范:遵循Go官方规范
  • 错误处理:统一错误处理机制
  • 日志规范:结构化日志记录
  • 测试规范:单元测试覆盖率>80%

API规范

  • RESTful设计:符合RESTful原则
  • 版本控制:URL版本控制
  • 错误响应:统一错误响应格式
  • 文档规范:OpenAPI规范

贡献指南

开发环境搭建

# 克隆代码
git clone https://github.com/your-org/feed-system.git
cd feed-system

# 安装依赖
go mod download

# 运行测试
go test ./...

# 启动服务
go run cmd/api/main.go

提交规范

  • 提交信息:遵循Conventional Commits
  • 代码审查:Pull Request审查
  • CI/CD:自动化测试和部署
  • 版本发布:语义化版本控制

许可证

MIT License - 详见 LICENSE 文件

联系方式

致谢

感谢所有为这个项目做出贡献的开发者和贡献者!


⭐ 如果这个项目对你有帮助,请给我们一个Star!

About

feed流系统

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published