架構師面試(十九):IM 架構

問題

IM 系統從架構模式上包括?【介紹人模式】和 【代理人模式】。介紹人模式也叫直連模式,消息收發不需要服務端的參與,即客戶端之間直連的方式;代理人模式也叫中轉模式,消息收發需要服務端進行中轉。

下面關于這兩類模式描述的說法正確的有哪幾項呢???

A. 介紹人模式需要解決 P2P 打洞技術問題;

B. 代理人模式方便對消息內容進行風險管控;

C. 介紹人模式不利于實現消息漫游,影響用戶體驗;

D. 從性能上比較,介紹人模式比代理人模式的性能更優。

解析

A選項:早期的很多IM軟件大都采用了介紹人模式,也就是要通信的兩個客戶端進行直連的模式;如果這兩個客戶端在同一個局域網中,建立連接是非常方便的(比如現在仍在普遍使用的“飛鴿傳書”);如果這兩個客戶端是在不同的局域網中(局域網中的客戶端是沒有公網IP的),怎么建立連接呢?這個時候往往需要P2P打洞技術。這個地方有一個非常有意思的面試題目:幾乎所有的客戶端都是沒有公網獨立IP的,但我們上網時,那些服務器程序回復的數據包是怎么找到我們的客戶端的呢?(大家可以自行學習一下 ?NAT 技術!)介紹人模式見下圖。

B選項:代理人模式對消息內容可以方便地進行風控管理,這個是非常容易理解的;畢竟在介紹人模式下進行風控管理,用戶體驗、代價和復雜度都太大了!(大家想一下,為什么?)代理人模式見下圖。

C選項:介紹人模式下,消息都保存在客戶端本地;換一個終端設備,消息如何漫游呢!

D選項:收發消息的性能損耗,除了網絡傳輸外,還有對連接的管理和維護、網絡異常情況的處理、消息落庫、復雜的業務處理、程序邏輯框架等等;介紹人模式下,所有的客戶端既是客戶端也是服務端,在活躍的聊天場景(比如群聊)中,所有的客戶端形成了一種網狀的通信模式;在極端情況下,每一個客戶端要處理其他所有的客戶端請求,此時客戶端的性能是很難提升的;而如果將壓力轉移到擴展性非常好的服務端,也就是代理人模式,整個 IM 的性能就會提升很多。當然,我們是工程派,對性能的論斷沒有一個實驗環境進行完整的實驗是不合理;這個地方重點強調的是:介紹人模式不會因為看似網絡傳輸減少了一個環節,其性能就比代理人模式要優!

擴展一下:

我們對這兩種 IM 的架構方案進行抽象:?

IM 的介紹人模式其實就是【邊緣計算方案】,充分利用每個客戶端節點的計算能力進行業務邏輯處理;

IM 的代理人模式其實就是【中心計算方案】,充分利用中心服務器的計算能力進行業務邏輯處理。

參考答案

ABC

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/72985.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/72985.shtml
英文地址,請注明出處:http://en.pswp.cn/web/72985.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【服務器】RAID0、RAID1、RAID5、RAID6、RAID10異同與應用

目錄 ?編輯 一、RAID概述 1.1 磁盤陣列簡介 1.2 功能 二、RAID級別 2.1 RAID 0(不含校驗與冗余的條帶存儲) 2.2 RAID1(不含校驗的鏡像存儲) 2.3 RAID 5 (數據塊級別的分布式校驗條帶存儲) 4、RAI…

MySQL身份驗證的auth_socket插件

在Ubuntu 20.04 LTS上,MySQL 8.0默認使用auth_socket插件進行身份驗證,可能存在意想不到的情況。 一、auth_socket插件 在使用sudo mysql或通過sudo切換用戶后執行任何MySQL命令時,不需要輸入密碼或錯誤密碼都可以正常登入mysql數據庫&…

小程序開發中的用戶反饋收集與分析

我們在開發小程序的過程中根據開發過程中的代碼及業務場景,以下是針對需求管理系統的用戶反饋收集與分析方案設計: 需求管理系統用戶反饋收集與分析方案 一、反饋數據模型設計 // 新增Feedback模型(app/admin/model/Feedback.php) namespace app\admin\model; use think\…

python關鍵字匯總

文章目錄 1. 變量與類型相關2. 控制流相關3. 函數與類相關4. 異常處理相關5. 模塊相關6. 其他 在 Python 3 里有 35 個關鍵字,它們各自具備特定的用途與意義 1. 變量與類型相關 True、False 意義:布爾類型的常量,分別代表邏輯真與邏輯假。示…

使用Python在Word中創建、讀取和刪除列表 - 詳解

目錄 工具與設置 Python在Word中創建列表 使用默認樣式創建有序(編號)列表 使用默認樣式創建無序(項目符號)列表 創建多級列表 使用自定義樣式創建列表 Python讀取Word中的列表 Python從Word中刪除列表 在Word中&#xff…

軟考-軟件設計師-計算機網絡

一、七層模型 中繼器:信號會隨著距離的增加而逐漸衰減,中繼器可以接受一端的信息再將其原封不動的發給另一端,起到延長傳輸距離的作用; 集線器:多端口的中繼器,所有端口公用一個沖突域; 網橋&…

關于Flask框架30道面試題及解析

文章目錄 基礎概念1. 什么是Flask?其核心特性是什么?2. Flask和Django的主要區別?3. 解釋Flask中的“路由”概念。如何定義動態路由?核心組件4. Flask的請求上下文(Request Context)和應用上下文(Application Context)有什么區別?5. 如何訪問請求參數?POST和GET方法的…

C++20 中 `constexpr` 的強大擴展:算法、工具與復數庫的變革

文章目錄 一、constexpr 在 <algorithm> 中的應用1. 編譯時排序2. 編譯時查找 二、constexpr 在 <utility> 中的應用1. 編譯時交換2. 編譯時條件交換 三、constexpr 在 <complex> 中的應用1. 編譯時復數運算 四、總結 C20 對 constexpr 的增強是其最引人注目…

【ELK】節省存儲 之 壓縮存儲方式調整

目錄 集群版本&#xff1a; 7.17.6 解釋幾個概念&#xff1a; 段&#xff08;Segment&#xff09; 合并(Merge) 索引設置&#xff1a; 壓縮方式(index.codec)&#xff1a; 測試設置前提條件 對比 在創建的時候指定壓縮類型&#xff08;index.codec&#xff09; 對比 在…

conda create之后,以前的conda env list 只能看到環境路徑 沒有環境名稱了

1.命令 conda env list 看到的顯示如下&#xff1a; 左邊這列的"base"&#xff0c;指向的路徑和其它環境變量安裝的路徑不一致。 這時需要通過"activate [anaconda的環境路徑]"和"source activate"回到anaconda&#xff1a; 2.執行切換命令 …

夸克網盤任務腳本——進階自動版

腳本是用于自動管理和更新夸克云盤(Quark Cloud Drive)上的文件和目錄的Python腳本。其主要功能包括自動下載、更新、重命名、刪除文件和文件夾,以及處理和發送通知,可以在特定的時間間隔內運行,根據配置文件進行操作。 主要功能 1. Quark 類: __init__:初始化類,設置…

AsyncHttpClient使用說明書

[[toc]] AsyncHttpClient(AHC)是一個高性能、異步的 HTTP 客戶端庫,廣泛用于 Java 和 Scala 應用中,特別適合處理高并發、非阻塞的 HTTP 請求。它基于 Netty 或 Java 原生的異步 HTTP 客戶端實現,支持 HTTP/1.1 和 HTTP/2 協議,適用于微服務、API 調用、爬蟲等場景。 1.…

Powershell、Windows Shell、CMD 的區別與聯系

Powershell、Windows Shell、CMD 的區別與聯系 一、核心概念 名稱 全稱 類型 發布時間 CMD Command Prompt 命令行解釋器&#xff08;CLI&#xff09; 1985&#xff08;DOS&#xff09; Powershell Windows PowerShell 任務自動化腳本環境 2006 Windows Shell Wi…

vulnhub-Tr0ll ssh爆破、wireshark流量分析,exp、尋找flag。思維導圖帶你清晰拿到所以flag

vulnhub-Tr0ll ssh爆破、wireshark流量分析&#xff0c;exp、尋找flag。思維導圖帶你清晰拿到所以flag 1、主機發現 arp-scan -l 2、端口掃描 nmap -sS -sV 192.168.66.185 nmap -sS -A -T4 -p- 192.168.66.185 nmap --scriptvuln 192.168.66.185經典掃描三件套&#xff0c;…

強化學習(趙世鈺版)-學習筆記(8.值函數方法)

本章是算法與方法的第四章&#xff0c;是TD算法的拓展&#xff0c;本質上是將狀態值與行為值的表征方式&#xff0c;從離散的表格形式&#xff0c;拓展到了連續的函數形式。 表格形式的優點是直觀&#xff0c;便于分析&#xff0c;缺點是數據量較大或者連續性狀態或者行為空間時…

[特殊字符] 2025藍橋杯備賽Day7——B2117 整理藥名

&#x1f50d; 2025藍橋杯備賽Day7——B2117 整理藥名 題目難度&#xff1a;?? 適合掌握字符串基礎操作 考察重點&#xff1a;大小寫轉換、字符串遍歷、邊界條件處理 B2117 整理藥名 題目描述 醫生在書寫藥品名的時候經常不注意大小寫&#xff0c;格式比較混亂。現要求你…

笛卡爾軌跡規劃之齊次變換矩陣與歐拉角、四元數的轉化

一、笛卡爾軌跡規劃需求 笛卡爾軌跡規劃本質就是我們對機械臂的末端位置和姿態進行規劃&#xff0c;其實也就是對末端坐標系的位姿進行規劃。我們清楚末端坐標系的位姿是可以用齊次變換矩陣T來表示的&#xff0c;但這樣表示的話&#xff0c;并不利于我們去做規劃&#xff0c;所…

【PCIe 總線及設備入門學習專欄 3.1 -- PCIe 中為何只有 TLP 會被 Switch 和 RC 進行路由?】

文章目錄 Overview為什么 DLLP 不需要路由呢?總結Overview 這里介紹些為什么在 PCIe 中只有 TLP(事務層數據包)會被 Switch 和 Root Complex(RC) 路由,而 DLLP(數據鏈路層數據包)和 Ordered Set 不會被路由。這是因為 TLP 起始于源端口的事務層,結束于目的端口的事務…

大摩閉門會:250321 學習總結報告

如果圖片分辨率不足&#xff0c;可右鍵圖片在新標簽打開圖片或者下載末尾源文件進行查看 本文只是針對視頻做相應學術記錄&#xff0c;進行學習討論使用

深入理解 Spring Boot 應用的生命周期:從啟動到關閉的全流程解析

引言 Spring Boot 是當今 Java 開發中最流行的框架之一&#xff0c;它以簡化配置和快速開發著稱。然而&#xff0c;要真正掌握 Spring Boot&#xff0c;理解其應用的生命周期是至關重要的。本文將深入探討 Spring Boot 應用的生命周期&#xff0c;從啟動到關閉的各個階段&…