Ho recentemente creato un server socket Web basato su Node.js che è stato testato per gestire circa 2.000 nuove richieste di connessione al secondo su una piccola istanza EC2 (m1.small). Considerando il costo di un'istanza m1.small e la possibilità di mettere più istanze dietro un server proxy capace di WebSocket come HAProxy, siamo molto contenti dei risultati.Terminare un volume elevato di connessioni SSL in modo efficace
Tuttavia, ci siamo resi conto che non avevamo ancora eseguito test con SSL, quindi abbiamo esaminato una serie di opzioni SSL. È apparso evidente che terminare le connessioni SSL sul server proxy è ideale perché il server proxy può ispezionare il traffico e inserire intestazioni come X-Forward-For in modo che il server sappia da quale IP proviene la richiesta.
Così ho esaminato una serie di soluzioni come Pound, stunnel e stallone, che consentivano la terminazione delle connessioni in entrata su 443 e quindi passate su HAProxy sulla porta 80, che a sua volta trasmette la connessione al web server. Purtroppo, tuttavia, ho scoperto che l'invio di traffico al server proxy di terminazione SSL su un'istanza c1.medium (CPU alta) ha consumato molto rapidamente tutte le risorse della CPU e solo a una velocità di circa 50 richieste al secondo. Ho provato a utilizzare tutte e tre le soluzioni elencate sopra, e tutte hanno funzionato all'incirca nello stesso modo in cui suppongo che sotto il cofano si affidino comunque a OpenSSL. Ho provato a utilizzare un'istanza di CPU alta molto grande a 64 bit (c1.xlarge) e ho riscontrato che le prestazioni si limitano a scalare in modo lineare con il costo. Quindi, basandomi sui prezzi EC2, dovrei pagare circa $ 600p/m per 200 richieste SSL al secondo, invece di $ 60p/m per 2.000 richieste non SSL al secondo. Il prezzo precedente diventa economicamente non redditizio molto rapidamente quando iniziamo a pianificare di accettare 1.000 o 10.000 di richieste al secondo.
Ho anche provato a terminare l'SSL utilizzando il server https di Node.js, e le prestazioni erano molto simili a Pound, stunnel e perno, quindi nessun chiaro vantaggio a quell'approccio.
Quindi quello che spero che qualcuno possa aiutare è di consigliare come posso aggirare questo ridicolo costo che dobbiamo assorbire per fornire connessioni SSL. Ho sentito che gli acceleratori hardware SSL offrono prestazioni molto migliori in quanto l'hardware è progettato per la crittografia e la decrittografia SSL, ma poiché attualmente stiamo utilizzando Amazon EC2 per tutti i nostri server, l'uso di acceleratori hardware SSL non è un'opzione a meno che non dispongano di dati separati centro con server fisici. Sto solo cercando di capire come Amazon, Google, Facebook possano fornire tutto il loro traffico su SSL quando il costo è così elevato. Ci deve essere una soluzione migliore là fuori.
Qualsiasi consiglio o idea sarebbe molto apprezzato.
Grazie Matt
La parola "terminazione" è almeno confusa nel tuo contesto. Ho impiegato circa un minuto per capire perché vuoi chiudere le connessioni SSL e perché non basta chiudere un socket. –
Troppo male l'elb non fa prese per il web! Hai provato a limitare il set di codici che possono essere utilizzati per quelli che sono computazionalmente economici? –
Hai provato a utilizzare Amazon elb con SSL per gestirlo? Lo uso per un paio di SaaS che corro. Funziona bene. Non hai il requisito di connett/sec 2000 quindi non so se lo farà –