Eu configurei recentemente um servidor de soquete da Web baseado em Node.js que foi testado para lidar com cerca de 2.000 novas solicitações de conexão por segundo em uma pequena instância do EC2 (m1.small). Considerando o custo de uma instância m1.small e a capacidade de colocar várias instâncias atrás de um servidor proxy compatível com WebSocket, como o HAProxy, estamos muito felizes com os resultados.
No entanto, percebemos que ainda não tínhamos feito nenhum teste usando o SSL, então analisamos várias opções de SSL. Ficou evidente que a terminação de conexões SSL no servidor proxy é ideal, pois o servidor proxy pode inspecionar o tráfego e inserir cabeçalhos, como X-Forward-For, para que o servidor saiba de qual IP a solicitação veio.
As soluções de terminação SSL olhei para onde Pound, stunnel e stud, todas as quais permitiam conexões de entrada no 443 serem finalizadas, e então passadas para o HAProxy na porta 80, que por sua vez passa a conexão para os servidores da web. Infelizmente, no entanto, descobri que o envio de tráfego para o servidor proxy de terminação SSL em uma instância c1.medium (CPU Alta) consumia muito rapidamente todos os recursos da CPU e apenas a uma taxa de 50 ou mais solicitações por segundo. Eu tentei usar todos os três da solução listada acima, e todos eles executaram aproximadamente o mesmo que eu assumo sob o capô todos eles confiam no OpenSSL de qualquer maneira. Eu tentei usar uma instância muito alta de 64 bits de CPU alta (c1.xlarge) e descobri que o desempenho é escalável apenas linearmente com o custo. Então, com base no preço do EC2, eu precisaria pagar cerca de US $ 600p / m para 200 solicitações de SSL por segundo, em vez de US $ 60p / m para 2.000 solicitações não SSL por segundo. O preço anterior torna-se economicamente inviável muito rapidamente quando começamos a planejar a aceitação de 1.000 ou 10.000 de solicitações por segundo.
Eu também tentei encerrar o SSL usando o servidor https do Node.js, e o desempenho foi muito semelhante ao de Pound, stunnel e stud, portanto, nenhuma vantagem clara para essa abordagem.
Então, o que eu espero que alguém possa ajudar é aconselhar como posso contornar este custo ridículo que temos que absorver para fornecer conexões SSL. Ouvi dizer que os aceleradores de hardware SSL fornecem um desempenho muito melhor, pois o hardware foi projetado para criptografia e descriptografia SSL, mas como estamos usando o Amazon EC2 para todos os nossos servidores, usar aceleradores de hardware SSL não é uma opção, a menos que tenhamos dados separados centro com servidores físicos. Eu estou apenas lutando para ver como os gostos da Amazon, Google, Facebook podem fornecer todo o seu tráfego sobre SSL quando o custo é tão alto. Deve haver uma solução melhor por aí.
Qualquer conselho ou idéia seria muito apreciado.
Obrigado Matt