当前位置: 首页 > news >正文

面试场景题:请设计一个微信朋友圈系统

一、整体系统方案设计

1. 核心业务特性

  • 功能:发布(文字 / 图片 / 视频)、查看好友朋友圈、点赞 / 评论、删除、权限控制(屏蔽 / 仅自己可见等)
  • 技术特性:高并发(亿级 DAU)、读多写少(查看远多于发布)、数据量大、实时性中等(非强实时)、隐私性要求极高

2. 系统架构分层(微服务拆分)

用户端

接入层:Nginx+LVS

应用层

发布服务PostService

展示服务FeedService

互动服务InteractionService

权限服务PermissionService

中间件层

Redis集群

MQ队列RocketMQ

对象存储OSS

存储层

MySQL分库分表(主从)

3. 核心流程设计

(1)发布朋友圈流程
  1. 用户上传媒体(图片 / 视频)到 OSS,获取媒体 URL;
  2. 发布请求经接入层转发到PostService,校验内容合规、用户权限;
  3. 写入 MySQL 主库(朋友圈主表),异步删除该用户的朋友圈列表缓存;
  4. 可选:通过 MQ 发送 “发布成功” 通知(非核心流程)。
(2)查看朋友圈流程
  1. 用户请求拉取好友朋友圈,转发到FeedService
  2. 调用PermissionService获取该用户的好友列表屏蔽列表
  3. 优先从 Redis 缓存拉取好友朋友圈数据,缓存未命中则从 MySQL 从库读取,再回写缓存;
  4. 对数据做过滤(屏蔽用户、权限校验)、排序(时间倒序)、分页后返回。
(3)点赞 / 评论流程
  1. 请求转发到InteractionService,校验好友关系、屏蔽状态;
  2. 写入点赞 / 评论表(主库),异步调用 Redis 的INCR/DECR更新计数缓存;
  3. 通过 MQ 异步发送点赞 / 评论通知给朋友圈发布者(非实时,最终一致即可)。

4. 高可用 & 高并发优化

  • 服务集群化:所有微服务部署多实例,避免单点故障;
  • 分库分表:按user_id哈希分库分表,解决单库性能瓶颈;
  • 读写分离:MySQL 主库写、从库读,提升读性能;
  • 限流降级:接入层 / 应用层用令牌桶限流,高并发时降级非核心功能(如暂时隐藏点赞数);
  • 隐私校验:所有查询流程前置权限校验,避免泄露非好友的朋友圈数据。

二、缓存方案设计

核心目标:缓存热点数据,减少数据库访问,提升响应速度(Redis 作为核心缓存)。

1. 缓存数据结构与 Key 设计

缓存数据类型Key 设计数据结构说明
用户朋友圈列表feed:user:{user_id}:timelineZSetscore = 发布时间戳,member = 朋友圈 ID,支持排序 / 分页
单条朋友圈详情feed:post:{post_id}Hash存储内容、媒体 URL、可见范围等
朋友圈点赞 / 评论数feed:interaction:{post_id}:like/commentString计数器,用 INCR/DECR 更新
好友列表 / 屏蔽列表relation:friend:{user_id}/blockSet存储好友 / 被屏蔽用户 ID,快速校验权限

2. 缓存更新策略

  • 发布 / 删除朋友圈:先写数据库,再删除缓存(而非更新缓存),避免缓存与数据库不一致(缓存更新失败风险);
  • 点赞 / 评论:先写数据库,异步调用 RedisINCR/DECR更新计数(允许短暂最终一致);
  • 好友关系变更:主动删除对应的好友 / 屏蔽列表缓存,下次访问重新加载。

3. 缓存异常防护

  • 缓存穿透:对不存在的user_id/post_id缓存空值(过期时间 5 分钟);
  • 缓存击穿:热点朋友圈(如大 V 内容)设置永不过期,发布者删除时主动清理;
  • 缓存雪崩:缓存过期时间打散(基础时间 + 随机 0-60 秒),Redis 集群主从 + 哨兵部署。

三、数据库表设计方案

核心原则:满足第三范式为主,适当反范式(JSON 存储)提升读性能,按user_id分库分表。

1. 核心表结构设计

(1)朋友圈主表(moments_post)
字段名类型说明
post_idbigint主键(雪花算法,全局唯一)
user_idbigint发布者 ID(分库分表键)
contenttext文字内容(可为空)
media_listjson媒体 URL 列表(图片 / 视频,如 ["url1","url2"])
visible_scopetinyint可见范围:0 - 全部好友 1 - 仅自己 2 - 指定好友 3 - 不给谁看
target_usersjson可见 / 不可见用户列表(scope=2/3 时非空)
is_deletedtinyint软删除标记(0 - 未删 1 - 已删)
create_timedatetime发布时间
update_timedatetime更新时间
  • 索引:主键索引(post_id)、二级索引(user_id, create_time)(按用户 + 时间拉取)
(2)朋友圈点赞表(moments_like)
字段名类型说明
like_idbigint主键
post_idbigint朋友圈 ID
user_idbigint点赞者 ID(分库分表键)
is_canceledtinyint取消点赞标记(0 - 未取消 1 - 已取消)
create_timedatetime点赞时间
  • 索引:主键索引(like_id)、联合索引(post_id, user_id)(防止重复点赞)
(3)朋友圈评论表(moments_comment)
字段名类型说明
comment_idbigint主键(雪花算法)
post_idbigint朋友圈 ID
user_idbigint评论者 ID(分库分表键)
contentvarchar(512)评论内容
reply_to_idbigint回复的评论 ID(0 = 直接评论)
is_deletedtinyint软删除标记
create_timedatetime评论时间
  • 索引:主键索引(comment_id)、二级索引(post_id, create_time)
(4)好友关系表(friend_relation)
字段名类型说明
relation_idbigint主键
user_idbigint用户 ID(分库分表键)
friend_idbigint好友 ID
block_flagtinyint屏蔽标记(0 - 未屏蔽 1 - 已屏蔽)
create_timedatetime加好友时间
  • 索引:主键索引(relation_id)、联合索引(user_id, friend_id)

2. 表设计关键说明

  • 软删除:所有核心表用is_deleted标记删除,避免物理删除导致数据丢失,方便恢复;
  • 分库分表键:选择user_id(而非post_id),因为朋友圈读写均围绕 “用户” 展开,减少跨库操作;
  • 反范式优化media_list/target_users用 JSON 存储,避免多表关联,提升读效率(符合 “读多写少” 特性);
  • 全局唯一 ID:朋友圈 ID / 评论 ID 用雪花算法生成,避免分库分表后的主键冲突。

总结

  1. 系统架构:按 “发布 / 展示 / 互动 / 权限” 拆分微服务,接入层做负载均衡,存储层分库分表 + 读写分离,适配亿级用户高并发;
  2. 缓存策略:Redis 缓存热点数据(朋友圈列表 / 详情 / 计数),采用 “先写库后删缓存” 保证一致性,通过空值缓存、过期时间打散防护缓存异常;
  3. 数据库设计:核心表按user_id分库分表,软删除 + JSON 反范式优化,索引针对 “用户 + 时间”“朋友圈 ID + 用户 ID” 设计,兼顾性能和业务需求。
http://www.jsqmd.com/news/318431/

相关文章:

  • 2026年KK模组公司权威推荐:WON模组平台、KK模组、丝杠改制及再制造、TBI丝杠加工、丝杠维修保养、滚珠丝杠选择指南
  • 管理程序员用这三招,让他主动把活干到你拍手叫绝
  • 北京上门回收民国书,丰宝斋靠谱对接,藏家变现少走弯路
  • 2026最新雨生红球藻/虾青素/虾青素胶囊品牌推荐红青夫:科研引领健康,这家企业实力诠释行业标杆
  • 【计算机毕设】基于改进高斯混合模型的图割算法
  • 2026成都最新整装品牌top5推荐!金牛区/新都区等地优质企业权威榜单发布,环保健康与品质工艺双优助力理想家居生活
  • 光学全贴合技术如何提升工业液晶屏的可靠性与环境适应性
  • 66、SPI驱动ADXL345加速度计
  • 即时通讯项目--UserService
  • 【Git版本控制】-趣味解说Git核心知识
  • 2026最新虾青素胶囊品牌五大推荐!优质厂家口碑之选
  • STL——集合 set
  • 【深度好文】多模态嵌入模型两种实现方式详解:解决多模态RAG落地难题,值得收藏
  • AI圈炸锅!Kimi K2.5开源:代码生成+视觉理解,前端开发从此“躺平“
  • CHO/HEK293细胞重组蛋白表达|哺乳动物蛋白表达系统|蛋白表达技术指南
  • 2026年硫氧镁净化板厂家推荐:生物制药净化车间工程、十万级净化车间工程、硫氧镁净化板、电池净化车间工程、食品日化净化车间工程选择指南
  • 收藏必备:RAG应用问答对构建实战:从文档到客服机器人的高效路径
  • 2026年食品吸塑托盘厂家权威推荐榜:食品吸塑托盘/PET食品吸塑包装/一次性食品托盘/吸塑包装盒/选择指南
  • 收藏!月薪5k和50k的工程师差距在哪?AI大模型TPT揭秘工业决策新范式
  • 【算法】leetcode100 堆、栈 - 详解
  • 全解析LuatOS—MQTT
  • 收藏!AI悄然颠覆流程工业,工程师不进化将被淘汰?万华化学的工业AI实践给你答案
  • 博客
  • 2026成都最新全包装修企业top5推荐!金牛区/新都区等地优质全包装修公司权威榜单发布,环保品质与一站式服务双优助力安心家装
  • AI大模型就业风口:5大高薪岗位全解析,年轻人必看,建议收藏
  • 即使.NET大牛也常犯的10个C#错误
  • 论“AI元人文”构想与当代人工智能治理研究的范式对话
  • 【C语言】博客
  • 2026成都最新旧房装修改造企业top5推荐!金牛/新都区等地专业旧房翻新公司权威榜单发布,品质与口碑双优助力理想家居焕新
  • 告别手动复制粘贴!3分钟部署Moltbot:让AI主动帮你处理邮件、写代码的核动力牛马(含收藏级教程)