云计算 反思课 1 试验分析的策略与思考

学习是一个不断改进方法论的过程,从第 11 课 Horizontal Scaling and Advanced Resource Scaling中,我学到了一个很重要的东西,就是要对问题本身进行细致分析,并且找到最基本的指标以衡量工作效果。


这节课更多是记录自己思考和反思的过程,以便之后更好地了解问题,解决问题。上次作业的任务大概是这样的:通过模拟一个网站两天的流量,来测试负载均衡器以及自动扩展的功能。也就是说,假设一个网站的访问记录大概是这样的:

我们需要做的是,在高峰期启用更多的机器满足用户需求,在低谷期降低机器数量节约经费,使得总体的性能达到一个令人满意的数值。并且我们可以使用的资源是有限的,如果全程都用多台机器,预算会超出,同样算任务失败。

所以简单来说,这实际上是一个有一个限制条件的优化问题,约束是总的机器时间,目标函数是成功处理的访问请求数量。也就是说,怎么能用最小的成本,获取最大的性能。

机器时间是一个对应的概念,和自然时间不同的是,需要乘以一个性能系数,比方说,我们可以选择『中』或『大』两种不同的机器,同样是开一个小时,『中』的机器时间是 2 小时,『大』的机器时间是 4 小时。

一拿到这个问题,本能的反应就是,可以通过云服务的监控加反馈机制,来对应进行调整,只要策略得当,就可以很好地拟合流量曲线。本着这个思路,就开始各种试验了,但是无论怎么试,都没有办法找到一个很好的解决方案,总是会错过一些流量高峰。模拟实验有时候还会让服务器假装『挂掉』,这样有一段时间就无法处理任何请求,最后的结果一塌糊涂。

现在想想,我犯了两个巨大的错误:

  1. 我真的细致分析了问题本身吗?或者说,真的考虑到了模拟实验和真实情况的不同吗?
  2. 我拿什么来判断多变量的问题的优化呢?数学上可以用梯度下降,针对这个问题,我的梯度下降在哪里呢?

先来说第一个问题,我们的模拟实验中,2 分钟相当于现实世界的 1 个小时,这是三十倍的缩放,这一点很重要,也就是说,假设现实的有两个小时的高峰期,那么对应到我们的实验中,就只有 4 分钟。而通过云服务,从申请机器到可以使用,大概有 3-5 分钟的延迟,基本上就意味着,高峰期过了,为了高峰期所申请的机器才可以用,但是已经并没有什么用了。

问题出在哪里,出在云服务申请机器并没有 30 倍的缩放,如果每次申请机器只需要 10 秒,那么还是有机会的。这就说明,因为模拟实验的时间尺度和云服务的时间尺度不一样,灵活策略基本没有意义,还不如直接开够机器,以不变应万变。

如果当初在分析问题的时候意识到这一点,就可以少走很多弯路。

第二个问题,因为每一次成功测试之后课程网站就会给出分数,我就没有想过要如何去有针对性地挑参数(云服务增减机器的策略,虽然通过前面的分析我们已经知道并没有什么用)。

回顾下之前解最优化问题的方式,KKT 条件是要有的,这样就保证了可以通过某种方式找到可能的最优解(哪怕是局部的)。虽然我对具体的参数调整还没有所谓的『直觉』,但是至少应该设定一个基准,比方说先全程拿 4 台『中』机器或者 2 台『大』机器跑一跑,来看看整体的表现。同样因为缺少了这一步,导致最后损失惨重,费用超支要扣分不说,还浪费了很多时间。

接下来无论是生活和学习,都要多去思考场景和问题本身,而不是想当然套用所谓『理所当然』,这就是我学到的一点小小的经验教训。

捧个钱场?