社交网站建设——Feed流与关系链架构设计
一、社交网站总体架构
社交网站的核心是“人”与“内容”。构建一个能支撑百万、千万用户的社交平台,关键在于高并发架构设计。
采用前后端分离架构,前端以Vue/React构建交互层,后端基于微服务体系:
服务拆分:
-
认证服务:注册、登录、JWT、第三方OAuth、账号安全、黑名单
-
用户服务:用户资料、设置、实名认证、关注/粉丝、隐私配置
-
Feed服务:发帖、时间线生成(推/拉/混合模式)、点赞/评论/转发
-
媒体服务:分片上传、转码(FFmpeg)、封面、存储、CDN刷新
-
IM服务:实时消息,WebSocket/Netty,跨实例Redis Pub/Sub
-
搜索服务:Elasticsearch索引与查询(用户、帖子、话题)
-
推荐服务:召回+排序(协同过滤/内容/行为/机器学习)
-
管理服务:审核面板、内容下架、人工复审、数据报表
基础设施:MySQL(主数据)、Redis(缓存/计数器/分布式锁)、Kafka(事件流)、MinIO/OSS(媒体存储)
二、核心数据模型
-- 用户表 CREATE TABLE users ( id BIGINT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(64) UNIQUE, password_hash VARCHAR(255), display_name VARCHAR(128), avatar VARCHAR(255), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- 关注关系表 CREATE TABLE follows ( id BIGINT PRIMARY KEY AUTO_INCREMENT, follower_id BIGINT, followee_id BIGINT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, UNIQUE (follower_id, followee_id) ); -- 动态表 CREATE TABLE posts ( id BIGINT PRIMARY KEY AUTO_INCREMENT, user_id BIGINT, content TEXT, media JSON, -- [{"type":"image","url":"..."}] likes BIGINT DEFAULT 0, comments_count BIGINT DEFAULT 0, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
三、Feed流服务设计
Feed流是社交产品的核心。设计时需权衡两种模式:
推模式(Push/写扩散):
-
用户发帖时将内容推送给所有粉丝的收件箱
-
优点:读取快,用户获取Feed只需读自己的收件箱
-
缺点:大V发帖时需要推送给百万粉丝,开销巨大
-
适用场景:好友数少的场景
拉模式(Pull/读扩散):
-
用户获取Feed时,从所有关注对象的发件箱拉取内容并合并排序
-
优点:大V发帖成本低
-
缺点:读取时需要查询多个用户,延迟较高
-
适用场景:大V场景
混合模式:
-
普通用户使用推模式,大V使用拉模式
-
读取时合并推+拉的结果,实现最佳平衡
四、高并发处理
赞、踩、关注等高频操作用Redis存储:
-
以键值对方式存入Redis(如
like:post:123存储点赞用户列表) -
访问效率极高,数据存于内存
-
通过RDB和AOF持久化保证数据安全性
通知功能:使用消息队列(Kafka)进行异步通知,削减网站峰值,避免拥堵。Kafka具备每秒TB级的吞吐能力。
搜索功能:引入Elasticsearch支持用户、帖子、话题的全文检索,支持中文分词,性能极为出色。


