CHAPTER 2: 《BACK-OF-THE-ENVELOPE ESTIMATION》 第2章 《初略的估计》

news2025/1/16 18:55:36

CHAPTER 2: BACK-OF-THE-ENVELOPE ESTIMATION

在系统设计面试中,有时您会被要求估计系统容量或使用粗略估计的性能需求。根据杰夫·迪恩的说法,谷歌高级研究员,“粗略的计算是你使用结合思想实验和常见的性能数字,以获得良好的感觉,哪些设计能满足你的要求?[1]
您需要对可伸缩性基础知识有很好的了解,才能有效地执行系统的后端估计。以下概念应该很好地理解:两个two[2]的幂;每个程序员都应该知道延迟数和可用性数。

2的幂 Power of two

尽管在处理分布式系统时数据量会变得非常大,所有的计算都归结为基础。为了得到正确的计算,关键是要知道数据体积单位采用2的幂。一个字节是由8位组成的序列。ASCII字符
使用一个字节的内存(8位)。下表解释了数据量单位.

近似值全名短名称
101000年前字节1KB
20百万年兆字节1MB
3010万亿年GB字节1GB
401万亿年TB字节1TB
501000万亿年PB字节1PB

每个程序员都应该知道延迟数据 Latency numbers every programmer should know

谷歌的Dean博士揭示了2010年典型计算机操作的时长[1]。一些随着计算机变得更快、更强大,数字已经过时了。然而,这些数字应该还是能给我们一个快慢不同的概念电脑操作。

操作名称时间
1级缓存引用0.5ns
分支 mispredict5ns
2级缓存引用7ns
互斥锁/解锁100ns
主存引用100ns
用zippy压缩1k字节10,000ns=10μs
通过1GB网络传输2KB字节20,000ns = 20μs
内存按照顺序读取1MB250,000ns=250μs
同一个数据中心内的往返500,000ns = 500μs
磁盘寻找10,000.000ns=10ms
从网络中读取1MB10,000.000ns=10ms
从硬盘中读取1MB30,000.000ns=30ms
发送数据包CA(加利福尼亚)->荷兰->CA150,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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/443608.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

武器目标分配问题研究进展: 模型、算法与应用

源自:系统公正与电子技术 作者:李梦杰 常雪凝 石建迈 陈超 黄金才 刘忠 摘 要 武器目标分配问题是指挥控制与任务规划领域的关键难点之一, 也是军事运筹领域的基础研究课题。经过多年研究, 武器目标分配问题在陆海空天电等领域都得到了广泛研究,…

ESLint插件开发

ESLint 插件 ESLint 插件是一个可以包含一系列ESLint 规则、配置、处理器、环境的npm模块。 创建插件 开发ESLint插件可以使用Yeoman提供的生成器来生成ESLint插件的基本项目的目录结构。 安装yeoman 和ESLint 规则的生成器 npm i -g yo generator-eslint创建eslint-xxxx使用y…

春秋云境:CVE-2022-26201(二次注入漏洞)

目录 一、题目 二、上传权限马 三、蚁剑马连接 一、题目 进入题目: 这个是和春秋云境:CVE-2022-28060一个网站,看来应该是存在多个漏洞。 点击admin 不用登录 Users ---- add users 选择文件 这里要是jpg图片格式 如果是php格式是无法运行…

机器学习(一)-K近邻算法(KNN)原理剖析及python源码

本篇介绍第一个机器学习算法:k-近邻算法,它非常有效而且易于掌握。首先,我们将探讨k-近邻算法(KNN)的基本理论,以及如何使用距离测量的方法分类物品;其次我们将使用Python从文本文件中导入并解析…

JavaSE学习进阶day06_02 Set集合和Set接口

第二章 Set系列集合和Set接口 Set集合概述:前面学习了Collection集合下的List集合,现在继续学习它的另一个分支,Set集合。 set系列集合的特点: Set接口: java.util.Set接口和java.util.List接口一样,同样…

D. Marcin and Training Camp(思维 + 判断一个数二进制位是否是另一个数的子集)

Problem - D - Codeforces 马辛是他大学里的一名教练。有N个学生想参加训练营。马辛是个聪明的教练,所以他只想派那些能冷静合作的学生参加。 让我们关注一下这些学生。每个学生可以用两个整数ai和bi来描述;bi等于第i个学生的技能水平(越高越…

【刷题之路】LeetCode 程序员面试金典 08.03. 魔术索引

【刷题之路】LeetCode 程序员面试金典 08.03. 魔术索引 一、题目描述二、解题1、方法1——暴力法1.1、思路分析1.2、代码实现 2、方法2——二分分治2.1、思路分析2.2、代码实现 一、题目描述 原题连接: 面试题 08.03. Magic Index LCCI 题目描述: 魔术索…

计算机网络考试复习——第三章 3.3

3.3 使用广播信道的数据链路层 3.3.1局域网的数据链路层 局域网最主要的特点: 1.网络为一个单位所拥有; 2.地理范围和站点数目均有限。 局域网具有如下主要优点: 1.具有广播功能,从一个站点可很方便地访问全网。 2.便于系统…

分布式问题,你知道几个?

你好,我是田哥 现在的单体服务是很难应付面试了,必须要把分布式相关技术给讲清楚,否则面试难搞。 下面我们来聊聊,分布式环境下会面临哪些问题。 先来看一下主要内容: 分布式系统中常见的难题包括: 一致性问…

PackageMS 启动

1.PackageMS 相关框架类 2.PackageMS 启动过程 2.1 # SystemServer.java /** 291 * The main entry point from zygote. 292 */ 293 public static void main(String[] args) { 294 new SystemServer().run(); 295 } 上面是SystemServer的主函数。 pr…

RK3568开发板 buildroot编译配置

启扬智能RK3568开发板提供两种文件系统,一种是Debian,另外一种是BuildRoot。在使用过程中,有些客户需要添加属于自己的软件包,所以在此分享启扬RK3568关于BuildRoot编译配置的方法以及相关注意事项。 启扬提供的源码是完整sdk&am…

毕业论文用什么流程图软件比较好?

在写作论文的时候使用流程图,会让我们的论文看起来更加有逻辑。并且流程图的图片都可以在PPT中随意插入以及使用。 基础流程图作为最为基本和简单的的流程图方式,一般不区分用户角色和场景,适用于简单场景,梳理单一的流程情况&am…

nssctf web入门(8)

目录 [SWPUCTF 2021 新生赛]easy_sql [SWPUCTF 2021 新生赛]error 这里通过nssctf的题单web安全入门来写,会按照题单详细解释每题。题单在NSSCTF中。 想入门ctfweb的可以看这个系列,之后会一直出这个题单的解析,题目一共有28题,…

mysql(8.0)_主从复制

1.环境介绍 自己的主机--master 同学的主机--slave2.安装mysql https://blog.csdn.net/weixin_45955039/article/details/130144515?spm1001.2014.3001.55013. 准备工作 3.1在云服务器上添加端口号 3.2关闭防火墙 systemctl stop firewalld setenforce 04.master上的配置 …

数字图像处理笔记 第二章 数字图像基础

第二章 数字图像基础 2.1 视觉感知要素 知己知彼,百战不殆。了解人类的视觉感知,有助于我们学习数字图像处理。本小节中眼睛中图像的形成,让我联想到照相机成像,人眼的亮度适应和辨别让我想到手机屏幕的自动调节亮度。由于这部分…

马尔科夫链HMM

在机器学习算法中,马尔可夫链(Markov chain)是个很重要的概念。马尔可夫链(Markov chain),又称离散时间马尔可夫链(discrete-time Markov chain),因俄国数学家安德烈马尔可夫(俄语&a…

如何排查线上环境CPU100%问题

如何排查线上环境CPU100%问题 cpu爆满的原因可能:1、形成了死锁。2、形成了死循环 1.使用arthas 2.使用命令的方式 死锁的检查: 方式一: 可通过jps或者ps -ef | grep java的命令查看到运行程序的PID使用jstack -l pid 命令查看线程的堆栈信…

代码随想录|day49|动态规划part10● 121. 买卖股票的最佳时机 ● 122.买卖股票的最佳时机II

它来了它来了!我们最爱的股票问题它来了!! 121. 买卖股票的最佳时机 链接:代码随想录 视频链接:动态规划之 LeetCode:121.买卖股票的最佳时机1_哔哩哔哩_bilibili 好难懂,尤其是理解状态的变化以…

openGauss 5.0企业版主从部署,实战狂飙

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…