Недавно я установил сервер веб-сокетов Node.js, который был протестирован для обработки около 2000 новых запросов на подключение в секунду на небольшом экземпляре EC2 (m1.small). Учитывая стоимость экземпляра m1.small и возможность поместить несколько экземпляров за прокси-сервер, поддерживающий WebSocket, такой как HAProxy, мы очень довольны результатами.
Однако мы поняли, что еще не проводили тестирование с использованием SSL, поэтому рассмотрели несколько вариантов SSL. Стало очевидно, что прекращение SSL-соединений на прокси-сервере идеально, потому что тогда прокси-сервер может проверять трафик и вставлять заголовки, такие как X-Forward-For, чтобы сервер знал, к какому IP-адресу пришел запрос.
Итак, я рассмотрел ряд решений, таких как Pound, stunnel и stud, все из которых позволяли завершать входящие соединения на 443, а затем передавались на HAProxy на порт 80, который, в свою очередь, передавал соединение на веб-серверы, К сожалению, однако, я обнаружил, что отправка трафика на прокси-сервер терминации SSL на экземпляре c1.medium(High CPU) очень быстро потребляет все ресурсы ЦП и только со скоростью 50 или около того запросов в секунду. Я попытался использовать все три из перечисленных выше решений, и все они выполнялись примерно так же, как я предполагаю, под капотом, которые все они полагаются на OpenSSL в любом случае. Я попытался использовать 64-разрядный очень большой экземпляр High CPU (c1.xlarge) и обнаружил, что производительность только линейно зависит от стоимости. Поэтому, основываясь на ценах EC2, мне нужно будет заплатить примерно 200 долл./М за 200 запросов SSL в секунду, в отличие от 60 долл./М за 2000 без запросов SSL в секунду. Бывшая цена становится экономически нежизнеспособной очень быстро, когда мы начинаем планировать принимать 1000 или 10000 запросов в секунду.
Я также пытался прекратить использование SSL с помощью сервера https Node.js ', и производительность была очень похожа на Pound, stunnel и stud, поэтому нет явного преимущества для этого подхода.
Так что я надеюсь, что кто-то может помочь с этим, советует, как я могу обойти эту смешную стоимость, которую мы должны поглотить, чтобы обеспечить SSL-соединения. Я слышал, что аппаратные ускорители SSL обеспечивают гораздо лучшую производительность, поскольку аппаратное обеспечение предназначено для шифрования и дешифрования SSL, но поскольку в настоящее время мы используем Amazon EC2 для всех наших серверов, использование аппаратных ускорителей SSL не является вариантом, если у нас нет отдельных данных центра с физическими серверами. Я просто пытаюсь понять, как подобные Amazon, Google и Facebook могут обеспечить весь свой трафик через SSL, когда стоимость этого настолько высока. Там должно быть лучшее решение.
Приветствуются любые советы или идеи.
Спасибо Matt