论文地址:Brownout:构建更健壮的云应用程序——Klein等人。2014年

    我们如何设计云应用程序,使其在面对各种资源和用户负载时具有弹性,并始终提供最佳的用户体验?现在这是一个非常重要的问题,克莱恩等人。报告了一个非常有趣的新发展结合控制理论和自适应应用行为与令人印象深刻的结果。
    我们的工作借鉴了电网停电的概念。限电是一种故意的电压降,通常用于在紧急情况下通过降低负荷来防止断电。在这种情况下,白炽灯泡变暗,因此产生了这个术语。
    应用程序可能会供应超载,即无法及时为用户提供服务。有些用户可能会遇到很高的延迟,而另一些用户可能根本没有收到任何服务。作者认为,最好是降低用户体验,以合理的延迟继续为更多的客户提供服务。
    如果云应用程序可以逐渐降低用户体验以避免饱和,我们将其定义为符合浏览器。
    这实际上是非常令人想起断路器,如Nygrad’s的’释放它‘!并被Netflix普及。如果您已经在使用断路器进行设计,那么您可能已经拥有了所有需要向应用程序添加brownout支持的部分,相对来说,这些部分比较容易。

    为了降低维护工作量,应自动触发Brownout。这使得云应用程序能够快速、可靠地避免由于意外的环境变化而导致的饱和,从而减轻了人工操作人员的负担。
    当然,我们可以做的另以件事是为应用程序提供更多的资源。本文后面的研究着眼于当资源被添加和移除时,应用浏览器控件会发生什么。结果表明,在这种转换过程中,浏览器控件应该能够平滑应用程序响应,最大限度地提高用户体验。

    brownout模型是如何工作的?

    • 应用程序设计人员需要确定响应中可能被视为可选的部分(例如,返回产品信息但不返回建议,或显示帖子但不显示评论),并使根据每个请求激活可选计算成为可能。
    • 应用程序需要导出一个名为“dimmer”的动态可更改运行时参数。调光器的设置控制生成给定响应时执行可选计算的概率。
    • 添加了一个名为控制器的新应用程序组件,其目标是根据当前针对’dimmer’性能进行调整。

    因此,虽然断路器在故障和超时时触发,但调光开关的作用更像是一个流量控制阀,决定执行可选组件的请求数量。

    我们合成了一个控制理论解来自动决定何时激活这些可选功能
    我早就说过,让应用程序适应不断变化的需求是一个控制理论问题(几年前,基于RabbitMQ的autoscaler在SpringOne主题演讲中的实现非常清楚),所以很高兴在这里看到这种方法的使用。这也是为什么我的Kindle上有一个“反馈控制”的副本等待阅读。
    …控制理论允许我们对系统提供一些形式上的保证。我们的主要目标是围绕云应用程序关闭一个循环,约束应用程序具有尽可能可预测的行为。
    如果你的控制理论知识比我的好,你也许可以跟着控制器算法的推导走!最终的结果(在我花了一点时间解码之后)实际上看起来非常简单。这有点像维基百科上的PID控制器页面,我不得不提到:跳过过去许多理论和数学,直到你到’伪代码’部分在底部,你会看到我说要阐述的意思!

    当然,每个人都想回答的问题是“它有效吗?”?“实验表明一个非常有力的肯定。测试首先以恒定的负载和可变的资源(例如,模拟节点的故障或丢失以及随后的恢复)执行;然后以恒定的资源和可变的负载(例如,模拟使用峰值)执行;最后同时改变负载和资源。
    时间序列结果表明,自适应应用程序的性能与预期相符。控制器根据可用容量和预期用户数调整调光器,并将感知的延迟保持在接近设定值的水平。此外,brownout范式给以前的非自适应应用带来的优势可以从结果中清楚地观察到。
    本文包含了一些图表,这些图表显示了当系统处于压力下时,在期望的延迟目标内继续服务用户请求的能力有了非常显著的改进。不过,要注意的是,它们并不容易解释。
    …通过brownout进行自适应可以允许应用程序支持更多的用户,或者比不自适应的应用程序运行在更少的资源上。因此,我们的提议使云应用程序能够更稳健地处理意外峰值或意外故障,而不需要备用容量。
    本文的工作只考虑单个服务器!这里有一个多服务器的重要扩展,一些更容易遵循的图表,以及一个关于负载平衡的含义的讨论,我们将在下次讨论…