Как я могу обнаружить и выжить, будучи "Slashdotted"? - PullRequest
47 голосов
/ 20 октября 2008

Какой хороший способ выжить в условиях аномально высоких пиков трафика?

Я думаю, что по какой-то причине мой веб-сайт должен временно переключиться в режим «низкой пропускной способности»: переключиться на базовые HTML-страницы, минимальную графику, отключить виджеты, которые могут создать ненужную нагрузку на базу данных, и т. Д.

Мои мысли:

  • Мониторинг загрузки процессора
  • Пропускная способность монитора
  • Мониторинг запросов / минута

Редактировать: Я знаком с такими опциями, как кэширование, переключение на статический контент или сеть доставки контента и т. Д. В качестве средства для выживания, поэтому, возможно, следует сосредоточиться на том, как обнаруживать, когда сайт собирается стать перегруженным. (Хотя ответы на другие методы выживания, конечно, все же приветствуются.) Допустим, веб-сайт работает под управлением Apache на Linux и PHP. Это, вероятно, самая распространенная конфигурация, и она должна позволить максимальному количеству людей получить помощь от ответов. Предположим также, что дорогие варианты, такие как покупка другого сервера и балансировка нагрузки, недоступны - по крайней мере, для большинства из нас упоминание о Slashdot будет случайным явлением, а не чем-то, на что мы можем потратить деньги, готовясь к .

Ответы [ 30 ]

22 голосов
/ 17 сентября 2008
  1. Не давайте никому URL
  2. Создайте что-нибудь настолько бесполезное, что если правило 1 будет нарушено, никто все равно не придет.
21 голосов
/ 20 октября 2008
  1. установить munin для мониторинга нагрузки / потребления памяти и т. Д. И уведомлять о перегрузках.
  2. установить monit для перезапуска apache2 в случае сбоя
  3. установите nginx как интерфейс apache2, это значительно снизит требования к памяти при большой нагрузке
13 голосов
/ 20 октября 2008

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

Я говорю из опыта того, что меня косят. Это не весело, когда вы вообще не можете получить доступ к Интернету, потому что тысячи людей одновременно пытаются загрузить фотографии компьютера, который ваш сосед по дому установил в гриле Джорджа Формана. Никакое количество межсетевого экрана не спасет вас.

11 голосов
/ 17 сентября 2008

Основы:

  1. Не пытайтесь размещать сайты с большими объемами в Windows, если вы не являетесь true Windows-гуру. Это можно сделать, но это вопрос времени и стоимости.
  2. Используйте статический контент (то есть без запросов к базе данных) везде, где можете.
  3. Узнайте о заголовках управления кэшем и используйте их правильно для изображений и других статических ресурсов.
  4. По крайней мере, используйте Apache, но если можете, используйте lighttpd или другой высокопроизводительный веб-сервер.

Реальные ответы:

  1. Действительно знайте свой SQL и тратьте время на анализ медленных запросов. Большинство загрузок страницы не должны требовать более одной секунды прямых запросов.
  2. Определите, где на самом деле находится ваш груз. Если это медиа-сайт, рассмотрите возможность размещения контента в другом месте (например, Akamai или какой-либо другой службе). Если это сайт с большим количеством баз данных, подумайте о репликации.
  3. Знайте, какая репликация будет работать для вас. Если у вас есть сайт с интенсивным чтением, стандартная репликация главного / подчиненного MySQL должна быть в порядке. Если у вас много записей, вам понадобится какая-то настройка с несколькими мастерами, например, MySQL Cluster (или исследуйте «каскадную» или «водопадную» репликацию).
  4. Если вы можете, не вызывайте PHP - то есть имейте кешированную статическую (HTML) копию страницы (что и делают большинство плагинов кэширования Wordpress). Apache намного быстрее обслуживает статические файлы, чем даже самый простой PHP-скрипт hello world.
9 голосов
/ 20 октября 2008

Вот довольно длинная, но очень информативная статья о выживших "вспышках толпы".

Вот их сценарий для ситуации, предлагаемой для их решения:

В этой статье мы рассматриваем вопрос о масштабировании глазами персонажа, которого мы называем гаражным новатором. Гаражный новатор креативен, технически подкован и амбициозен. У нее есть отличная идея для Next Big Thing в Интернете, и она реализует ее, используя несколько запасных серверов, сидящих в гараже. Служба запущена и работает, время от времени привлекает новых посетителей и получает небольшой доход от рекламы и подписок. Когда-нибудь, возможно, ее сайт сорвет куш. Может быть, он попадет на первую страницу Slashdot или Digg; может, Valleywag или New York Times упомянут об этом.

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

Один выход из этой загадки был включено современной полезностью вычисления.

Затем в статье был предложен ряд шагов, которые может предпринять новатор гаража, например, использование сетей хранения данных и внедрение масштабируемых баз данных.

7 голосов
/ 17 сентября 2008

Я переписываю все URL, на которые ссылаются несколько популярных сайтов, для перенаправления через coralCDN.

Пример для Apache:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_USER_AGENT} !^Googlebot
RewriteCond %{HTTP_USER_AGENT} !^CoralWebPrx
RewriteCond %{QUERY_STRING} !(^|&)coral-no-serve$
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?digg\.com [OR]
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?slashdot\.org [OR]
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?slashdot\.com [OR]
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?fark\.com [OR]
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?somethingawful\.com [OR]
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?kuro5hin\.org [OR]
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?engadget\.com [OR]
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?boingboing\.net [OR]
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?del\.icio\.us [OR]
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?delicious\.com
RewriteRule ^(.*)?$ http://example.com.nyud.net/$1 [R,L]
</IfModule>
6 голосов
/ 20 октября 2008

Просто невозможно узнать, выдержит ли ваш сайт большие нагрузки, если вы не подвергнете его стресс-тесту. Используйте что-то вроде siege и посмотрите, где ваши проблемы с производительностью. Слишком быстро растет в памяти? Это начинает замедляться с группой одновременных соединений? Начало доступа к базе данных занимает вечно?

Как только вы узнаете, где находятся проблемы с производительностью, возникает вопрос их устранения. К сожалению, трудно вдаваться в подробности, не зная о вашей конкретной ситуации, но имейте в виду, что вы говорите об оптимизации здесь. Таким образом, вы должны действовать только тогда, когда ЗНАЕТЕ, что есть проблемы с производительностью.

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

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

5 голосов
/ 17 сентября 2008

Реальный вопрос - «Какой самый эффективный способ быть Слэшдоттом»

Если это реальная проблема, перенаправьте трафик на мой сайт.

5 голосов
/ 17 сентября 2008

Я думаю, что предпосылка ошибочна: вы действительно действительно хотите, чтобы получил косую черту, иначе у вас не было бы веб-сайта. Намного лучше вопрос, как вы справляетесь с дополнительным трафиком? И даже это действительно два вопроса:

  1. Как вы технически управляете дополнительной нагрузкой на сервер?
  2. Как вы приветствуете новых пользователей, чтобы можно было надеяться, что некоторые из них останутся без присмотра ??
4 голосов
/ 17 сентября 2008

Не пишите контент и не предоставляйте услуги, которые могут понравиться гикам;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...