Замедление SSL в EC2

Мы развернули наше приложение для направляющих на EC2. В нашей установке у нас есть два прокси на маленьких экземплярах позади циклического DNS. Они выполняют nginx подсистемы балансировки нагрузки для динамичного роста и уменьшения фермы веб-серверов. Каждый веб-сервер также выполняет nginx с кластером полукровок. nginx здесь заботится о довольных статических и выравнивание нагрузки полукровки.

Так или иначе нашим трафиком в общем и целом является HTTPS. У нас есть 2 прокси, заботящиеся о SSL. Я заметил что наша сетевая пропускная способность на тех ограничениях экземпляров на уровне только 60 Мбит/с или около этого. Для контрастирования в тестировании, я могу последовательно добраться 700 + Мбит/с на маленьком экземпляре через регулярный HTTP. На самом деле это совпадает с тем, что я могу войти в большой экземпляр. Подобный тому, что Правильные парни Масштаба вошли в свое тестирование. (Amazon заявляет, что маленькое получает "умеренную" сеть I/O, в то время как большое становится "высоким". Если я должен был размышлять, я думаю, что это - просто их способ сказать, что существуют более маленькие экземпляры на физическое поле, совместно использующее одну сетевую плату. Я не уверен, означает ли это, что большое получает интерфейс выделенной сети, но я сомневался бы относительно этого.)

В тестировании я смог заставить большой экземпляр получать SSL приблизительно на 250 Мбит/с. Это говорит мне, что ЦП или некоторый другой ресурс являются узким местом. Однако наши контрольные графики не показывают ЦП на наших прокси, являющихся особенно занятым.

Мои вопросы:

  1. Мой инстинкт о SSL являющийся медленнее из-за корректного ЦП, и наши контрольные графики являются неправильными? Или некоторый другой ресурс мог быть ограничивающим фактором?
  2. Мы должны просто взять дополнительные расходы и поместить прокси на экземпляры высокого ЦП? Или было бы лучше сделать, просто добавляют более маленькие экземпляры?
  3. Мы должны разгрузить завершение SSL к веб-серверам? Это представляет еще одну проблему, хотя: как мы получаем клиентский IP-адрес в нашем приложении? Прямо сейчас наш прокси устанавливает его в заголовке X-FORWARDED-FOR, но очевидно это не было бы возможно, если это не дешифрует SSL.

Я хотел бы услышать о любых подобных установках. Мы чинили немного с их Эластичной Подсистемой балансировки нагрузки, но я думаю, что в основном помещает нас в ту же ситуацию как № 3 выше. Кто-либо еще переключился на ELB и нашел, что это стоит того?

6
задан Jonik 16 April 2010 в 14:24
поделиться

3 ответа

Используете ли вы кеш сеанса SSL, который предоставляет nginx? Это может помочь nginx сэкономить на циклах, постоянно перерабатывающих шифрование. См. http://wiki.nginx.org/NginxHttpSslModule#ssl_session_cache

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

Я бы оставил SSL-прокси в качестве специального уровня, чтобы вы могли масштабировать стоимость согласования ssl отдельно от других проблем.

4
ответ дан 17 December 2019 в 20:33
поделиться

Медленнее SSL: - True, то любой обычный HTTP-запрос HTTPSSL, будет медленнее.

Попробуйте создать аналогичную настройку, на локальной сети LAN, где у вас есть 3 MONGREL_COLUST и 2 WebServer. И проверьте с помощью скручиваемого погрузчика с отправкой около 5K запросов.

Если все в порядке, вот великолепно. Может быть, вы будете работать усерднее с ребятами EC2.

-2
ответ дан 17 December 2019 в 20:33
поделиться

Я бы рекомендовал использовать Java3D для части визуализации

  • Java 3D Tutorial Введение концепции

  • Сайт загрузки содержит библиотеки и несколько демонстрационных проектов, для быстрого запуска.

Чтобы выполнить макет графика, можно найти алгоритмы в JUNG и проверить, можно ли легко расширить до 3D.

Демонстрация компоновки JUNG

-121--4481931-

К сожалению, css не поддерживает родительские селекторы. (
Таким образом, единственный способ сделать это - использовать javascript, как родительский метод jQuery .

Обновление: Селекторы CSS уровня 4 будут поддерживать родительские селекторы! http://www.w3.org/TR/selectors4/#subject

-121--1265342-

Я использую SSL в Apache, который обрабатывает доступ к нашему репозиторию Subversion в экземпляре Small Windows EC2. В ходе тестирования я обнаружил, что HTTPS доступ был несколько медленнее, чем HTTP, но это по той очевидной причине, что шифрование/дешифрование не является мгновенным процессом, как вы ожидали.

Если ваши метрики CPU верны и вы не видите чрезмерной нагрузки, то подразумевается, что полоса пропускания является ограничивающим фактором; Однако я не понимаю, почему можно получить 700 + Мбит/с для экземпляра HTTP по сравнению с 60Mbps только для экземпляра HTTPS. Если условия тестирования не были идентичными, конечно, и в экземпляре HTTPS что-то еще происходит, вы не учитывали...

Более крупные экземпляры, конечно, получают лучшую долю полосы пропускания хоста, чем Smalls - их меньше, конкурирующих за ресурс. Поскольку внутренней сетью EC2 является Gigabit Ethernet, просмотр 700Mbps на экземпляре Large возможен при условии, что другие экземпляры Large на том же узле не предъявляли аналогичных требований к полосе пропускания. Чтобы извлечь это из малого экземпляра, вам бы повезло, что вы бежите внутри очень легковесного хоста. И в этом случае не будет никакой гарантии, что вы будете поддерживать этот уровень производительности - как только другие Smalls заработают в сети, ваша доля доступной полосы пропускания начнет падать.

Я думаю, что это по существу проблема полосы пропускания малого экземпляра - добавление большего количества Smalls не обязательно поможет, потому что у вас нет контроля над тем, на каком хосте они раскручиваются; Большие экземпляры, однако, получают больший фрагмент полосы пропускания и, следовательно, имеют более согласованную доступность емкости.

0
ответ дан 17 December 2019 в 20:33
поделиться
Другие вопросы по тегам:

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