CHAPTER 2: 《BACK-OF-THE-ENVELOPE ESTIMATION》 第2章 《初略的估计》
CHAPTER 2: BACK-OF-THE-ENVELOPE ESTIMATION
在系统设计面试中,有时您会被要求估计系统容量或使用粗略估计的性能需求。根据杰夫·迪恩的说法,谷歌高级研究员,“粗略的计算是你使用结合思想实验和常见的性能数字,以获得良好的感觉,哪些设计能满足你的要求?[1]
您需要对可伸缩性基础知识有很好的了解,才能有效地执行系统的后端估计。以下概念应该很好地理解:两个two[2]的幂;每个程序员都应该知道延迟数和可用性数。
2的幂 Power of two
尽管在处理分布式系统时数据量会变得非常大,所有的计算都归结为基础。为了得到正确的计算,关键是要知道数据体积单位采用2的幂。一个字节是由8位组成的序列。ASCII字符
使用一个字节的内存(8位)。下表解释了数据量单位.
| 幂 | 近似值 | 全名 | 短名称 |
|---|---|---|---|
| 10 | 1000年 | 前字节 | 1KB |
| 20 | 百万年 | 兆字节 | 1MB |
| 30 | 10万亿年 | GB字节 | 1GB |
| 40 | 1万亿年 | TB字节 | 1TB |
| 50 | 1000万亿年 | PB字节 | 1PB |
每个程序员都应该知道延迟数据 Latency numbers every programmer should know
谷歌的Dean博士揭示了2010年典型计算机操作的时长[1]。一些随着计算机变得更快、更强大,数字已经过时了。然而,这些数字应该还是能给我们一个快慢不同的概念电脑操作。
| 操作名称 | 时间 |
|---|---|
| 1级缓存引用 | 0.5ns |
| 分支 mispredict | 5ns |
| 2级缓存引用 | 7ns |
| 互斥锁/解锁 | 100ns |
| 主存引用 | 100ns |
| 用zippy压缩1k字节 | 10,000ns=10μs |
| 通过1GB网络传输2KB字节 | 20,000ns = 20μs |
| 内存按照顺序读取1MB | 250,000ns=250μs |
| 同一个数据中心内的往返 | 500,000ns = 500μs |
| 磁盘寻找 | 10,000.000ns=10ms |
| 从网络中读取1MB | 10,000.000ns=10ms |
| 从硬盘中读取1MB | 30,000.000ns=30ms |
| 发送数据包CA(加利福尼亚)->荷兰->CA | 150,000.000ns=150ms |
笔记
Ns =纳秒,
µs =微秒,
ms =毫秒
1秒= 10^-9秒 1µs= 10^-6秒= 1,000 ns 1毫秒= 10^-3秒=1,000µs = 1,000,000毫秒
谷歌的一位软件工程师开发了一个工具,将迪恩博士的数据可视化。这个工具还需要考虑到时间因素。截止年的可视化时延数字如figure2-1所示 2020年(数据来源:参考资料[3])。

通过分析图2-1中的数字,我们可以得出以下结论:
- 内存快,磁盘慢。
- 尽可能避免磁盘查找。
- 简单的压缩算法速度快。
- 如果可能的话,在通过互联网发送数据之前压缩数据。
- 数据中心通常位于不同的区域,数据在数据中心之间传输需要一定的时间。
可用性数据 Availability numbers
高可用性是系统在理想的长时间内持续运行的能力一段时间。高可用性是以百分比来衡量的,100%意味着服务可以零停机时间。大多数服务都在99%到100%之间。服务水平协议(SLA)是服务提供者常用的术语。这是一个您(服务提供商)与您的客户之间的协议,以及本协议正式定义服务将交付的正常运行时间级别。云提供商亚马逊[4],谷歌[5]和Microsoft[6]将它们的sla设置为99.9%或更高。正常运行时间通常是用九来衡量。9越多越好。如表2-3所示9与预期的系统停机时间相关。
| 可用性 | 每天停机时间 | 每年停机时间 |
|---|---|---|
| 99% | 14.40分钟 | 3.65日 |
| 99.9% | 1.44分钟 | 8.77小时 |
| 99.99% | 8.64秒 | 52.60分钟 |
| 99.999% | 864毫秒 | 5.62分钟 |
| 99.9999% | 86.4毫秒 | 31.56秒 |
示例:估计Twitter QPS和存储需求请注意,以下数字仅用于此练习,
因为它们不是实数从Twitter。
假设:
• 3亿月活跃用户。
• 50%的用户每天使用Twitter。
• 用户平均每天发布2条tweet。
• 10%的推文包含媒体内容。
• 数据存储5年。
估计:
每秒查询(QPS)估计:
• 日活跃用户(DAU) = 3亿* 50% = 1.5亿
• 推文QPS = 1.5亿* 2条推文/ 24小时/ 3600秒= ~3500
• Peek QPS = 2 * QPS = ~7000
这里我们只估算媒体存储空间。
• 平均tweet大小:
• tweet_id 64字节
• 文本140字节
• 媒体1mb
• 媒体存储:1.5亿* 2 * 10% * 1mb = 30tb /天
• 5年介质存储:30tb * 365 * 5 = ~ 55pb
提示 Tips
粗略估计是关于过程的。解决问题更重要比取得成果更重要。面试官可能会测试你解决问题的能力。
这里有以下是一些建议:
- 舍入和近似。做复杂的数学运算很困难在面试中。例如,“99987 / 9.1”的结果是什么?没有必要花宝贵的时间解决复杂的数学问题。精度不被期望。使用对你有利的四舍五入和近似值。除法问题可以是简化为:“100,000 / 10”。
- 写下你的假设。把你的假设写下来是个好主意后引用。
- 标注你的单位。当你写下“5”时,它的意思是5 KB还是5 MB?你可能会把自己弄糊涂。写下单元,因为“5mb”有助于删除歧义。
- 常用的粗略估计:QPS、峰值QPS、存储、缓存、服务器数量等。你可以在准备考试时练习这些计算方法面试。熟能生巧。
恭喜你走了这么远!现在给自己点鼓励吧。好工作!
参考资料
[1] J. Dean.Google Pro Tip: Use Back-Of-The-Envelope-Calculations To Choose The Best
Design:
http://highscalability.com/blog/2011/1/26/google-pro-tip-use-back-of-the-envelope-calculations-to-choo.html
[2] System design primer: https://github.com/donnemartin/system-design-primer
[3] Latency Numbers Every Programmer Should Know:
https://colin-scott.github.io/personal_website/research/interactive_latency.html
[4] Amazon Compute Service Level Agreement:
https://aws.amazon.com/compute/sla/
[5] Compute Engine Service Level Agreement (SLA):
https://cloud.google.com/compute/sla
[6] SLA summary for Azure services: https://azure.microsoft.com/en-us/support/legal/sla/summary
相关文章:
CHAPTER 2: 《BACK-OF-THE-ENVELOPE ESTIMATION》 第2章 《初略的估计》
CHAPTER 2: BACK-OF-THE-ENVELOPE ESTIMATION 在系统设计面试中,有时您会被要求估计系统容量或使用粗略估计的性能需求。根据杰夫迪恩的说法,谷歌高级研究员,“粗略的计算是你使用结合思想实验和常见的性能数字,以获得良好的感觉…...
RocketMQ高级概念
一 RocketMQ核心概念 1.消息模型(Message Model) RocketMQ主要由 Producer、Broker、Consumer 三部分组成,其中Producer 负责⽣产消息,Consumer 负责消费消息,Broker 负责存储消息。Broker 在实际部署过程中对应⼀台…...
eureka注册中心和RestTemplate
eureka注册中心和restTemplate的使用说明 eureka的作用 消费者该如何获取服务提供者的具体信息 1.服务者启动时向eureka注册自己的信息 2.eureka保存这些信息 3.消费者根据服务名称向eureka拉去提供者的信息 如果有多个服务提供者,消费者该如何选择? 服…...
redis复制的设计与实现
一、复制 1.1旧版功能的实现 旧版Redis的复制功能分为 同步(sync)和 命令传播。 同步用于将从服务器更新至主服务器的当前状态。命令传播用于 主服务器状态变化时,让主从服务器状态回归一致。 1.1.1同步 当客户端向服务端发送slaveof命令…...
Docker更换国内镜像源
什么是Docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全…...
【网络编程】网络套接字,UDP,TCP套接字编程
前言 小亭子正在努力的学习编程,接下来将开启javaEE的学习~~ 分享的文章都是学习的笔记和感悟,如有不妥之处希望大佬们批评指正~~ 同时如果本文对你有帮助的话,烦请点赞关注支持一波, 感激不尽~~ 特别说明:本文分享的代码运行结果…...
海斯坦普Gestamp EDI 需求分析
海斯坦普Gestamp(以下简称:Gestamp)是一家总部位于西班牙的全球性汽车零部件制造商,目前在全球23个国家拥有超过100家工厂。Gestamp的业务涵盖了车身、底盘和机电系统等多个领域,其产品范围包括钣金、车身结构件、车轮…...
gpt写文章批量写文章-gpt3中文生成教程
怎么用gpt写文章批量写文章 批量写作文章是很多网站、营销人员、编辑等需要的重要任务,GPT可以帮助您快速生成大量自然、通顺的文章。下面是一个简单的步骤介绍,告诉您如何使用GPT批量写作文章。 步骤1:选择好训练模型 首先,选…...
HashMap实现原理
HashMap是基于散列表的Map接口的实现。插入和查询的性能消耗是固定的。可以通过构造器设置容量和负载因子,一调整容易得性能。 散列表:给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字…...
【Java 数据结构】PriorityQueue(堆)的使用及源码分析
🎉🎉🎉点进来你就是我的人了 博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!人生格言:当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔🦾&am…...
使用 Kubernetes 运行 non-root .NET 容器
翻译自 Richard Lander 的博客 Rootless 或 non-root Linux 容器一直是 .NET 容器团队最需要的功能。我们最近宣布了所有 .NET 8 容器镜像都可以通过一行代码配置为 non-root 用户。今天的文章将介绍如何使用 Kubernetes 处理 non-root 托管。 您可以尝试使用我们的 non-root…...
为什么大量失业集中爆发在2023年?被裁?别怕!失业是跨越职场瓶颈的关键一步!对于牛逼的人,这是白捡N+1!...
被裁究竟是因为自身能力不行,还是因为大环境不行? 一位网友说: 被裁后找不到工作,本质上还是因为原来的能力就配不上薪资。如果确实有技术在身,根本不怕被裁,相当于白送n1! 有人赞同楼主的观点&…...
Word控件Spire.Doc 【脚注】字体(3):将Doc转换为PDF时如何使用卸载的字体
Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下,轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具,专注于创建、编辑、转…...
keil5使用c++编写stm32控制程序
keil5使用c编写stm32控制程序 一、前言二、配置图解三、std::cout串口重定向四、串口中断服务函数五、结尾废话 一、前言 想着搞个新奇的玩意玩一玩来着,想用c编写代码来控制stm32,结果在keil5中,把踩给我踩闷了,这里简单记录一下…...
中国社科院与美国杜兰大学金融管理硕士项目——在职读研的日子里藏着我们未来无限可能
人生充满期待,梦想连接着未来。每一天都可以看作新的一页,要努力去成为最好的自己。在职读研的光阴里藏着无限的可能,只有不断的努力,不断的强大自己,未来会因为你的不懈坚持而发生改变,纵使眼前看不到希望…...
hardhat 本地连接matemask钱包
Hardhat 安装 https://hardhat.org/hardhat-runner/docs/getting-started#quick-start Running a Local Hardhat Network Hardhat greatly simplifies the process of setting up a local network by having an in-built local blockchain which can be easily run through a…...
【华为OD机试真题】1001 - 在字符串中找出连续最长的数字串含-号(Java C++ Python JS)| 机试题+算法思路+考点+代码解析
文章目录 一、题目🔸题目描述🔸输入输出二、代码参考🔸Java代码🔸 C++代码🔸 Python代码🔸 JS代码作者:KJ.JK🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🍂个人博客首页: KJ.JK 💖系列专栏:华为OD机试(Java C++ Python JS)...
CrackMapExec 域渗透工具使用
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、CrackMapExec 是什么?二、简单使用1、获取帮助信息2、smb连接执行命令3、使用winrm执行命令(躲避杀软)4、smb 协议常用枚…...
Modbus协议学习
以下内容从参考文章学习提炼 [参考文章](https://www.cnblogs.com/The-explosion/p/11512677.html) ## 基本概念 Modbus用的是主从通讯技术,主设备操作查询从设备。可以通过物理接口,可选用串口(RS232、RS485、RS422),…...
camunda如何处理流程待办任务
在 Camunda 中处理流程任务需要使用 Camunda 提供的 API 或者用户界面进行操作。以下是两种常用的处理流程任务的方式: 1、通过 Camunda 任务列表处理任务:在 Camunda 任务列表中,可以看到当前需要处理的任务,点击任务链接&#…...
ElevenLabs青少年语音TTS效果对比测试:12款竞品横评,仅2家通过COPPA 3.0儿童语音伦理认证
更多请点击: https://kaifayun.com 第一章:ElevenLabs青少年语音TTS的技术定位与伦理边界 ElevenLabs推出的青少年语音合成(Teen Voice TTS)并非简单的声音风格扩展,而是基于多说话人自监督表征学习与音色解耦建模的高…...
手把手教你修复‘MsBuild.exe不是内部或外部命令’(附Win10/Win11环境变量配置详解)
手把手教你解决‘MsBuild.exe不是内部或外部命令’问题 第一次在命令行里敲下msbuild却看到系统报错"不是内部或外部命令"时,那种挫败感我至今记忆犹新。作为.NET开发者必备的核心工具,MSBuild的配置问题困扰过无数新手。本文将用最直观的方式…...
手把手教你用N32G435的DMA‘传输过半中断’实现软件双缓冲(附2.5M波特率测试代码)
N32G435 DMA传输过半中断实现高负载串口通信的工程实践 在嵌入式系统开发中,高效处理高速串口数据流一直是工程师面临的挑战。当数据速率达到兆波特级别时,传统的中断驱动方式往往会导致CPU资源耗尽,系统响应迟缓。本文将深入探讨如何利用N32…...
EmotiVoice终极指南:5分钟上手2000种音色的免费语音合成神器
EmotiVoice终极指南:5分钟上手2000种音色的免费语音合成神器 【免费下载链接】EmotiVoice EmotiVoice 😊: a Multi-Voice and Prompt-Controlled TTS Engine 项目地址: https://gitcode.com/gh_mirrors/em/EmotiVoice 想要让AI帮你说话吗…...
FastbootEnhance:Windows平台终极Fastboot工具箱与Payload提取器完整指南
FastbootEnhance:Windows平台终极Fastboot工具箱与Payload提取器完整指南 【免费下载链接】FastbootEnhance A user-friendly Fastboot ToolBox & Payload Dumper for Windows 项目地址: https://gitcode.com/gh_mirrors/fa/FastbootEnhance 你是否曾经因…...
通过curl命令快速测试Taotoken上不同大模型的响应效果
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过curl命令快速测试Taotoken上不同大模型的响应效果 对于开发者而言,在集成大模型能力时,快速验证接口连…...
2026年十家小程序开发公司榜单及全面解读
数字经济全行业渗透的当下,权威的小程序开发服务商排名,早已成为企业筛选技术合作方的核心参考坐标。市面上服务商定位差异大、水平参差不齐,企业如何才能找到技术实力过硬、同时匹配自身成本预期的合作方?本文结合2024-2025年行业…...
LLM成长笔记(六):RAG(检索增强生成)
RAG(检索增强生成)全栈学习博客(通俗原理 详细注释 AI应用强化版) RAG 是让大模型“能回答它没学过的新知识”的核心架构。这篇博客从实际问题出发,用生活化类比建立直觉,通过术语详解深入概念本质&#…...
有哪些一键生成论文工具是真的贴合学术规范,而不是模板套话?
在 AI 写作技术迅猛发展的当下,各类论文工具层出不穷,看似能快速完成写作任务,实则多数只是表面功夫、内容空洞的 "文字搬运工",生成的论文存在逻辑断层、术语错误、格式混乱等明显缺陷,读起来毫无专业感&am…...
Polar Sparsity技术:提升LLM推理效率的动态稀疏优化
1. 项目概述:Polar Sparsity技术背景与核心价值 在大型语言模型(LLM)推理任务中,计算效率始终是制约实际部署的关键瓶颈。传统稀疏化方法(如权重剪枝或神经元激活稀疏化)虽然在小批量场景下有效,…...
