Рекомендации по противодействию всплеску трафика в день запуска

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

Подробности: это стек L/A/M/PHP, использующий MVC-фреймворк собственной разработки. В настоящее время он запускается на одном сервере с Apache и MySQL, но мы можем разбить его, если потребуется.

Мы уже устанавливаем Memcached и делаем все возможное кэширование на уровне PHP. Некоторые страницы довольно требовательны к запросам, и в качестве шаблона мы используем Smarty. двигатель. Имейте в виду, что нет времени на изменение какого-либо из этих основных аспектов — это всего лишь настройка. Каких вещей нам следует остерегаться?


person Sam McAfee    schedule 22.09.2008    source источник


Ответы (7)


Чтобы подготовиться к всплеску (или пику) производительности или справиться с ним, я бы сначала определил, готовы ли вы, с помощью простого тестирования производительности с помощью чего-то вроде jmeter.

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

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

На радиопрограммистов о дизайне нового веб-сайта Guardian, когда все успокоится.

Удачи в запуске.

person Xian    schedule 22.09.2008

Сначала измерьте, а затем оптимизируйте. Вы проводили какое-либо нагрузочное тестирование? Где узкие места?

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

Кроме того, как результаты нагрузочного тестирования соотносятся с ожидаемым трафиком? Можете ли вы обрабатывать в два раза больше ожидаемого трафика? Пять раз? Насколько легко/быстро вы можете приобрести и выпустить дополнительное оборудование? Я уверен, что бизнес-требование состоит в том, чтобы не допустить сбоев во время запуска, поэтому убедитесь, что у вас есть много доступных ресурсов. Вы всегда можете отпустить его позже, когда нагрузка стабилизируется, и вы знаете, что вам нужно.

person Jason Peacock    schedule 22.09.2008

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

Другая идея может состоять в том, чтобы использовать Apache mod_proxy, чтобы сохранять сгенерированный вывод страницы в течение определенного периода времени. . APC также был бы весьма удобен... Вы могли бы использовать буферизацию вывода + время последнего изменения связанных данных на странице и использовать кэшированную версию APC. Если страница больше не действительна, вы повторно создаете ее и сохраняете в APC.

Удачи. Это будет опыт обучения!

person DreamWerx    schedule 22.09.2008

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

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

person ykaganovich    schedule 22.09.2008

Я бы лично сделал несколько вещей

1) Установите какую-то систему балансировки нагрузки/репликации базы данных.

Это означает, что вы можете разместить свой сервис на нескольких серверах. Не можете позволить себе постоянно иметь более одного сервера? Используйте Amazon E3 — это удобно для таких вещей (включите еще несколько серверов, чтобы справиться с нагрузкой).

2) Код в некоторых ограничениях "High Load"

Например, если ваш поиск неэффективен - выключите его, когда нагрузка достигнет определенного уровня. "Извините, мы заняты, повторите попытку позже для поиска"

3) Нагрузочный тест... Используйте что-то вроде ApacheBench для стресс-тестирования ваших серверов.

4) Лично я считаю, что лучше отключить "Keep-Alive" Connections. Это может немного снизить общую производительность, но - это означает, что вместо чего-то, где сайт работает хорошо для нескольких человек, а остальные получают тайм-ауты, каждый получает несогласованное обслуживание, если оно доходит до такого уровня.

В Linux Format есть хорошая статья «Как пережить слэшдоттинг»… которую я нашел полезной в прошлом. Он доступен в Интернете в формате PDF.

person Mez    schedule 22.09.2008

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

  1. Используйте недорогой инструмент, например https://browsermob.com/, для нагрузочного тестирования вашего сайта. Как минимум, вы должны видеть 100 тысяч уникальных посетителей в час. Если вы получаете рекламу с главной страницы MSN, рассчитывайте, что сможете обрабатывать 500 тысяч уникальных посетителей в час.

  2. Переместите весь статический графический/видеоконтент в CDN. Edgecast и Amazon — два отличных варианта.

  3. Используйте Jet Profiler для профилирования вашего сервера MySQL и анализа медленно выполняющихся запросов. Незначительные изменения могут иметь огромные преимущества.

person Gary    schedule 02.06.2010
comment
Сначала измерьте, прежде чем покупать место на дорогом CDN. Вам это может понадобиться, а может и не понадобиться, даже если вы его получите, возможно, вы используете его неправильно. Мера! - person Zan Lynx; 29.08.2010

Попробуйте использовать Varnish — это кеширующий обратный прокси-сервер (например, Squid, но гораздо более однозначный).

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

person Tim Howland    schedule 23.09.2008