当前位置: 首页 > news >正文

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位)。下表解释了数据量单位.

近似值全名短名称
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.lryc.cn/news/61622.html

相关文章:

  • RocketMQ高级概念
  • eureka注册中心和RestTemplate
  • redis复制的设计与实现
  • Docker更换国内镜像源
  • 【网络编程】网络套接字,UDP,TCP套接字编程
  • 海斯坦普Gestamp EDI 需求分析
  • gpt写文章批量写文章-gpt3中文生成教程
  • HashMap实现原理
  • 【Java 数据结构】PriorityQueue(堆)的使用及源码分析
  • 使用 Kubernetes 运行 non-root .NET 容器
  • 为什么大量失业集中爆发在2023年?被裁?别怕!失业是跨越职场瓶颈的关键一步!对于牛逼的人,这是白捡N+1!...
  • Word控件Spire.Doc 【脚注】字体(3):将Doc转换为PDF时如何使用卸载的字体
  • keil5使用c++编写stm32控制程序
  • 中国社科院与美国杜兰大学金融管理硕士项目——在职读研的日子里藏着我们未来无限可能
  • hardhat 本地连接matemask钱包
  • 【华为OD机试真题】1001 - 在字符串中找出连续最长的数字串含-号(Java C++ Python JS)| 机试题+算法思路+考点+代码解析
  • CrackMapExec 域渗透工具使用
  • Modbus协议学习
  • camunda如何处理流程待办任务
  • git部分文件不想提交解决方案
  • 2023年全国最新道路运输从业人员精选真题及答案58
  • Zimbra 远程代码执行漏洞(CVE-2019-9670)漏洞分析
  • 【数据结构初阶】第七节.树和二叉树的性质
  • 车载软件架构——闲聊几句AUTOSAR BSW(一)
  • 我国元宇宙行业分析:政策、技术、资金助推行业探索多元化应用场景
  • 都已经那么卷了,用户还需要开源的 API 管理工具么
  • 工信部教育与考试中心-软件测试工程师考试题A卷-答
  • 【设计模式】模板方法模式--让你的代码更具灵活性与可扩展性
  • 搞明白Redis持久化机制
  • C# 中的正则表达式,如何使用正则表达式进行字符串匹配和替换?