Рентабельное завершение большого количества SSL-соединений

Я недавно установил сервер веб-сокетов на основе 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, мне нужно было бы платить примерно 600 долларов в минуту за 200 SSL-запросов в секунду, в отличие от 60 долларов за 2000 запросов без SSL в секунду. Первая цена очень быстро становится экономически невыгодной, когда мы начинаем планировать принимать 1000 или 10 000 запросов в секунду.

Я также попытался завершить работу SSL с помощью https-сервера Node.js, и производительность была очень похожа на Pound, stunnel и stud, так что явных преимуществ у этого подхода нет.

Я надеюсь, что кто-то может помочь, так это посоветовать, как мне обойти эту нелепую цену, которую мы должны нести, чтобы обеспечить SSL-соединения. Я слышал, что аппаратные ускорители SSL обеспечивают гораздо лучшую производительность, поскольку оборудование предназначено для шифрования и дешифрования SSL, но поскольку в настоящее время мы используем Amazon EC2 для всех наших серверов, использование аппаратных ускорителей SSL не является вариантом, если у нас нет отдельных данных. центр с физическими серверами. Я просто изо всех сил пытаюсь понять, как такие компании, как Amazon, Google, Facebook, могут предоставлять весь свой трафик через SSL, когда это так дорого. Там должно быть лучшее решение.

Мы будем благодарны за любые советы или идеи.

Спасибо Мэтт

13
задан Matthew O'Riordan 30 January 2012 в 16:43
поделиться