Какая часть производительности снизилась для https против http для apache?


50

Примерно, какой удар по производительности принесет https по сравнению с http для той же страницы? Предположим, я могу обработать 1000 запросов / с для abc.php, насколько он уменьшится при доступе через https? Я знаю, что это может зависеть от аппаратного обеспечения, конфигурации, ОС и т. Д., Но я просто ищу общее правило / оценка.


2
Было бы неплохо увидеть принятый ответ на это.
Hyppy

Ответы:


57

Для быстрого и грязного теста (т. Е. Без оптимизации!) Я включил простой веб-сайт Ubuntu apache2 по умолчанию (который просто говорит «Это работает!») С http и https (самозаверяющий сертификат) на локальной виртуальной машине Ubuntu 9.04 и запустил apache бенчмарк " ab" с 10 000 запросов (без параллелизма). Клиент и сервер находились на одной машине / виртуальной машине:

Результаты для http (" ab -n 10000 http://ubuntu904/index.html")

  • Время, затраченное на тесты: 2,664 секунды
  • Запросов в секунду: 3753,69 (# / сек)
  • Время на запрос: 0,266 мс

Результаты для https (" ab -n 10000 https://ubuntu904/index.html"):

  • Время, затраченное на тесты: 107,673 секунды
  • Запросов в секунду: 92,87 (# / сек)
  • Время на запрос: 10,767 мс

Если вы внимательно посмотрите (например, с помощью tcpdump или wireshark) на связь tcp / ip одного запроса, вы увидите, что для случая http требуется 10 пакетов между клиентом и сервером, тогда как https требует 16: задержка намного выше с https. (Подробнее о важности латентности здесь )

Добавление keep-alive ( abопция -k) в тест улучшает ситуацию, потому что теперь все запросы используют одно и то же соединение, т. Е. Накладные расходы SSL ниже, но https по-прежнему измерим медленнее:

Результаты для http с keep-alive (" ab -k -n 10000 http://ubuntu904/index.html")

  • Время, затраченное на тесты: 1.200 секунд
  • Запросов в секунду: 8334,86 (# / сек)
  • Время на запрос: 0,120 мс

Результаты для https с keep-alive (" ab -k -n 10000 https://ubuntu904/index.html"):

  • Время, затраченное на тесты: 2,711 секунды
  • Запросов в секунду: 3688,12 (# / сек)
  • Время на запрос: 0,271 мс

Вывод :

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

1
+1 Отличная работа там. Спасибо за размещение номеров.
MN

Можем ли мы получить некоторые характеристики оборудования этой машины? шифрование сильно зависит от мощности процессора.
Мэтт Симмонс

1
Недавно я провел много тестов на VPS, и единственное, что повлияло на производительность, - это использованный шифр. Если вы ограничите шифры 128 битами, вы сможете получать около 500-600 запросов в секунду. Использование 256-битного шифра, который сбрасывает до <100 запросов в секунду. Я считаю, что когда я проводил собственное тестирование, это было 30 запросов в секунду. Очевидно, что реальные цифры зависят от вашей машины.
Коверт

Мэтт Симмонс, я использовал 2-ядерную 64-разрядную виртуальную машину Ubuntu 9.04 (VMware Fusion), работающую на Mac Pro начала 2008 года с 2-мя четырехъядерными процессорами Intel Xeon 2,8 ГГц.
Knweiss

Ваш ответ не позволил мне опубликовать вопрос, который был бы закрыт в течение 20 секунд. Спасибо!
MonkeyZeus

10

На современных серверах я бы сказал, что узким местом будет сеть и ваше приложение, а не шифрование. TLS / SSL в apache будет написан на довольно оптимизированном C, поэтому ваш PHP-код будет затмевать, особенно если вы собираетесь делать такие вещи, как доступ к базе данных. Обслуживание статических файлов, вероятно, окажет большее влияние, так как шифрование станет большей частью всего процесса. Я не могу дать вам никаких конкретных цифр, но я был бы удивлен, если бы это было больше 5% и, вероятно, ближе к паре процентов.


2
Дэвид прав, это зависит от того, какой у вас контент. Хорошим способом было бы сравнить
radius

Помимо скорости шифрования, как насчет рукопожатия SSL, это повлияет на производительность и пропускную способность сервера?
erotsppa

Рукопожатие SSL добавит пару пакетов в начало соединения. Влияние этого будет в значительной степени зависеть от задержки соединения между сервером и клиентом. Поддержка активности HTTP уменьшит влияние этого рукопожатия.
Дэвид Пашли


1

Я обнаружил, что на современном оборудовании у меня больше шансов быть привязанным к конкретной транзакции для ввода-вывода, чем для процессора (вычислений). Это особенно верно, когда речь идет о сжатии и шифровании. 128-битное шифрование в наши дни тривиально - я, как правило, сталкиваюсь с гораздо более сложным построением и доставкой исходящих страниц, чем с использованием SSL, и не заметил значительной разницы в производительности между трафиком http и https в течение нескольких лет.


1

Я второй рекомендации для Nginx. В моих собственных тестах, он выдержал как выделенный загрузчик SSL.


0

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


0

Я могу подтвердить, что добавленная нагрузка для шифрования очень мала по сравнению с любым другим включенным элементом (скриптинг, сеть, ...)


0

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

В целом, это неудачно, но SSL всегда и, скорее всего, всегда будет сильно портить производительность.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.