Создание фермы серверов SSL

Я заинтересован в построении архитектуры в статье ниже.

В настоящее время у меня есть балансировщик нагрузки уровня 4 по умеренной цене, и мои серверы приложений являются конечными точками SSL. Я хочу поместить ферму серверов SSL между моим балансировщиком нагрузки и серверами приложений. Затем я добавлю еще один недорогой балансировщик нагрузки между фермой SSL и серверами моих приложений для маршрутизации на уровне 7.

введите описание здесь

Мое веб-приложение имеет достаточно большой потребительский трафик, который может обрабатывать 6 серверов с емкостью около 50%. Кроме того, у меня есть трафик инфраструктуры, который на несколько порядков тяжелее, чем мой потребительский трафик. Это данные, поступающие со всего мира, которые должны интегрироваться с моим веб-приложением в режиме реального времени. Всего у меня 18 серверов приложений для обработки всего трафика, плюс 6 серверов баз данных. Я добавлю еще 6 серверов приложений в течение следующих 2 недель и еще 6 через 2 недели после этого. Консервативно, я предполагаю, что мне нужно будет масштабировать до 120 серверов к концу года.

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

Сложность состоит в том, что весь трафик адресован с использованием одного имени хоста и составляет почти 100% https. В моем случае единственный способ отличить инфраструктуру от трафика потребителя - это URL (плохая архитектура, которую я унаследовал), поэтому мне нужен балансировщик нагрузки 7-го уровня для маршрутизации. Однако, чтобы это работало, мне нужен либо причудливый аппаратный терминатор SSL, либо ферма серверов SSL, как описано выше. Поскольку моя пользовательская база быстро масштабируется, я беспокоюсь, что если я пойду по пути аппаратного обеспечения, он очень быстро станет очень дорогим, тем более что мне потребуется 4 из всего для высокой доступности (2 идентичных установки в 2 объектах). Между тем приведенная выше диаграмма выглядит очень гибкой и более горизонтально масштабируемой.

Кто-нибудь построил это раньше? Есть ли готовые конфигурации? Какие соображения я должен сделать и какое программное обеспечение я должен использовать (я слышал о людях, использующих apache с mod-ssl, nginx и stunnel)? Кроме того, когда имеет смысл покупать дорогостоящий балансировщик нагрузки по сравнению с созданием фермы серверов SSL?

http://1wt.eu/articles/2006_lb/index_05.html

2 ответа

Решение

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

Самая сложная кластерная конфигурация, которую мы настроили, состояла только из 20 серверов, из которых только 12% составляли трафик HTTPS (чистый SSL 14 Мбит).

Наша типичная архитектура...

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

lvs (initial ssl load balancing)
    -> pound (ssl-unwrapping) 
    -> varnish (caching) 
    -> haproxy (load balancing) 
    -> nginx (static content) 
    -> php (dynamic content) 
    -> mysql (db)

Мы использовали stunnel в комбинации с HAProxy (вместо Pound), но это вызывало некоторые сложности (из-за невозможности установить заголовки) дальше по цепочке.

фунт

Мы используем это, и оно работает очень хорошо, настолько, что мы не смогли довести его до его ограничений по оборудованию, которое у нас есть, и по объему передаваемого трафика. Apache jMeter во время тестирования.

На главной странице есть также заметка pound относительно улучшения производительности

Если PCRE, tcmalloc (из пакета Google perftools) и / или Hoard доступны, Pound свяжется с ними. Это обеспечит значительное повышение производительности и настоятельно рекомендуется.

Но pound считается подходящим для приложений с "низким" трафиком, но, похоже, не так масштабируется, как его конкуренты, что было задокументировано другими в сравнительных тестах

Программные SSL-терминаторы Benchmarks

  1. http://vincent.bernat.im/en/blog/2011-ssl-benchmark-round2.html
  2. http://vincent.bernat.im/en/blog/2011-ssl-benchmark.html
  3. http://barry.wordpress.com/2008/04/28/load-balancer-update/

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

Потребление ЦП будет вашей самой большой проблемой, поэтому умная работа с размером ключа SSL поможет, 1024-битный (в настоящее время большинство администраторов SSL не рекомендуется) против 2048-битных против 3072-битных ключей линейно увеличит накладные расходы.

Вот хорошее прочтение об общей производительности SSL, http://www.imperialviolet.org/2010/06/25/overclocking-ssl.html

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

Вы можете отделить инфраструктуру от потребительского трафика с помощью брандмауэра Linux. Используя функцию сопоставления строк netfilter/iptables, вы можете сопоставлять трафик на основе URL. После сопоставления трафика вы можете использовать это для выполнения QoS или пересылки трафика по-другому.

Другие вопросы по тегам