Erlang YAWS налог https

Поскольку все должно быть https, я включил его и заметил, насколько медленнее https по сравнению с http.

У меня есть сервер Ubuntu/YAWS в Далласе. Я запускаю YAWS с помощью "yaws --daemon --nodebug"

If I do

время curl -i https://share.spreadsheetconverter.com/echo/

и

время curl -i http://share.spreadsheetconverter.com/echo/

от самого сервера https занимает около 100мс а http 20мс, т.е. разница 80мс.

Когда мы пытаемся из Швеции, Европы, https составляет 1400 мс, а http — 350 мс. Эти цифры могут быть логичными из-за задержки над Атлантикой.


Однако теперь к странному.

У меня также есть сервер Windows/IIS в Далласе.

Если я сравниваю простой запрос http-get на обоих серверах, разница https-штрафа для сервера YAWS намного больше, чем для IIS. (Я также тестировал Tomcat, и он ведет себя аналогично IIS).

Это также, по-видимому, зависит от задержки, т. Е. Чем дольше вы находитесь от сервера, тем больше разница между IIS и YAWS.

Когда я провожу аналогичные тесты с сервером IIS в Далласе, Швеция, https составляет 1000 мс, а http такой же, как и для YAWS, т. е. IIS намного быстрее (400 мс) на https, чем Yaws. Как будто YAWS делает дополнительный сетевой вызов.

Я также экспериментировал с

http://tools.pingdom.com/fpt/

и только что извлек время SSL, о котором они сообщили. Обратите внимание, что время SSL увеличивается быстрее для YAWS.

          |  YAWS  |  IIS
Dallas    |  79ms  |  75ms 
New York  |  212ms |  87ms
Amsterdam |  503ms | 315ms

Хорошо, что мне делать?

  • Есть ли ошибка в моей настройке YAWS?
  • Решит ли проблему размещение NGINX перед YAWS и позволит ли Nginx обрабатывать https?
  • Есть ли ошибка в моем SSL-сертификате? Могут ли они быть быстрее или медленнее? Я проверил с помощью https://www.ssllabs.com/ssltest/analyze.html.

Обновление 20 августа 2015 г.

Я обновился до yaws 2.0, и да, разница в производительности осталась.

Используя

curl -v --trace-time --trace-ascii echo.log https://share.spreadsheetconverter.com/echo/

и сравнивая его с

curl -v --trace-time --trace-ascii server1.log https://www.spreadsheetserver.com/server1/

Я сравнил все строки, я вижу, что мы теряем 300 мс в одной строке.

Вот как это выглядит, когда мы говорим с Yaws 2.0

17:37:54.606668 == Info: TLSv1.2, TLS handshake, Finished (20):
17:37:54.606692 => Send SSL data, 16 bytes (0x10)
0000: ......Jb.9...#.^
17:37:54.758726 == Info: TLSv1.2, TLS change cipher, Client hello (1):
17:37:54.758761 <= Recv SSL data, 1 bytes (0x1)
0000: .
17:37:55.107695 == Info: TLSv1.2, TLS handshake, Finished (20):
17:37:55.107726 <= Recv SSL data, 16 bytes (0x10)
0000: ..........Y.xV.!
17:37:55.107784 == Info: SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA

и это, когда я разговариваю с IIS

17:40:25.247308 == Info: TLSv1.0, TLS handshake, Finished (20):
17:40:25.247329 => Send SSL data, 16 bytes (0x10)
0000: ........f4..qh:(
17:40:25.376893 == Info: TLSv1.0, TLS change cipher, Client hello (1):
17:40:25.376925 <= Recv SSL data, 1 bytes (0x1)
0000: .
17:40:25.377081 == Info: TLSv1.0, TLS handshake, Finished (20):
17:40:25.377103 <= Recv SSL data, 16 bytes (0x10)
0000: ....C..'.A,..'R.
17:40:25.377142 == Info: SSL connection using TLSv1.0 / AES128-SHA

И для Yaws, и для IIS первая «Отправка данных SSL» занимает 150 мс.

Для IIS два немедленных «Recv SSL data» следуют без задержки.

Однако в случае с Yaws нам нужно ждать 350 мс для получения первых данных «Recv SSL», а затем немедленно

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

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


person mattias    schedule 31.01.2015    source источник
comment
Как вы заметили, похоже, что во время рукопожатия с Yaws больше трафика. Настроен ли Identity Authentication одинаково для разных веб-серверов? В Yaws это опция verify в разделе ssl. Включение аутентификации на обоих концах вызовет больше пакетов во время рукопожатия.   -  person johlo    schedule 31.01.2015
comment
Я добавил в раздел ssl в yaws.confg verify = 1, без разницы.   -  person mattias    schedule 31.01.2015
comment
В таких вопросах всегда полезно указать версию Yaws, которую вы используете, а также версию базовой системы Erlang.   -  person Steve Vinoski    schedule 01.02.2015
comment
Yaws 1.98, Erl 17.4, Ubuntu 14.04.1 LTS   -  person mattias    schedule 01.02.2015
comment
Может проблема в маршрутизации? Подозрительно, что время локального пинга так похоже. Если бы проблема заключалась в SSL, вы бы увидели довольно постоянное сложение, а не множитель.   -  person Nathaniel Waisbrot    schedule 02.02.2015
comment
Я не думаю, что это проблема маршрутизации, так как время http одинаково, как локально, так и при увеличении расстояния.   -  person mattias    schedule 02.02.2015
comment
Вы пробовали последнюю версию Yaws 1.99?   -  person Steve Vinoski    schedule 02.02.2015
comment
Нет, я не пробовал 1.99, так как у меня были некоторые проблемы с арматурой со встроенным YAWS, которые я хотел сделать одновременно. Если вы скажете, что может быть разница для этого, я проверю.   -  person mattias    schedule 02.02.2015
comment
Я обновился до Yaws 1.99 + еще немного, но результат все тот же. Заметная разница между IIS и Yaws для https.   -  person mattias    schedule 15.02.2015
comment
Обновился до Yaws 2.0.2, без разницы   -  person mattias    schedule 08.03.2016
comment
Вы пытались использовать одну и ту же версию TLS и набор шифров? IIS — это TLSv1.0 с AES128-SHA, YAWS — это TLSv1.2 с ECDHE-RSA-AES256-GCM-SHA, что может быть немного дороже в зависимости от того, как все настроено и построено. Стек TLS может быть просто медленнее в Erlang (что маловероятно, учитывая, сколько вещей работает с ним в наши дни, но может быть возможным).   -  person zxq9    schedule 13.07.2017
comment
Нет, не пробовал. Однако, поскольку разница НАСТОЛЬКО ОГРОМНА, мы говорим об одной дополнительной поездке туда и обратно. Это можно проверить с помощью Wireshare или аналогичного. Я начал добавлять nginx в качестве прокси-сервера и вместо этого обрабатывать сертификаты.   -  person mattias    schedule 14.07.2017


Ответы (1)


Nginx или HAproxy могут решить эту проблему. Вы должны прекратить свой HTTPS-трафик на прокси-узле. И после этого вы должны пропустить HTTP-трафик на узле erlang. Кроме того, держать узел erlang в Интернете без прокси-сервера не рекомендуется.

person Elzor    schedule 28.09.2015
comment
Да, согласен, это вариант. Тем не менее, я всегда хочу как можно меньше программного обеспечения, и, поскольку у меня не так много статических страниц, нет никакого преимущества в производительности при переносе этого на nginx. Пожалуйста, объясните, кроме того, держать узел erlang в Интернете без прокси-сервера не рекомендуется. - person mattias; 28.09.2015
comment
Есть какие-то атаки на HTTP-уровень. Например, http Slowloris. Nginx не подвержен слоулорису и многим другим. Я думаю, что лучше перестраховаться с быстрым прокси перед кодом erlang. - person Elzor; 29.09.2015