2013-03-05 84 views
0

我遵循以下鏈接中的指令: How do you get Amazon's ELB with HTTPS/SSL to work with Web Sockets?設置ELB以與Websocket(在TCP模式下具有ELB轉發443到8443)一起工作。現在我看到了wss的這個問題:服務器發送message1,客戶端沒有收到它;幾秒鐘後,服務器發送message2,客戶端接收到兩個消息(兩個消息都是大約30個字節)。我可以很容易地重現這個問題。如果我在服務器上使用iptable設置端口轉發,並讓客戶端直接連接到服務器(端口443),則我沒有問題此外,問題似乎只發生在wss上。 ws工作正常。亞馬遜ELB上通過SSL的Websocket的延遲問題

服務器正在運行jetty8。

我查了EC2論壇,沒有找到任何東西。我想知道是否有人看到同樣的問題。

感謝

+0

SSL在ELB上終止並轉發未加密? – oberstet 2013-03-07 16:29:39

回答

1

從你的描述,這個漂亮的可能是一個緩衝的問題與ELB。快速研究表明,這實際上是問題。

ELB docs

當您使用TCP兩個前端和後端連接,您 負載平衡器將請求轉發到後端實例 不修改標題。此配置也不會 插入會話粘性Cookie或X-Forwarded- *標頭。

當使用HTTP(層7),用於既前端和後端 連接,負載平衡器解析報頭在所述請求和 終止之前的連接重新發送該請求到 註冊的實例( S)。這是 Elastic Load Balancing提供的默認配置。

AWS forums

我相信這是HTTP/HTTPS具體,但不配置的,但不能說 我敢肯定。您可能想嘗試在端口80上使用簡單的TCP 模式使用ELB,我相信這隻會將流量傳遞到 客戶端,反之亦然,無需緩衝。

你可以嘗試做更多的測量,看看這個延遲如何取決於消息大小?

現在,我不完全確定你已經做了什麼,失敗了什麼,沒有失敗。然而,在文檔和論壇帖子中,該解決方案似乎使用前端和後端的的TCP/SSL(第4層)ELB類型。

+0

那麼客戶端現在是直接連接到EC2實例的IP還是連接到ELB的IP?如果是ELB的知識產權,這不會使ELB成爲瓶頸嗎? – xrDDDD 2013-08-17 00:21:49

+0

負載平衡器通常不會對CPU造成任何影響。負載平衡器的重點在於將網絡流量轉向正確的方向。理論上唯一的瓶頸就是網絡帶寬。在ELB的情況下,我想亞馬遜會確保這永遠不會成爲你的瓶頸。如果沒有,那麼ELB可能有一個監控功能,您可以看到您是否接近限制。我想超載一個ELB並不是那麼容易,他們可能擁有巨大的端口。 – 2013-08-17 17:05:00

+0

前面也許多個ELBs EC2實例的.. – xrDDDD 2013-08-20 03:40:33

0

這與「Nagle的算法」產生共鳴...... TCP堆棧可以配置爲在通過線路發送它們以減少流量之前綁定請求。這可以解釋症狀,但值得一試