如何看待Phoenix用40核128G記憶體的機器只能同時保持僅僅200萬WebSocket連線?

時間 2021-05-08 02:30:19

1樓:嘟嘟雞

BEAM 的問題。

BEAM 其實沒有宣傳的那麼好,正常的情況下 15核以上 VM 就會虛掉 。

anti-Erlang 的論點裡面有一條就是:BEAM 在多核心伺服器的表現還不如定製 JVM 好 ♂。

2樓:gashero

2023年跟一幫兄弟玩erlang,搞web im,搞廣告統計,都是照著千萬級長連線做的。

果然是最近這些年移動開發和前端開發火起來以後,後端工程師都斷檔了。以至於就這臭水平也好意思拿出來。

先不談語言,維持長連線這事的關鍵在於如何繞開或者優化OS層面的socket管理。建立個高效的索引找到所需的socket。然後長連線較多時,就會占用大量記憶體。就這樣。

OS級別先不談,畢竟最近幾年有啥核心級更新沒有跟進。以繞開的OS的玩法說,就是直接走raw_socket。幾年前OS核心預設為每個連線的接收和傳送各分配8KB的緩衝區。

所以那時想要在64GB機器上做千萬級長連線,這緩衝區大小不改掉是肯定不行的。而且就算改掉,此類長連線服務本身大部分時間只是維持連線,通訊極少。所以這個緩衝區還是很浪費的。

而基於raw_socket則簡單的多。接到IP包做一下分片組裝,組TCP包,校驗一下checksum,ack,seq序號。對應用層長度為0的包做一下連線和斷開的處理。

定期乾掉沒有響應的連線。組裝好的TCP裡應用層的包就交給上層應用。

raw_socket的玩法就是要自己寫長連線socket管理所需的索引庫。每個到來的包要知道喚醒哪個session去處理。要傳送資料時也要知道該由哪個IP和埠發出去。

3樓:

請教一下GO語言是怎麼做到的?一般每一條TCP長連線都需要單獨占用一定數量的記憶體緩衝區,64G記憶體,假設全用來當TCP緩衝,對於100萬條連線,只能給每條連線提供64K的緩衝區,這個數值不會太小了嗎?

9700k核顯如何?考慮用核顯直播推流?

MIaiai233 我就是 97K 加 1070TI 加 16g 4400C17記憶體用核顯直播 1080P 60幀 9000位元速率 主要是卡頓問題 97K 推還是顯示卡推都沒辦法避免滿載問題一滿載就卡頓 很煩 用核顯能解決直播糊而且不會卡畫質什麼的反正我看不出差別對比U推或者卡推 I5 8400...

如何看待華為Mate 40系列相機取消4000萬高畫素超廣角,改為普通2000萬畫素?

畫素和coms的關係,coms就是餅,畫素就是切餅。同乙個餅切4000萬份就比切2000萬份多了?歸根結底還是看餅.更別說切的時候還有損耗。 雨林霖 感光元件的大小才是決定手機拍照質量的主導因素,經常看到手機上面關於手機相機的引數,畫素!畫素並不是乙個相片清晰與否的硬核指標。在相同大小的手機CMOS...

如何看待伊朗宣布中止履行伊核協議?

嘖嘖 怎麼說呢,反正手裡有核彈腰桿子就硬,就敢幹 光腳的不怕穿鞋的再亂能咋的都習慣了 美國也會有考慮,聯合國也會對美國施壓,雖然大概率沒啥用,再想想伊朗的核彈系統是否完善是否準確,如果打歪了咋整,所以大部分國家也都會支援議和也都會施壓,當然議和的路上會有問題,伊朗將軍死了,美國霸權主義習慣了,兩者低...