我們已經將我們的rails應用程序部署到了EC2。在我們的設置中,我們在循環DNS後面的小實例上有兩個代理。這些運行nginx負載平衡器的動態增長和縮小的Web服務器場。每個網絡服務器也運行nginx和mongrels集羣。這裏的nginx負責靜態內容和負載平衡的雜種。EC2中的SSL緩慢
無論如何,我們的點擊量是HTTPS。我們有2個代理服務器負責SSL。我注意到,這些實例的網絡吞吐量僅限於60 Mbps左右。相比之下,在測試中,我可以通過常規的HTTP始終在小實例上獲得700+ Mbps的速度。事實上,這與我在大型實例中得到的結果是一樣的。類似於正確比例的人在their testing中得到的結果。 (亞馬遜表示,一個小型的網絡I/O「適度」,而一個大型網絡I/O則「高」。如果我必須推測,我認爲這只是他們說每個物理盒共享一個網卡的小實例。我不確定這是否意味着一個大的專用網絡接口,但我懷疑它。)
在測試中,我能夠得到一個大型實例獲得約250 Mbps的SSL。這對我說,CPU或其他資源是瓶頸。但是,我們的監控圖並未顯示我們的代理上的CPU特別繁忙。
我的問題是:
- 是我對SSL是慢,由於CPU正確的,我們的圖形監控是錯誤的本能?或者可能有其他資源是限制因素嗎?
- 我們是否應該花費額外的成本並將代理放在高CPU實例上?或者只是添加更多的小型實例會更好嗎?
- 我們應該將SSL終端卸載到Web服務器上嗎?然而,這又帶來了另外一個問題:我們如何在我們的應用程序中獲得客戶端IP地址?現在我們的代理將它設置在X-FORWARDED-FOR標頭中,但是如果它不解密SSL,顯然這是不可能的。
我很想聽聽任何類似的設置。我們用Elastic Load Balancer修改了一下,但我認爲這基本上使我們處於上述#3的相同情況。有沒有其他人轉向ELB,並發現它值得嗎?