什么是“优雅降级”?


11

我对这个术语“优美的降级”听到很多。

例如 ,

 "An application server should gracefully degrage when it is under heavy load "

  "Graceful degradation of user interfaces.... "

这个词对我来说似乎是抽象的东西。有什么具体例子说明什么?


5
一篇关于该主题的好文章codinghorror.com/blog/2011/04/…–
JF Dion

Answers:


10

这里有些例子:

  • 如果您用完了一些资源(句柄,套接字,内存,驱动器空间),则不会崩溃,而是继续使用可用资源来服务尽可能多的用户。在设计范围之外进行操作时,某些不会降低优美性的操作可能会停止工作。
  • 在比您为用户设计的负载重的负载下,响应速度会比您为设计的速度慢。如果没有适当的降级,一旦超出要求,系统将停止工作,这是可以接受的。
  • 错误情况,例如磁盘驱动器故障,CPU内核故障,内存故障。设计为正常降级的系统可能会以某种简化的模式继续工作(例如,无法访问发生故障的驱动器中的数据,但仍从尚未发生故障的驱动器中传递数据),而另一个系统则会崩溃。

5

由于内部或外部问题,具有“降级”模式的应用程序通常提供对有限功能集的访问。例如,假设您的应用程序连接到两个不同的数据源。如果其中之一失败,则仍然有可能继续运行,但是禁用与不可用资源相关的所有可视(或/和后端)功能。

具体示例:您的应用程序有两个数据源,其中一个存储人,另一个存储帐户。即使帐户数据库失败,即使应用程序具有降级模式,您也应该能够创建新人员,即使他们不与他们的帐户进行交互。

对于用户界面,这通常意味着您向用户清楚地指示某些功能已被禁用,并显示一些警告消息,以使他不会在黑暗中不知道为什么不可用。

另外,还有一个与容错系统相关的Wikipedia条目。


2

随着技术的进步,我们总是将更改带入一个应用程序中,而该更改在任何时候都可能不会得到所有目标受众的支持。在这种情况下,我们会遇到优美的降级情况,该降级情况模仿我们为获得最佳性能而构建,但对于那些尚未升级或系统可能不支持的用户,我们也具有故障保护功能。

一个主要的示例是<img>标记,该标记具有的alt属性,该属性在图像被阻止或关闭的情况下非常有用,现在它们为图像提供了一些有意义的上下文(当然,只有在我们指定的情况下)。

好吧,我可以想到的另一个示例是样式表,如果出现错误或不可用,浏览器会提供自己的通用版本来显示/显示页面。

现在,当您提到繁重的工作时,您必须仔细制定一个计划,以防命中超过阈值时要执行的操作,禁用某些功能或暂停一些不重要的服务,让您喘口气。所有这些都将帮助您设置正常的降级,以便用户知道服务器可能需要一些时间来响应x事物,或者x服务将在一个小时左右不可用。


1

这意味着,当输入和状态超过设计限制时,输出将保持尽可能合理和可靠的状态。

如果该服务器设计为可同时处理100个并发连接,则不会崩溃,也不会在101个甚至150个连接处开始返回疯狂的结果-它会减慢速度或断开一些连接,但仍能正常工作。如果它是一个旨在处理10亿条记录的数据库,它不会突然减速到无法使用的状态(10.1亿)。


1

如果您没有图形系统(例如没有X11服务器正在运行),则程序至少应提供一个CLI,例如ncurses。

如果终端的功能太少,vi会处于哑模式,其行为类似于ex。


1

创建Web应用程序时,如果您的网站依赖JavaScript或Flash或用户没有或禁用的类似技术,则性能会逐渐下降。

然后,您仍应仅使用HTML提供一些基本功能,或者至少提供一条消息,说明该站点无法按预期运行的原因。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.