在系统设计中,估算系统容量和性能需求是一项至关重要的技能。
一、二次幂(Power of Two)
在处理分布式系统时,数据量可能会变得非常庞大。为了进行正确的计算,了解数据量单位的幂次是非常关键的。一个ASCII字符占用1字节(8位),下面是一些常见的数据量单位:
- 2^10(1千):1千字节(KB)
- 2^20(1百万):1兆字节(MB)
- 2^30(10亿):1吉字节(GB)
- 2^40(1万亿):1太字节(TB)
- 2^50(1百万亿):1拍字节(PB)
二、程序员应知的延迟数字
了解不同计算机操作的延迟时间对于系统设计至关重要。以下是一些常见的操作及其对应的时间:
- L1缓存引用:0.5 ns
- 分支错误预测:5 ns
- L2缓存引用:7 ns
- 互斥锁/解锁:100 ns
- 主内存引用:100 ns
- 使用Zippy压缩1KB:10,000 ns = 10 µs
- 通过1 Gbps网络发送2KB:20,000 ns = 20 µs
- 从内存中顺序读取1MB:250,000 ns = 250 µs
- 在同一数据中心的往返时间:500,000 ns = 500 µs
- 磁盘寻道:10,000,000 ns = 10 ms
- 从网络中顺序读取1MB:10,000,000 ns = 10 ms
- 从磁盘中顺序读取1MB:30,000,000 ns = 30 ms
- 从加利福尼亚发送数据包到荷兰:150,000,000 ns = 150 ms
谷歌的一位软件工程师开发了一个工具,将这些数据可视化,有助于理解
三、可用性数字
高可用性是指系统在期望的时间内持续运行的能力。高可用性通常以百分比表示,100%表示系统无停机时间。大多数服务的可用性在99%到100%之间。
服务水平协议(SLA)是服务提供商与客户之间的正式协议,定义了服务提供商将交付的服务水平。云服务提供商如Amazon、Google和Microsoft通常将SLA设定为99.9%或更高。可用性通常以九的个数来衡量,九的个数越多,系统停机时间越少。
以下是一些常见的可用性百分比及其对应的停机时间:
- 99%:每年3.65天停机
- 99.9%:每年8.76小时停机
- 99.99%:每年52.56分钟停机
- 99.999%:每年5.26分钟停机
99.9999%:每年31.56秒停机
四、估算Twitter的容量和存储需求
假设:
- 每月有3亿活跃用户。
- 50%的用户每天使用Twitter。
- 用户平均每天发布2条推文
- 10%的推文包含媒体
- 数据保存5年
估算:
每秒查询数(QPS):
- 每日活跃用户(DAU)= 3亿 * 50% = 1.5亿
- 推文QPS = 1.5亿 * 2条推文/24小时/3600秒 ≈ 3500
- 峰值QPS = 2 * QPS = 7000
平均推文大小:
- tweet_id 64字节
- 文本140字节
- 媒体1MB
- 媒体存储:1.5亿 2 10% * 1MB = 30 TB每天
- 5年媒体存储:30 TB 365 5 = 55 PB
参考博文
ByteByteGo
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。