包络估计攻击的背后

2020-05-22 03:11:47

有两种类型的工程师,一种是能快速做估计的,另一种是不能的。这些人只是更聪明,还是有更多的东西?

信封后面的评估是一项可以通过实践学习的技能。一旦你熟悉了这项交易的一些诀窍,事情就会变得容易起来。

从磁盘读取数据的速度有多快?从网络传来的速度有多快?您应该熟悉您的组件的大致性能数字。重要的不是确切的数字本身,而是它们在数量级上的相对差异。

估计的目标不是得到正确的答案,而是得到正确的答案。使用2或10的幂使得乘法非常容易,因为在对数空间中,乘法变成了加法。

例如,假设您有80万用户以12 Mbps的速度观看超高清视频。您的内容交付网络中的计算机可以以1 Gbps的速度出口。你需要几台机器?

1 0 6∗1 0 7 b p s 1 0 9 b ps=1 0(6+7−9)=1 0 4=10 K\FRAC{10^{6}*10^7bps}{10^{9}bps}=10^{(6+7-9)}=10^{4}=10K 1 0 9 b p s 1 0 6∗1 0 7 b p s​=1 0(。6+7−9)=1 04=1 0K将6与7相加并从中减去9比试图得到准确答案容易得多:

0.8M∗12 M b p s 1000 M b p s=9.6K\frac{0.8M*12 Mbps}{1000 Mbps}=9.6K 1 00 M b p s 0.。8 M∗1 2 M b p s​=9。6K,差别真的重要吗?不尽然;确切的答案无论如何都不是确切的。用户随时间变化、网络带宽不恒定等。

72法则是一种方法,用来估计如果一个数量以一定的百分比增长,它需要多长时间才能翻一番。

t i m e=72 r t e time=\frac{72}{速率}t i m e=r a t e 7 2​例如,假设您Web服务的流量每周增加约10%,需要多长时间才能翻一番?

t i m e=72 10=7.2time=\frac{72}{10}=7.2t i m e=1 0 7 2​=7.。2如果你把72的法则和2的幂结合起来,那么你很快就能知道一个量需要多长时间才能增加几个数量级。

很多事情都可以建模为队列。例如,可以将Web服务视为队列。请求率是新项目到达的速率。处理请求所需的时间是项目在队列中花费的时间。最后,并发处理的请求数是队列中的项目数。

如果您可以从另外两个参数中推导出三个参数中的一个,那不是很好吗?原来这三个量之间有一个相互联系的定律!这叫做利特尔定律:

L=λ∗W L=\λ*W L=λ∗W它说的是队列中项目的平均数量等于新项目到达的平均速率乘以项目在队列中花费的平均时间。

让我们试试看吧。假设您有一项处理请求的平均时间为100ms的服务。它目前每秒接收大约200万个请求(RPS)。同时处理多少个请求?

R e Q u e s ts=2 M r p s∗0.1s=200K Requests=2MRps*0.1s=200K r e Q u e s t s=2 M r p s∗0。1 s=2 00K该服务正在并发处理200K请求。如果每个请求都占用大量CPU并且需要一个线程,那么我们将需要大约200K个线程。如果我们使用8台核心机器,那么为了跟上步伐,我们将需要大约25K台机器。

估计对于工程师来说是一项至关重要的技能。通过练习和使用我在这篇文章中提出的技巧,你可以在这方面做得更好:

使用72法则来计算出一个数量在给定增长率的情况下需要多长时间才能翻一番。

如果您想了解更多关于如何对分布式系统进行实际评估的信息,请查看我即将到来的视频课程。