Abbiamo installato la nostra app per binari su EC2. Nella nostra configurazione, abbiamo due proxy su piccole istanze dietro DNS round robin. Questi eseguono i servizi di bilanciamento del carico nginx per una farm in crescita dinamica e in diminuzione dei server Web. Ogni server Web esegue anche nginx con un gruppo di meticci. Qui il nginx si occupa del contenuto statico e del bilanciamento del carico dei meticci.Lentezza SSL in EC2
In ogni caso, il nostro traffico di grandi dimensioni è HTTPS. Abbiamo i 2 proxy che si prendono cura di SSL. Ho notato che il nostro throughput di rete in queste istanze si riduce a soli 60 Mbps circa. Per contrasto, nei test sono in grado di ottenere costantemente oltre 700 Mbps su una piccola istanza tramite il normale HTTP. In realtà, questo è lo stesso di quello che posso ottenere su una grande istanza. Simile a quello che i ragazzi della Scala Giusta hanno ottenuto in their testing. (Amazon dice che un piccolo diventa "moderato" I/O di rete, mentre un grande diventa "alto". Se dovessi speculare, penso che questo sia solo il loro modo di dire che ci sono più piccole istanze per ogni box fisico che condivide una scheda di rete Non sono sicuro se ciò significa che una grande ottiene un'interfaccia di rete dedicata, ma ne dubito.)
In fase di test, sono riuscito a ottenere un'istanza di grandi dimensioni per ottenere circa 250 Mbps SSL. Questo mi dice che la CPU o qualche altra risorsa è il collo di bottiglia. Tuttavia, i nostri grafici di monitoraggio non mostrano che la CPU dei nostri proxy è particolarmente occupata.
Le mie domande sono:
- È il mio istinto su SSL essendo più lento a causa della CPU corretta e nostri grafici di monitoraggio sono sbagliate? O qualche altra risorsa potrebbe essere il fattore limitante?
- Dovremmo solo prendere il costo aggiuntivo e mettere i proxy su istanze con CPU alta? O sarebbe meglio fare solo aggiungere più piccole istanze?
- Dovremmo scaricare la terminazione SSL sui server web? Questo introduce un ulteriore problema, però: come si ottiene l'indirizzo IP del client nella nostra applicazione? In questo momento il nostro proxy lo imposta nell'intestazione X-FORWARDED-FOR, ma ovviamente questo non sarebbe possibile se non decodifica SSL.
Mi piacerebbe sapere di qualsiasi configurazione simile. Abbiamo armeggiato un po 'con il loro Elastic Load Balancer, ma penso che fondamentalmente ci metta nella stessa situazione del # 3 sopra. Qualcun altro ha fatto il passaggio a ELB e ha trovato che ne valeva la pena?