系统设计分析法之场景

117 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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