[英]Does N|Solid Runtime load balance websockets with sticky sessions?
[英]Scaling with sticky sessions and websockets
最初,我們有兩個AWS EC2實例,其中node.js在帶有粘性會話的負載均衡器后面運行。 隨着負載的增加,會添加更多實例。
但我們面臨着這種方法的問題。 由於應用程序主要用於研討會,負載通常會在很短的時間內(研討會開始)增加,並且每個研討會參與者都與前兩個實例進行粘性會話,而新的實例幾乎沒有。 因此,性能保持不佳。
首先想到的是:讓我們禁用粘性會話。 但是這會破壞我們的websockets,因為它們需要粘性會話(至少這是我讀過的)。 另一個問題是負載減少。 實例關閉,套接字連接也會丟失。
是否有一種方法可以在實例之間轉換用戶會話,或者讓websockets在沒有粘性會話的情況下工作(可能使用Redis)?
解決方案是Application Load Balancer (請參閱注釋 )。
起初我們不得不禁用輪詢,因為這對其余部分不起作用。 這是通過手動定義傳輸來完成的。
let ioSocket = io('', { path: '/socket.io-client' transports: ['websocket']
之后,我們設置了一個帶有兩個目標組的標准應用程序負載均衡器:一個用於websockets,另一個用於所有其他請求。 websocket目標組的規則通過正則表達式匹配特定路徑:
最后一個問題是擴展:如果其中一個實例由於集群上的負載較低而關閉,則連接可能會丟失。 在客戶端斷開連接后,通過簡單的重新連接修復了這個問題(在我們的例子中是一個角度應用程序):
[...] this.socket.on('disconnect', () => { // Reconnect after connection loss this.connect(); }); [...]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.