持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情
Scenario 场景
Ask Features/QPS/DAU/Interfaces。
问面试官:
-
需要设计哪些功能(也可自己想)
-
需承受多大访问量?
- 日活跃用户DAU
- Twitter:MAU(Monthly Active Users) 衡量网站用户数的重要指标:313M+,DAU:150M+(一般MAU是DAU的2倍)
第一步Step 1:Enumerate,把Twitter的功能罗列出来 ●Register、Login ●User Profile Display / Edit ●Upload Image / Video ●Search ●Post/Share a tweet ●Timeline/News Feed ●Follow 、Unfollow a user
第二步Step 2: Sort,选出核心功能,因为你不可能这么短的时间什么都设计 ●Post a Tweet ●Timeline,某一个用户的信息 ●News Feed,所有信息流 ●Follow 1 Unfollow a user ●Register I Login
- 日活跃用户(DAU,Daily Active User)
- 月活跃用户(MAU,Monthly Active User)
- 读/写频率(QPS,Queries Per Second)
并发用户Concurrent User :
- 日活跃用户 * 每个用户平均每日请求次数(估算) / 一天多少秒=150M*60.86400=100k
- 峰值Peak = Average Concurrent User * 3(通常 2~9 倍都是合理的)=300k
- 快速增长的产品 Fast Growing: MAX peak users in 3 months = Peak users * 2
读频率Read QPS (Queries Per Second):300k 写频率Write QPS(发帖、点赞、评论):5k
分析出 QPS 帮助确定设计系统的规模:
- QPS = 100:单机低配服务器
- QPS = 1K:稍好的中高配服务器(需考虑单点故障、雪崩问题等)
- QPS 达到 1M:1000 台 Web 服务器集群(需考虑容错与恢复问题,某一台机器挂了怎么办,如何恢复)
QPS 和 Web Server/数据库之间的关系:
- 一台 Web Server 的承受量约为 1K QPS
- 一台 SQL Database 的承受量约为 1K QPS(如果数据库访问中涵盖大量的 JOIN 和索引相关查询,这一数值会更小)
- 一台 NoSQL Database(如 Cassandra)承受量约为 10K QPS
- 一台 NoSQL 缓存 Database(如 Memcached 内存 KV 数据库)承受量约为 1M QPS