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

由於視頻直播業務的大規模擴張,聊天室這種功能在最近幾年又火了起來。本篇文章將會重點挑選聊天室這個典型場景,和你們分享一下 網易雲信在實現這個功能時是如何作架構設計的。

相關推薦閱讀

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

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

常見的虛擬社羣

聊天室的應用場景很是廣,除了傳統的圖文聊天外,時下流行的視頻彈幕、在線秀場、在線教育、遊戲互動等各式各樣產品中都有相似的應用場景。安全

在討論聊天室以前,咱們先了解下幾種常見的虛擬社羣形態。下表從參與人數、消息送達即時性、離線消息關注度等維度對論壇、IM P2P、IM羣和聊天室這幾種常見的虛擬社羣形態作了簡單對比,從這個對比能夠看到聊天室是不一樣於論壇和羣模式的一種虛擬組織,聊天室的架構須要跳出傳統思惟來設計。服務器


聊天室跟普通的IM羣(微信羣,QQ羣等)相比最大的不一樣點在於它是一個比較開放的虛擬組織。咱們能夠將聊天室比喻成一個廣場,廣場是開放無邊界的,全部的人均可以隨進隨出,而羣就像一個房間,是一個有邊界有容量上限的私密組織,而且進入這個房間須要必定條件,通常是主動申請加入或被邀請加入。聊天室對比BBS論壇這種虛擬組織來講,它既具備了IM羣消息即時送達的特性又有論壇參與人數無上限的特性。微信

聊天室關鍵技術和難點

那麼,是否能從一個已有的成熟技術框架上改造一個聊天室出來呢?網絡

通過前面的比較咱們看到,聊天室和論壇及IM羣都具備必定的共性,看起來彷佛能夠將論壇架構改形成聊天室,也能夠將IM羣改形成聊天室。架構

路徑一:將論壇架構改形成聊天室,首先須要提升消息送達的即時性,因爲論壇都是基於HTTP協議的,爲了保證消息即時送達,須要客戶端不斷輪詢服務器來獲取新的消息,若是對即時性的要求越高,那輪詢的時間就須要縮短,這種模式在用戶量達到必定規模後是沒法承載的。爲了保證消息的高效送達,客戶端與服務器之間的須要採用長鏈接機制,新消息的送達經過服務器主動向客戶端下推來完成。併發

路徑二:將已有的IM羣改形成聊天室,因爲羣具備對離線消息關注度高的特性,全部的羣消息在成員離線時須要持久化,於是羣人數越多效率越低,也正是由於這個緣由,通常的IM羣都是有人數上限的,若是想把羣改形成聊天室,就不能存離線消息,因此這種方式看起來也不是這麼順暢。負載均衡

如今市場上不少提供聊天室類服務的產品其實都是基於羣的模式來實現的,因此人數上限一直是一個難以突破的瓶頸,甚至有的服務直接使用「超大羣」或「千人羣」這樣一種特殊羣模式來知足用戶對聊天室場景的需求。框架

下面咱們來看下,若是要實現一我的數無上限的聊天室服務,須要解決哪些難題。高併發


首先:客戶端多樣性。近幾年來移動互聯網發展得很是快,如今推出的APP通常都須要同時具有iOS版、安卓版和Web版、PC版等不一樣的版本,跨平臺的開發需求一直是攔在創業團隊面前的一座大山;

第二:數據安全保障。當前的網絡環境異常複雜,咱們的APP在客戶端與服務器之間的數據通訊都暴露在複雜的公網環境中,消息通過哪些節點,中間有沒有被抓包,數據是否被惡意採集,這些問題普通用戶開和發者都容易忽略。若是數據通訊過程當中忽視了安全需求,很容易形成用戶數據的泄露,數據的安全保障對於產品而言也很重要;

第三:須要應對網絡故障或服務單點故障的難題。開發者代碼寫得再好也沒法避免硬件故障或是網絡故障這種不可預知的問題,在產品積累了必定的用戶量以後,若是遇到服務可用性問題會形成用戶流失;

第四:架構須要具有足夠的彈性。在用戶量級上來以後能支持快速的水平擴展,不會由於架構的問題須要重構;

最後:消息投遞慢。聊天室對消息的即時性要求很是高,同一條消息在投遞給不一樣成員時須要在毫秒級的延時完成,若是消息投遞慢了會形成消息時間線錯亂,聊天室裏的人沒法理解上下文場景。

基於這些難點,咱們提出聊天室須要具有這些指標:跨平臺、數據加密、高可用、易擴展、高併發低延遲。

網易雲信聊天室的架構


上圖是網易雲信的聊天室分層架構。

客戶端層:處理各類設備的兼容問題,包括對ios,Android,Windows, Web等各類開發平臺的語言適配;消息通道的管理維護,包括移動設備上的弱網絡管理,斷線重連等;保證數據安全,全部上行下行的數據包都須要加解密處理,規避數據泄露或中間人攻擊等各類安全風險。

網關接入層:管理大量客戶端鏈接,單個節點能夠維護的客戶端數量在數十萬量級;處理不一樣類型客戶端的協議兼容,因爲客戶端實現技術的多樣性,致使客戶端與網關之間底層的數據通訊協議存在差別,須要由不一樣的接入網關作協議轉換;處理數據安全邏輯;跨網絡的高可用邏輯,網絡級別的主備(誰知道哪天網線會被藍翔的畢業生挖斷呢?);廣播消息的高效下行分發,將收到的廣播消息分發到全部鏈接在本節點上的客戶端。

路由層:做爲業務層接入的中轉,同時承擔負載均衡和高可用的做用,單個業務節點處理能力達到瓶頸時更方便的擴容,路由層使業務層擴容對前置網關層徹底透明;當一個網絡的業務集羣出現網絡故障時,能夠切換到備用網絡,保證服務可用性。

業務層:處理聊天室內的業務消息,一個集羣內有衆多節點,節點角色相互對等,任何一個節點的故障會使整個集羣的處理能力降低,但不會引發服務的中斷,由於其餘節點能夠繼續接管業務數據包的處理;業務集羣一樣有多個網絡環境的熱備,以應對可能出現的區域性網絡故障。

看完文章仍是不知道怎麼作?那麼能夠嘗試借用目前已有的平臺或工具,如今應用須要關注的是怎麼以最快的速度抓住用戶。網易雲信是一個面對開發者的很好的IM雲平臺。十餘年的研發積累,使其在即時通信技術方面處於全國領先水平。網易雲信至今已申請了60餘項IM專利,遠超市場同類產品。歡迎你們與咱們討論IM技術,也歡迎你們多多關注網易雲信。

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

相關文章
相關標籤/搜索