幾十萬人同時線上的直播間聊天,如何設計服務端架構?

網易雲信發表於2018-07-02
一個熱門視訊直播間人數可能達到幾十萬甚至上百萬人,幾十萬人發訊息,幾十萬人接收,流量相當驚人,那麼服務端要如何設計才能保證系統流暢?本文作者將結合他在網易雲信多年IM開發的經驗進行深度分析。

推薦閱讀

高併發IM系統架構優化實踐

IM即時通訊:如何跳出傳統思維來設計聊天室架構?

聊天室架構應滿足哪些條件

  • 高可用:任何一個節點故障都不應該引起服務不可用;
  • 易擴充套件:具有水平擴充套件的特性,對不同量級的線上使用者數都有應變的能力;
  • 高併發低延遲:能支援大量的使用者同時收發訊息,訊息從發出到送達所有線上端的延時在毫秒級;
  • 客戶端相容性:新型的應用都是能同時跨多種裝置實現訊息互通的,比如網頁端,手機端和桌面端,甚至智慧電視等。

聊天室架構如何設計

幾十萬人同時線上的直播間聊天,如何設計服務端架構?

客戶端層

處理各種裝置的相容問題,包括對ios,Android,Windows, Web等各種開發平臺的語言適配;訊息通道的管理維護,包括移動裝置上的弱網路管理,斷線重連等;保證資料安全,所有上行下行的資料包都需要加解密處理,規避資料洩露或中間人攻擊等各種安全風險。

閘道器接入層

管理大量客戶端連線,單個節點可以維護的客戶端數量在數十萬量級;處理不同型別客戶端的協議相容,由於客戶端實現技術的多樣性,導致客戶端與閘道器之間底層的資料通訊協議存在差異,需要由不同的接入閘道器做協議轉換;處理資料安全邏輯;跨網路的高可用邏輯,網路級別的主備(誰知道哪天網線會被藍翔的畢業生挖斷呢?);廣播訊息的高效下行分發,將收到的廣播訊息分發到所有連線在本節點上的客戶端。

路由層

作為業務層接入的中轉,同時承擔負載均衡和高可用的作用,單個業務節點處理能力達到瓶頸時更方便的擴容,路由層使業務層擴容對前置閘道器層完全透明;當一個網路的業務叢集出現網路故障時,可以切換到備用網路,保證服務可用性。

業務層

處理聊天室內的業務訊息,一個叢集內有眾多節點,節點角色相互對等,任何一個節點的故障會使整個叢集的處理能力下降,但不會引起服務的中斷,因為其他節點可以繼續接管業務資料包的處理;業務叢集同樣有多個網路環境的熱備,以應對可能出現的區域性網路故障。

難點在哪裡

  1. 客戶端多樣性。目前的應用都存在跨平臺的需求,iOS、安卓和PC端,網頁端,甚至IOT物聯網裝置,能連多少是多少,多多益善;但是不同開發平臺之間的技術差異性極大,不是所有公司都有這麼全的全棧程式猿的;如果團隊開發的話單就客戶端開發人員就不是幾個人可以完成的。
  2. 資料安全的保證。當前的網路安全形勢異常複雜,開發應用時如果不在通訊安全上花心思,那你的使用者就是在網際網路上裸奔;開發者需要針對不同的平臺,不同的通訊技術實現可靠的安全方案,避免使用者資料在傳輸過程中洩露,避免中間人攻擊等安全風險。
  3. 跨機房網路級的高可用方案。當機房網路出現故障時把責任推給市政施工隊或者“網路抽風”已經不流行了,使用者需要的是故障無感知。
  4. 所有環節的單點故障排除。任何硬體和軟體都存在故障的可能,我們無法避免應用罷工,那就需要隨時準備替補上場。
  5. 能應對任何使用者量級的需求。架構級做到水平擴充套件的能力,當使用者量增長時隨時可以通過堆伺服器來解決,而不是將架構推倒重來。


看完文章還是不知道怎麼做?那麼可以嘗試借用目前已有的平臺或工具,現在應用需要關注的是怎麼以最快的速度抓住使用者。

網易雲信是一個面對開發者的很好的IM雲平臺。十餘年的研發積累,使其在即時通訊技術方面處於全國領先水平。網易雲信至今已申請了60餘項IM專利,遠超市場同類產品。歡迎大家與我們討論IM技術,也歡迎大家多多關注網易雲信。

另外,想要獲取更多產品乾貨、技術乾貨,記得關注網易雲信部落格哦~


相關文章