Как вы выполняете нагрузочное тестирование и планирование емкости для веб-сайтов?

  

Это канонический вопрос о планировании емкости веб-сайтов.

     

по теме:

     

Какие рекомендуемые инструменты и методы планирования емкости для веб-сайтов и веб-приложений?

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

108 голосов | спросил gWaldo 17 Jam1000000amTue, 17 Jan 2012 02:49:58 +040012 2012, 02:49:58

5 ответов


116

Короткий ответ: никто не может ответить на этот вопрос, кроме вас.

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

Простой одностраничный статический веб-сайт может размещаться на Pentium Pro 150 и каждый день обслуживать тысячи впечатлений.

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

Краткий обзор этого:

  • Поместите свой сценарий на место
  • Добавить мониторинг
  • Добавить трафик
  • Оценить результаты
  • Исправить по результатам
  • Промыть, повторить до тех пор, пока вы не будете счастливы

Поместите свой сценарий на место

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

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

Итак, я собираюсь настроить среднюю виртуальную машину (два ядра, 512 Мб ОЗУ, 4 ГБ HDD) и установить мой любимый балансировщик нагрузки, haproxy внутри Красный Hat Linux на виртуальной машине.

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

Добавить мониторинг

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

Я также собираюсь контролировать использование ОЗУ, процессора и диска в экземпляре haproxy, чтобы убедиться, что балансировщик нагрузки может обрабатывать соединения.

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

Несколько вещей, которые вы всегда хотите отслеживать:

  • Использование ЦП
  • Использование ОЗУ
  • Использование диска
  • Задержка диска
  • Использование сети

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

Добавить трафик

Здесь все становится забавно. Теперь вам нужно смоделировать тестовую нагрузку. Есть множество инструментов , которые могут это сделать, с настраиваемыми параметрами:

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

В идеале вы должны распространять эти 10 000 запросов на несколько клиентов /узлов тестирования нагрузки, чтобы один клиент не стал узким местом запросов. Например, Remote Testing предоставляет JMeter центральный интерфейс для запуска нескольких клиентов от управляющей машины Jmeter.

Нажмите волшебную кнопку Go и наблюдайте, как ваши веб-серверы растают и сбой.

Оценить результаты

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

Исправление

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

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

Чтобы уменьшить масштаб, получите больше серверов.

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

Если вы видели, что процессор сидел на 100% во время теста, возможно, вам нужно масштабировать, чтобы добавить дополнительные веб-серверы, чтобы уменьшить давление на существующие серверы.

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

Предположим, что мы будем уменьшаться. Поэтому я решил клонировать два моих веб-сервера (они являются виртуальными машинами), и теперь у меня есть четыре веб-сервера.

Промыть, повторить

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

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

ответил user906489 6 Jam1000000amSun, 06 Jan 2013 02:07:33 +040013 2013, 02:07:33
9

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

Измерение производительности всегда выполняется с единицами time , так как

  • это то, о чем заботятся пользователи
  • их можно масштабировать вверх и вниз

Такие вещи, как% CPU и IOPS, зависят от системы, поэтому вы используете их только тогда, когда планируете систему и измеряете ее в предварительном производстве, чтобы действовать как «суррогатная» вещь, о которой вы заботитесь, время.

ответил user906489 6 Jam1000000amSun, 06 Jan 2013 02:07:33 +040013 2013, 02:07:33
8

Планирование мощностей - неприятный зверь. Это как наука, так и искусство (если определенно темная).

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

Нет давления ...

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

К счастью, есть такая книга: « Планирование планирования производительности "

ответил gWaldo 29 PMpMon, 29 Apr 2013 18:05:39 +040005Monday 2013, 18:05:39
5

Чтобы перейти на пост Марка Хендерсона, я пишу это для Apache. Повторить то, что он сказал: «Короткий ответ: никто не может ответить на этот вопрос, кроме вас». Текст этого ответа сильно заимствован из моего ответа на аналогичный вопрос о Производительность сайта Drupal .

Настройка Apache с помощью Mod_Prefork

Apache , возможно, один из доступных (если не самый) доступный веб-сервер. Он является открытым исходным кодом и по-прежнему активно поддерживается. Вы можете запускать его как в Linux, так и в Windows, но более популярны в мире Linux /Unix.

Вы должны никогда использовать готовые конфигурации Apache. Вам всегда нужно настроить Apache на свой сайт. Основной файл конфигурации Apache на CentOS расположен по адресу /etc/httpd/conf/httpd.conf, а основной файл конфигурации Apache в системах Ubuntu обычно находится в /etc/apache2/apache2.conf. Дополнительные файлы конфигурации используются для таких вещей, как виртуальные хосты .

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

В большинстве случаев при установке Apache по умолчанию, которые поставляются с серверами CentOS и Ubuntu, MPM « mod_prefork ". Предполагая, что вы используете mod_prefork (если вы не уверены, то это более вероятно, но только вы можете это определить) Вот основные сведения о том, как его настроить:

  • Укажите максимальный объем памяти, который вы хотите использовать Apache.
  • Тяжело протестируйте свой сайт и определите, сколько памяти использует каждый процесс Apache (используя верхний).
  • Возьмите процесс Apache сверху, который использует большую часть памяти, добавьте немного к нему для хорошей оценки, а затем разделите свой первый номер (максимальный объем памяти, который вы хотите использовать Apache), этим новым номером.
  • Число, которое вы получите, должно быть вашим MaxClients & ServerLimit.

Это, конечно, не конец ответа. Настройка вашего сервера Apache требует времени и требует опыта, чтобы получить просто вправо.

ответил gWaldo 29 PMpMon, 29 Apr 2013 18:05:39 +040005Monday 2013, 18:05:39
0

Также я бы предложил поговорить с Architects & Инженеры, которые разработали /создали приложения, чтобы попытаться выявить узкие места, отдельные точки отказа и ограничения на лицензирование.

ответил DuckDNS 22 AMpFri, 22 Apr 2016 01:32:35 +030032Friday 2016, 01:32:35

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132