что такое «грациозная деградация»?


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

Ответы:


10

Вот некоторые примеры:

  • Если у вас заканчивается какой-либо ресурс (дескрипторы, сокеты, память, место на диске), вы не аварийно завершите работу, а продолжите обслуживать столько пользователей, сколько сможете использовать с доступными ресурсами. Что-то, что не ухудшает изящество, может просто перестать работать, когда вынимается за пределы дизайнерской оболочки.
  • Под нагрузками, более тяжелыми, чем то, что вы разработали для пользователей, отклик будет медленнее, чем для вас. Без постепенной деградации система может перестать работать после превышения требований.
  • Состояния ошибки, такие как сбой жесткого диска, сбой в ядре ЦП, сбой в памяти. Система, предназначенная для постепенного ухудшения качества, может продолжать работать в каком-то сокращенном режиме (например, без возможности доступа к данным на неисправном диске, но при этом доставляя данные с диска, который не вышел из строя), в то время как другая просто рухнет.

5

Приложения, которые имеют «ухудшенный» режим, обычно предлагают доступ к ограниченному набору функций из-за внутренней или внешней проблемы. Например, представьте, что ваше приложение подключается к двум разным источникам данных. Если один из них завершится неудачно, он все равно сможет продолжить работу, но отключит все визуальные (или / и внутренние функции), связанные с недоступным ресурсом.

Конкретный пример: у вашего приложения есть два источника данных, в одном из которых вы храните людей, а в другом - учетные записи. Даже в случае сбоя базы данных учетных записей, если приложение работает в ухудшенном режиме, вы все равно сможете создавать новых людей, хотя и не взаимодействовать с их учетными записями.

Что касается пользовательского интерфейса, это обычно означает, что вы четко указываете пользователю, что некоторые функции отключены, и отображаете некоторое предупреждающее сообщение, чтобы он не остался в неведении относительно того, почему что-то недоступно.

Также есть запись в Википедии, посвященная отказоустойчивым системам .


2

С развитием технологий у нас всегда есть изменения, внедряющиеся в приложение, которое может поддерживаться не всеми целевыми аудиториями. В таких сценариях мы сталкиваемся с постепенной деградацией, которая подражает тому, что мы создаем для наилучшего из доступных, но у нас также есть отказоустойчивый для тех, кто не обновил или их система может не поддерживать.

Одним из основных примеров является <img>тег, который имеет altатрибут, который полезен в случаях, когда изображения заблокированы или отключены, теперь они дают некоторый значимый контекст для изображений (конечно, только если мы укажем).

Ну и еще один пример, который я могу вспомнить, - это таблицы стилей в случае ошибки или недоступности, которую браузер предоставляет общую версию для отображения / отображения страницы.

Теперь, когда вы упомянули тяжелую нагрузку, вы должны тщательно наметить план, как это сделать, если ваши попадания пересекают порог, вы отключаете определенные функции или приостанавливаете некоторые услуги, которые не являются критическими и дают вам передышку. Все это поможет вам настроить постепенное снижение производительности, чтобы пользователь знал, что из-за того, что x может потребоваться некоторое время для ответа сервера, или служба x будет недоступна в течение часа или около того


1

Это означает, что, поскольку входы и состояние превышают проектные пределы, выходы остаются максимально разумными и надежными.

Если это сервер, предназначенный для обработки 100 одновременных соединений, он не дает сбоя и не начинает выдавать сумасшедшие результаты при 101 или даже 150 соединениях - он замедляет или, возможно, сбрасывает несколько соединений, но в основном продолжает работать. Если это база данных, предназначенная для обработки 1 миллиарда записей, она внезапно не замедлится до неработоспособного состояния в 1,01 миллиарда.


1

Если у вас нет графической системы (например, не запущен сервер X11), ваша программа должна по крайней мере предоставить CLI, например, ncurses.

vi имеет тупой режим, в котором он ведет себя как ex, если у терминала слишком мало функций.


1

При создании веб-приложений происходит постепенная деградация, когда ваш сайт использует JavaScript, Flash или аналогичные методы, которые пользователь не использует или отключил.

Тогда вам все же следует предоставить некоторые базовые функции только с помощью HTML или хотя бы сообщение о том, что сайт не работает должным образом.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.