Отключение «тяжеловесных» функций

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

Здесь перечислены лишь некоторые меры, которые спасут ваши серверы, «погребенные» под лавиной трафика.

Отключение «тяжеловесных» функций

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

Веб-серверы Flickr, например, выполняют географический поиск по IP-адресу клиента, чтобы определить наиболее вероятные языковые предпочтения. Автоматический выбор языка делает сайт более удобным для пользователя, но, с другой стороны, это еще одна функция, которая должна выполняться приложением. Когда компания только запустила локализованную семиязычную версию Flickr, эта функция была включена при запуске. В механизме поиска мгновенно возникла перегрузка, поэтому сотрудники просто отключили поиск на то время, пока разбирались в причинах происходящего. Как выяснилось, проблема заключалась в искусственном ограничении частоты запросов на географическом сервере, который был настроен слишком консервативно. Администраторы повысили порог до приемлемого уровня, после чего снова включили функцию поиска. Если бы инженеры не предусмотрели возможности быстрого включения/отключения этой функции (если бы она была жестко закодирована в приложении), на поиски причин, отключение и исправление потребовалось бы куда больше времени. Все это время сайт находился бы в состоянии пониженной функциональности, а то и вовсе не работал бы.

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

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

Свою любимую историю на эту тему я услышал несколько лет назад. Крупная новостная компания поставляла веб-страницы с результатами президентских выборов 1996 года в США. Веб-серверы работали весь день на пределе мощностей. В ночь выборов трафик превысил критическую отметку. Свободных серверов для быстрого подключения не было, сайт начал постепенно «падать», выдавая искаженные изображения или страницы с одной лишь графикой, без другого контента. Было принято оперативное решение — отключить ведение журнала.

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

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