估算最佳设计
2的幂
计算机世界中通常用2的幂来表示大小,但是我们对2的幂的数量大小并不敏感,现实中更擅长用十进制的数来表示大小,这里总结一下2的幂的近似值。
稍微总结一下
$$
2^{10} = 1千 \ 2^{20}=100万 \ 2^{30} = 10亿
$$
常见操作耗时
谷歌工程师杰夫·迪恩(Jeff Dean)提倡使用粗略的计算来评估不同的设计,我们可以用图中常见的这些操作耗时来评估系统的性能。
Google Pro 提示:使用信封计算来选择最佳设计 - 高可扩展性 - (highscalability.com)
需要注意的一些事项:
- 数据中心距离很远,因此在它们之间发送任何内容需要很长时间。
- 内存快,磁盘慢。
- 通过使用简单的的压缩算法,可以节省大量(2倍)的网络带宽。
- 写入成本是读取成本的 40 倍。
- 全球共享数据成本高昂。这是分布式系统的一个基本限制。共享大量写入对象中的锁争用会降低性能,因为事务变得序列化且速度缓慢。
- 针对低写入争用进行优化。
- 优化范围。尽可能并行地进行写入。
可用性相关数字
现在来看看什么是高可用,对于一个系统的可用性一般用百分比来衡量,一般可用性能达到99%的系统已经是高可用系统了,对于一些提供基础云服务商来说,它们通常会说自己的可用性达到了99.999%,按照下方的图表来比较,99.999%也就是每年大概只有5.26分钟处于不可用状态。
SLA(服务水平协议)是服务提供商普遍使用的一个术语,它规定了提供的服务应该正常运行的时间。亚马逊、谷歌和微软都把它们的SLA设定为99.9%以上,通常会讨论系统可用性几个9,9越多代表可用性越高。
在2023年11月12日下午,阿里云出现严重故障,全线产品受影响,后续官方确认故障原因与某个底层服务组件有关,官方通知2.5小时恢复正常。对比图表中的数据,我们可以看到阿里云的可用性达到99.9%。
阿里云发布最新服务等级协议SLA,多实例可用性升为99.995%-阿里云开发者社区 (aliyun.com)
常见性能指标
图表中展示了我们常见的性能指标,在实际工作中常用QPS、TPS来表示系统的性能
估算QPS和存储量
请注意,下面的数字是针对这个练习而设置的,并非推特的真实数据。
假设:
- 推特有3亿月活用户。
- 50%的用户每天都使用推特。
- 用户平均每天发两条推文。
- 10%的推文包含多媒体数据。
- 数据要存储5年。
以下为根据上面的假设而估算出来的一些数据。
(1)估算QPS(每秒查询量)。
- 每日活跃用户(DAU)=300,000,000×50%=150,000,000
- 推文QPS=150,000,000×2÷24小时÷3600秒≈3500
- 峰值QPS=2×推文QPS≈7000
(2)这里仅估算多媒体数据的存储量。
- 平均推文大小。
- tweet_id:64字节。
- 文本:140字节。
- 多媒体文件:1MB。
- 多媒体数据存储量=150,000,000×2×10%×1MB=30TB/天
- 5年的多媒体数据存储量=30TB×365×5≈55PB
《搞定系统设》