問題
IM 系統從架構模式上包括?【介紹人模式】和 【代理人模式】。介紹人模式也叫直連模式,消息收發不需要服務端的參與,即客戶端之間直連的方式;代理人模式也叫中轉模式,消息收發需要服務端進行中轉。
下面關于這兩類模式描述的說法正確的有哪幾項呢???
A. 介紹人模式需要解決 P2P 打洞技術問題;
B. 代理人模式方便對消息內容進行風險管控;
C. 介紹人模式不利于實現消息漫游,影響用戶體驗;
D. 從性能上比較,介紹人模式比代理人模式的性能更優。
解析
A選項:早期的很多IM軟件大都采用了介紹人模式,也就是要通信的兩個客戶端進行直連的模式;如果這兩個客戶端在同一個局域網中,建立連接是非常方便的(比如現在仍在普遍使用的“飛鴿傳書”);如果這兩個客戶端是在不同的局域網中(局域網中的客戶端是沒有公網IP的),怎么建立連接呢?這個時候往往需要P2P打洞技術。這個地方有一個非常有意思的面試題目:幾乎所有的客戶端都是沒有公網獨立IP的,但我們上網時,那些服務器程序回復的數據包是怎么找到我們的客戶端的呢?(大家可以自行學習一下 ?NAT 技術!)介紹人模式見下圖。
B選項:代理人模式對消息內容可以方便地進行風控管理,這個是非常容易理解的;畢竟在介紹人模式下進行風控管理,用戶體驗、代價和復雜度都太大了!(大家想一下,為什么?)代理人模式見下圖。
C選項:介紹人模式下,消息都保存在客戶端本地;換一個終端設備,消息如何漫游呢!
D選項:收發消息的性能損耗,除了網絡傳輸外,還有對連接的管理和維護、網絡異常情況的處理、消息落庫、復雜的業務處理、程序邏輯框架等等;介紹人模式下,所有的客戶端既是客戶端也是服務端,在活躍的聊天場景(比如群聊)中,所有的客戶端形成了一種網狀的通信模式;在極端情況下,每一個客戶端要處理其他所有的客戶端請求,此時客戶端的性能是很難提升的;而如果將壓力轉移到擴展性非常好的服務端,也就是代理人模式,整個 IM 的性能就會提升很多。當然,我們是工程派,對性能的論斷沒有一個實驗環境進行完整的實驗是不合理;這個地方重點強調的是:介紹人模式不會因為看似網絡傳輸減少了一個環節,其性能就比代理人模式要優!
擴展一下:
我們對這兩種 IM 的架構方案進行抽象:?
IM 的介紹人模式其實就是【邊緣計算方案】,充分利用每個客戶端節點的計算能力進行業務邏輯處理;
IM 的代理人模式其實就是【中心計算方案】,充分利用中心服務器的計算能力進行業務邏輯處理。
參考答案
ABC