Недавно я настроил сервер веб-сокетов на базе 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 (высокая загрузка ЦП) очень быстро потребляет все ресурсы ЦП и только со скоростью около 50 запросов в секунду. Я попытался использовать все три решения, перечисленных выше, и все они работали примерно так же, как я предполагаю, что все они в любом случае полагаются на OpenSSL. Я попытался использовать 64-битный очень большой экземпляр High CPU (c1.xlarge) и обнаружил, что производительность масштабируется только линейно в зависимости от стоимости. Таким образом, исходя из цен EC2, мне нужно было бы заплатить примерно 600 долл. / М за 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