封底估算(back of the envelope estimate)
对于有些系统设计,我们需要估算读写数字,存储大小等等。
1 术语
QPS:Queries per second: 系统每秒处理查询请求数量
Peak QPS: 峰值QPS, 一般为QPS的2倍(极个别系统需要自行区分比如双11的峰值就是很多倍)
DAU:Daily active user: 日活用户(还有月活MAU和周活用户WAU)
CDN:Content Delivery Network 内容分发网络
2 存储单位
一字节byte等于8bit(位)
一个字母等于1byte(ASCII),中文大多数3bytes
一条推文:平均140个字母,就是140byte
一张图片:平均1MB(如果是设计专业图片网站,那么就要10MB以上了,具体问题具体分析)
3 例子
(1)推特
MAU:3亿月活用户
DAU:1.5亿日活用户
推文估算:一个用户每天平均发送2条
图片估算:10%包含图片
数据存储时间:5年
QPS:DAU * 2(2条推文)/ 24h / 3600s = 每秒3500
PEAK QPS = 7000
推文ID:64bit (雪花算法)
文本:140 字节
图片:1 MB
图片存储量:1 MB * 10% * 2 * 1.5亿 = 30TB / 天
5 年存储量:30TB * 365 * 5 = 55 PB
(2)Tiny URL
URL生成数:1亿每天 = 1160个每秒(写入数据库)
URL映射:假设10倍于URL生成数 11600 每秒(从短URL找到长URL)
数据存储时间:10年
存储大小:长短URL一起占100个字母,10年 * 100byte * 365 * 1亿 = 36.5TB
(3) 爬虫
预估:每月爬10亿个网站
QPS:10亿 / 30 / 24/ 3600 = 400/s
PEAK QPS = 800
预估网页大小: 500KB
每月存储: 10 亿 * 500 KB = 500TB
存放时间: 5年,500TB * 12 * 5 = 30PB
(4)自动补全系统
DAU预估:1000万
搜索预估:每人平均一天搜索10次
搜索大小:20个字母(约等于20个请求)(还没算写一半搜索到了的情况)
QPS: 1000w * 10 * 20 / 24 /3600 = 24000
PEAK QPS = 48000
数据存放:假设我们要存用户输入的查询数据,输入20%, 1000W * 10 * 20 * 0.2 = 0.4GB每天
(5)视频分享系统
DAU:500W
读操作(看视频): 一天5次
写操作(上传):10% 用户一天一次
视频大小: 300MB,500W * 0.1 * 300MB = 150TB每天
CDN价格:1GB花0.02美元, 500W*5个视频*0.3GB*0.02 = 15w美元/天
(6)云盘
DAU:1000W,总人数5000W
免费空间额度:10GB
总存储:5000W * 10GB = 500PB
读写预估:一个用户一天上传下载2个文件
QPS:1000W * 2 / 24 / 3600 = 240 (只算了下载)
PEAK QPS = 480