Как я могу обнаружить и выжить, будучи "Slashdotted"?
Какой хороший способ пережить аномально высокие пики трафика?
Я думаю, что по какой-то причине мой веб-сайт должен временно переключиться в режим "низкой пропускной способности": переключиться на базовые HTML-страницы, минимальную графику, отключить виджеты, которые могут создать ненужную нагрузку на базу данных, и так далее.
Мои мысли:
- Контролировать использование процессора
- Пропускная способность монитора
- Мониторинг запросов / мин
Изменить: я знаком с такими опциями, как кэширование, переключение на статический контент или сеть доставки контента и т. Д. Как средство выживания, поэтому, возможно, следует сосредоточиться на том, как определить, когда веб-сайт перегружается. (Хотя ответы на другие методы выживания, конечно, все же приветствуются.) Допустим, веб-сайт работает под управлением Apache на Linux и PHP. Это, вероятно, самая распространенная конфигурация, и она должна позволить максимальному количеству людей получить помощь от ответов. Предположим также, что дорогостоящие варианты, такие как покупка другого сервера и балансировка нагрузки, недоступны - по крайней мере, для большинства из нас упоминание о Slashdot будет встречаться один раз в жизни, а не то, на что мы можем потратить деньги, готовясь к,
30 ответов
- Не давайте никому URL
- Создайте что-то настолько бесполезное, что если правило 1 получит
- установить munin для мониторинга нагрузки / потребления памяти и т. д. и уведомлять о перегрузках.
- установить monit для перезапуска apache2 в случае сбоя
- установите nginx как интерфейс apache2, это значительно снизит требования к памяти при большой нагрузке
Стоит отметить, что умное кеширование и режимы с низкой пропускной способностью будут бесполезны, если у вас просто недостаточно пропускной способности для соединения, поэтому убедитесь, что соединение с вашим сервером достаточно толстое. Например, не размещайте его на своем домашнем DSL-соединении.
Я говорю из опыта того, что меня косят. Это не весело, когда вы вообще не можете получить доступ к Интернету, потому что тысячи людей одновременно пытаются загрузить фотографии компьютера, который ваш сосед по дому установил в гриле Джорджа Формана. Никакое количество межсетевого экрана не спасет вас.
Основы:
- Не пытайтесь размещать большие сайты в Windows, если вы не являетесь настоящим гуру Windows. Это можно сделать, но это вопрос времени и затрат.
- Используйте статический контент (то есть без запросов к базе данных) везде, где можете.
- Узнайте о заголовках управления кэшем и используйте их правильно для изображений и других статических ресурсов.
- По крайней мере, используйте Apache, но если можете, используйте lighttpd или другой высокопроизводительный веб-сервер.
Реальные ответы:
- Действительно знать свой SQL и тратить время на анализ медленных запросов. Большинство загрузок страницы не должны требовать более секунды прямых запросов.
- Определите, где ваша нагрузка на самом деле. Если это медиа-сайт, рассмотрите возможность размещения контента в другом месте (например, Akamai или какой-либо другой службе). Если это сайт с большим количеством баз данных, подумайте о репликации.
- Знайте, какая репликация будет работать для вас. Если у вас есть сайт с интенсивным чтением, стандартная репликация главного / подчиненного MySQL должна быть в порядке. Если у вас много записей, вам понадобится какая-то установка с несколькими мастерами, например MySQL Cluster (или исследуйте "каскадную" или "водопадную" репликацию).
- Если вы можете, избегайте вызова PHP - то есть имейте кешированную статическую (HTML) копию страницы (что и делают большинство плагинов кэширования Wordpress). Apache гораздо быстрее обслуживает статические файлы, чем даже самый простой PHP-скрипт hello world.
Вот довольно длинная, но очень информативная статья о выживших "флеш-толпах".
Вот их сценарий для ситуации, предлагаемой для их решения:
В этой статье мы рассмотрим вопрос масштабирования глазами персонажа, которого мы называем гаражным новатором. Газовый новатор креативен, технически подкован и амбициозен. У нее есть отличная идея для Next Big Thing в Интернете, и она реализует ее, используя несколько запасных серверов, сидящих в гараже. Служба запущена и работает, время от времени привлекает новых посетителей и получает небольшой доход от рекламы и подписок. Когда-нибудь, возможно, ее сайт сорвет куш. Возможно это достигнет главной страницы Slashdot или Digg; может, Valleywag или New York Times упомянут об этом.
Наш новатор может получить только один шанс на широкую рекламу. Если и когда это произойдет, десятки тысяч людей посетят ее сайт. Поскольку ее идея настолько нова, многие из них станут клиентами, приносящими доход, и будут приглашать друзей. Но толпа вспышек общеизвестно непостоянна; результат не будет почти таким же идиллическим, если сайт рухнет под его нагрузкой. Многие люди не будут возвращаться, если сайт не работает с первого раза. Тем не менее, трудно оправдать выплату десятков тысяч долларов за ресурсы на случай внезапного скачка загрузки сайта. Вспышки толпы - и проклятие новатора гаража, и ее цель.
Одним из выходов из этой загадки стало использование современных утилитарных вычислений.
Затем в статье был предложен ряд шагов, которые может предпринять новатор гаража, например, использование сетей хранения данных и внедрение масштабируемых баз данных.
Я переписываю все 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>
Просто невозможно узнать, выдержит ли ваш сайт большие нагрузки, если вы не подвергнете его стресс-тестированию. Используйте что-то вроде осады и посмотрите, где ваши проблемы с производительностью. Слишком быстро растет в памяти? Это начинает замедляться с группой одновременных соединений? Начинает ли он вечно обращаться к базе данных?
Как только вы узнаете, где находятся проблемы с производительностью, возникает вопрос их устранения. К сожалению, трудно вдаваться в подробности, не зная о вашей конкретной ситуации, но имейте в виду, что вы говорите об оптимизации здесь. Таким образом, вы должны действовать только тогда, когда ЗНАЕТЕ, что есть проблемы с производительностью.
И я бы сказал, что вы не обязательно готовитесь к событию раз в жизни. DOS-атаки все еще случаются, поэтому хорошо подготовиться, даже если ваш сайт не имеет косой черты.
Единственное, о чем я могу подумать, что поможет вам практически во всех ситуациях, - это если вы скопируете свой контент. Это сэкономит большую пропускную способность, и все современные браузеры будут поддерживать ее без особых проблем с производительностью.
Реальный вопрос - "Какой самый эффективный способ быть Слэшдоттом"
Если это реальная проблема, перенаправьте трафик на мой сайт.
Я думаю, что предпосылка неверна: вы действительно хотите получить косую черту, иначе у вас не будет веб-сайта. Намного лучше вопрос, как вы справляетесь с дополнительным трафиком? И даже это действительно два вопроса:
- Как вы технически управляете дополнительной нагрузкой на сервер?
- Как вы поприветствуете новых пользователей, чтобы можно было надеяться, что некоторые из них останутся без присмотра??
Не пишите контент и не предоставляйте услуги, которые могут понравиться фанатам;)
Для сайтов с высоким трафиком Akamai является хорошим решением, позволяющим сделать сайт быстрым, необычайно масштабируемым и надежным, несмотря на собственную инфраструктуру. Akamai - это сервис (не бесплатный), который будет кэшировать ваш сайт по всему миру. На моей последней работе наш каталог электронной коммерции кэшировался через них, и наши серверы могли отключиться, и никто не узнает, если они не попытаются добавить их в корзину. Кроме того, у нас были отключены наши серверы изображений, и кэширование Akamai снова спасло нас.
Поместите это в облако!
Это, вероятно, не относится к личным блогам и т. Д., Но для больших сайтов облачный хостинг решит эту проблему. Например, в Amazon EC2 эта стратегия заключается в том, что она будет стоить вам кучу денег.
В меньших масштабах использование CDN для всех ваших изображений / статического контента может также помочь, опять же, оценка цены важна. Amazon S3 - это CDN, о котором я слышу больше всего.
Вы также можете использовать Nagios для мониторинга работоспособности сервера. Исходя из ваших требований, при определенных условиях вы можете запустить существующий файл SQL для переключения режимов для вашего сайта.
Например, добавьте "ОБНОВИТЬ settings_table SET bandwidth = 'low';" в этот файл SQL и запустите его в mysql и сделайте обратное, когда условия вернутся в нормальное состояние.
Увеличьте уровень кэширования в БД, чтобы содержимое могло быть немного устаревшим, но доступ к нему был быстрее. Естественно, это применимо только в том случае, если содержание не должно быть согласованным на 100%.
nearfreespeech.net - это, так сказать, полутлак, который очень помогает в таких ситуациях. Как уже упоминалось выше, многоуровневое кэширование очень помогает. Возьмите куски информации из memcached вместо базы данных, перед вами обратный прокси-сервер (или распределенный обратный прокси-сервер, известный как CDN, Panther Networks).
Есть несколько способов сделать это или хотя бы помочь. Поищите в Google "slashdot-proof", и вы найдете несколько из них:
- Защитите свой сервер от Slashdot с помощью FreeCache - Boing Boing
- Простой Мысли Блог теперь доказательство Slashdot
и т.п.
Никогда не становись популярным.
Хотя это будет работать, это не очень полезно. Необходимая инфраструктура, которая может масштабироваться очень быстро. Что-то вроде Google Gears или веб-сервисов Amazon кажется идеальным для этого, поскольку даже Slashdot не собирается перегружать Google или Amazon. Если вы хотите иметь свой собственный сервер, убедитесь, что ваш сетевой провайдер не собирается отключать вас при любом заданном пределе пропускной способности. Купите достаточно оборудования, чтобы вы не напрягались, просто чтобы нести свой обычный трафик без каких-либо провисаний, чтобы справиться с внезапными скачками.
Используйте кеширование!
Если вы используете WordPress (например), вы можете использовать что-то вроде WP-Super-Cache. Если вы используете обычный PHP, есть еще ряд опций, которые вы можете использовать, включая memcache. Или вы можете просто использовать обычное кэширование в стиле Squid Proxy.
Любое кэширование, которое вы используете, поможет пуленепробиваемому (или slashdot/digg-proof) вашему сайту:-)
Кеш... тяжело. Записывайте попадания, и, если происходит всплеск, запишите полностью статическую копию страницы, на которую ударили, а затем обслужите это. Сокращение запросов к базе данных со 100 до 2 с помощью хорошей системы кэширования может пережить слабую косую черту, но при наличии каких-либо запросов к базе данных все равно будет возникать мертвый сайт под серьезной нагрузкой, к которой вы не готовы.
netstat -plant | awk '$4 ~ /:80\>/ {print}' | wc -l
Это покажет вам все соединения с сервером Apache. Вы можете создать скрипт cgi, который будет вычислять общее количество подключений к службе Apache и выдавать предупреждение, когда оно достигнет определенного порога. Что делать в этот момент - это другой вопрос.
Надеюсь, ваш сервер готов.
Насчет выживания вы правы: переключите или перенаправьте ссылку с косой чертой на статическую HTML-страницу без графики. Возможно, вы даже захотите разместить эту страницу на другом веб-сервере, чтобы ваш исходный сервер не слишком загружался.
Я бы использовал временное перенаправление для этого и удалил бы перенаправление, когда трафик прекращается.
Но как это обнаружить, это я тоже хотел бы знать! Простого подсчета ударов за последние несколько секунд может быть недостаточно?
.htaccess:
RewriteEngine on
RewriteCond %{HTTP_REFERER} slashdot\.org [NC]
RewriteRule .* - [F]
Убедитесь, что все создаваемые вами страницы статичны, не содержат базы данных и не используют изображения.
На самом деле, это место не делает это плохо.
Авто-перенаправление на Coral CDN, если только запрос не поступил от кораллового CDN.
Убедитесь, что ваши страницы поддерживают заголовки Last-Modified & If-Modified-Since и / или ETag & If-None-Match. С их помощью вы можете избежать многих вычислений и переводов полностью.
Поиск HTTP условного GET для получения дополнительной информации.
Я знаю, что с Digg вы можете связаться с ними и попросить, чтобы они занесли ваш сайт в черный список. Вы, вероятно, можете сделать то же самое с Slashdot.
Кеш данных.
Ненужные поездки в базу данных для отображения того, что отображается одинаково при каждой загрузке - это то, что убивает сервер. Запишите его вывод в файл и используйте его вместо этого. Большинство CMS и фреймворков имеют встроенное кэширование (но вы должны включить его), но развертывание собственного - не самая сложная задача.
Есть несколько способов сделать это или хотя бы помочь. Поищите в Google "slashdot-proof", и вы найдете несколько из них:
- Защитите свой сервер от Slashdot с помощью FreeCache - Boing Boing
- Простой Мысли Блог теперь доказательство Slashdot
и т.п.
Никто не упомянул балансировку нагрузки... haproxy и т. Д. Оптимизация, кеширование и балансировка нагрузки должны выдержать практически все. При этом я не уверен, что stackru находится за балансировщиком нагрузки;)