如何设计一个微博系统架构,简单微波系统的设计与实现

目录

引言 需求分析 概要设计 详细设计 发布/订阅问题 后记
1. 引言
年前面试 “百度网盘” 部门的 “后端高级开发工程师”,在三面的时候有道面试题印象挺深刻的 。
记得当时的面试官十分专业,问了很多项目相关且思考性很强的问题,还有几个是我平日在开发过程中积累过的优质 BUG,也都问到了 。
正在我沾沾自喜,以为考的都会,答的全对时,面试官开始发难了:“既然你项目上的思考还挺多,那我考你个项目设计的题目吧!首先说明,这些题目不是为了难倒谁,只是想看一下候选人掌握技术知识的深度和广度!”
如何设计一个微博系统架构,简单微波系统的设计与实现

文章插图
“?。?对对对!是这样的”,虽然心里百般忐忑 , 确实日常需求都是 CRUD(增删改查),架构类的设计很久没在项目里做过了,但还是表现出不慌不忙、胸有成竹之色 。
毕竟面试宝典有曰:面试中一半的时间都是在打心理战!只要做足功课,在考场上自信满满地防御,凭面试官一两个小时的进攻,我们也不会败下阵来 。
2. 需求分析
面试官问:“微博作为国民常用的社交类 APP,平时用吗?可以说一下微博常用的几个功能吗?”
微博还真没咋用,不过最近刚看了一篇关于微博的系统设计方案,于是不慌不忙地答到:“微博常见功能有刷微博,发帖子以及用户关注 , 此外,用户还可以点赞、评论、收藏和转发微博 。”
“好,那如果现在让你设计一个微博系统,结合刚才你说的几个核心功能,你会怎么设计?需要考虑系统高并发、高性能以及高可用性 。”
拿到 “产品需求” 之后,我首先在脑海中构建了一个核心功能的用例图,如下:
如何设计一个微博系统架构,简单微波系统的设计与实现

文章插图
每个需求说明如下:
  • 刷微博:用户打开手机 APP 端的微博主页,显示关注的好友最近发表的微博 , 按最近时间排序;
  • 发微博:用户可以发表不超过 140 字文本的内容,可以包含图片和视频;
  • 关注好友:用户可以关注其他用户 , 被关注者可以看到粉丝信息和粉丝数 。
3. 概要设计
微博的业务功能不难理解,但是并发量和数据量都非常大:
  • 10 亿级别的用户量,平均每个用户上千个帖子数,每个用户可关注上千个好友;
  • 高并发量,每秒十万级的平均页面访问,每秒万级的帖子发布量;
  • 用户分布不均匀,部分明星用户的帖子数量或者粉丝数量,超出普通用户几个数量级;
  • 时间分布不均匀,某个用户可能突然在某个时间点成为热点用户,其粉丝也可能陡增几个数量级 。
其具有一个典型社交类系统的特征,可归结为三点: