IM——基本系統架構

1.用戶角度的聊天系統

如果我們站在一個使用者的角度從直觀體驗上來看,一個簡單的聊天系統大概由以下元素組成:用戶賬戶,賬號關係,聯繫人列表,消息,聊天會話。

這個應該不難理解

1.聊天的參與需要用戶,所以需要有一個用戶賬號,用來給用戶提供唯一標識,以及頭像,暱稱等可供設置的選項。

2.賬號和賬號之間通過某些方式(比如加好友,互粉等)構成賬號間的關係鏈

3.你的好友列表或者聊天對象的列表,我們稱爲聯繫人的列表,其中你可以選擇一個聯繫人進行聊天互動等操作。

4.在聊天互動這個環節產生了消息。

5.同時你和對方之間的聊天消息記錄組成了一個聊天會話,在會話裏能看到你們之間所有的互動消息

2.開發者眼中的聊天系統

從一個IM系統開發者的角度看,聊天系統大概由這幾個部分組成:客戶端,接入服務,業務處理服務,存儲服務和外部接口服務

1.客戶端:客戶端一般是用戶用於收發消息的終端設備,內置的客戶端程序和服務端進行網絡通信,用來承載用戶的互動請求和消息接收功能。我們可以把客戶端想象爲郵局業務的前臺,它負責把你的信收走,放到傳輸管道中。

2.接入服務:可以認爲是服務端的門戶,爲客戶端提供消息收發的入口。發送的消息先由客戶端通過網絡給到接入服務,然後再由接入服務遞交到業務層進行處理。

我們可以把接入服務想象成一個信件管道,聯通了郵局的前臺和信件分撥中心。但是實際上,接入服務的作用很大,不僅僅只有保持連接和消息傳遞功能。

當服務端有消息需要推送給客戶端時,也是將經過業務層處理的消息先遞交給接入層,再由接入層通過網絡發送到客戶端。

此外,在很多基於私有通信協議的IM系統實現中,接入服務還提供協議的編解碼工作,編解碼實際主要是爲了節省網絡流量,系統會針對傳輸的內容進行緊湊的編碼(比如 protobuf),爲了讓業務處理時不需要關心這些業務無關的編解碼工作,一般由接入層來處理。

另外, 還有session維護的工作很多時候也由接入服務來實現,session的作用是標識哪個用戶在哪個tcp連接,用戶後續的消息推送能夠知道,如何找到接收人對應的連接來發送。

另外,接入服務還負責最終消息的推送執行,也就是通過網絡連接把最終的消息從服務器傳輸送達到用戶的設備上。

3.業務處理層:是真正的消息業務邏輯處理層,比如消息的存儲,未讀數變更,更新最近聯繫人等,這些內容都是業務處理的範疇。是整個IM系統的中樞大腦,負責各種複雜業務邏輯的處理。就好比你的信到達分撥中心後,分撥中心可能需要給接收人發條短信告知一下,或者分撥中心發現接收人告知過要拒絕接收這個發送者的任何信件,因此會在這裏直接把信件退回給發信人。

4.存儲服務:賬號信息,關係鏈,以及消息本身,都需要進行持久化存儲。

5.外部接口服務:第三方平臺的離線消息推送

 

3.IM系統都有哪些特性

1、實時性

2.可靠性:不丟消息,消息不重複

3.一致性

4.安全性

 

Q:爲什麼接入服務和業務處理服務要獨立拆分呢?

A:1、接入服務作爲消息收發的出入口,必須是一個高可用的服務,保持足夠的穩定性是一個必要條件。

試想一下,如果連接服務總處於不穩定狀態,老是出現連不上或者頻繁斷連的情況,一定會大大影響聊天的流暢性和用戶體驗。而業務處理服務由於隨着產品需求迭代,變更非常頻繁,隨時有新業務需要上線重啓。如果消息收發接入和業務邏輯處理都在一起,勢必會讓接入模塊隨着業務邏輯的變更上線而頻繁啓停,導致已通過網絡接入的客戶端經常性地斷連,重置,重連。

這種連接層的不穩定性會導致消息下推不及時,消息發送流暢性差,甚至會導致消息發送失敗,從而降低用戶消息收發的體驗。

所以,將“只負責網絡通道維持,不參與業務邏輯,不需要頻繁變更的接入層”抽離出來,不管業務邏輯如何調整變化,都不需要接入層進行變更,這樣能保證連接層的穩定性,從而整體上提升消息收發的用戶體驗

2.從業務開發人員的角度看,接入服務和業務處理進行拆分有助於提升業務開發效率,降低業務開發門檻。

簡而言之就是,業務人員只需要關心業務處理就好。

 

Q:消息存儲的作用:

1.會話一方用戶不在線,上線時進行消息推送

2..內容審查,監管,電子證據,法律要求

3.數據分析,輿情分析

 

發佈了44 篇原創文章 · 獲贊 39 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章