融云超級群,打破了以往群組服務模式下群聊成員的數量上限魔咒,為行業提供了第一個真正支持無限用戶在線交流和獲取信息的社交產品大殺器。移步【融云全球互聯網通信云】免費體驗
無限用戶分發因群成員數量多、業務需求量大面臨消息分發量激增、消息狀態多樣等多種挑戰。
為了保證超級群在超大規模用戶分發上的極致性能,融云超級群從設計階段便綜合考慮了服務部署模型、消息投遞方式以及資源隔離等核心難題的解決方案。
無限用戶分發面臨的技術挑戰
1. 每個用戶上行發送的每條消息,都需要實時分發給所有用戶。即使目標用戶不在線,也需要轉成推送,觸達這個用戶。
無限用戶可能過于抽象,我們以擁有 1000 萬用戶的一個群為例,一個用戶發送的每條消息都會變成 1000 萬的下行分發。在面對突發峰值,特別是群內有爆點消息或大規模成員被帶起節奏的時候,數據的存儲和網絡的分發壓力會急劇上升。
2. 超級群內成員可能面對海量信息。無論是客戶端的性能或者用戶的心力,都是有瓶頸的。
成員量龐大的超級群會產生不同于普通聊天室的獨特需求:用戶希望既可以在有需要的時候不遺漏信息,又能在無關的時候不要被打擾。
所以,哪些消息、哪些場景需要推送,會話和消息以什么頻率和聚合的方式通知到客戶端,需要有一個巨大的可定制空間。
也就是說,作為一個通信平臺,在海量信息和實時聊天之間,需要把能力抽象,并賦予 APP 彈性調整的能力。
3. 由于超級群中的信息量太大,需要支持將群分割為不同的頻道,類似傳統的 topic 或 channel。即使相同的群和群成員,通過不同的頻道,仍然能將會話、消息、未讀數分門別類聚合。用戶可以更關注自己感興趣的部分,提升用戶粘性。
4. 將信息和聊天結合的場景,一般都有多端的需求。不同的平臺,比如 Android、iOS、Web 等,在海量消息的網絡請求和存儲方面都有不同的技術特點,甚至同平臺不同廠商的推送通道特性也不同,這些都需要一一考慮。
當然,無限用戶群,還需要為每個用戶提供全球的優質網絡接入,保證客戶端和服務器之間消息不重不丟不亂序。
在這方面,融云平臺每天承載億級用戶和千億的消息分發,已經提供了堅實的基礎,無須特別考慮。移步【融云全球互聯網通信云】免費體驗
融云超級群的設計架構和實施方案
服務分發分層架構
融云超級群從設計階段便綜合考慮了服務部署模型、消息投遞方式以及資源隔離等核心問題。移步【融云全球互聯網通信云】免費體驗
有限的擴散模型:
主節點負責核心校驗,擴散節點則負責數據讀寫,保證主節點高可用和擴散節點分組內高可用,確保強數據一致性
優良的資源隔離:
支持公有云、專有云,分級的資源隔離,精準的流控策略
動態的投遞模型:
根據群類型選擇消息投遞模型,多級消息緩存結構,在線狀態聯動,多種消息定向投遞策略
存儲和分發
對于底層存儲而言,群成員無上限和有上限區別很大,有上限我們可以根據上限進行設計。
比如,普通群的消息,通??梢赃x擇寫擴散,可以在實時投遞中獲得比較好的速度和并發性。結合半寫擴散(引用分發)的機制,可以在時間和空間上做一定的平衡。
但是超級群的場景,為了降低讀寫壓力,默認采用讀擴散的方式進行優化。原則上 1 寫 N 讀,通過上下行節點分離和一致性 hash 的特點,可以對讀和寫分別進行特定優化。針對熱點數據引入內存級消息環和二級 LRU 緩存,保證讀寫性能。
分發模式
面對海量消息,用戶希望既可以在有需要的時候不遺漏信息,又能在無關的時候不要被打擾。
對這些業務形態進行分析和實現,落到分發模型上,可以分為兩大類。
一類是消息驅動型,比如 Telegram,一個用戶實時接收所有會話的消息,會話狀態、未讀數、通知提醒其實都是由消息驅動的。
另一類是會話驅動,比如 Discord,用戶有選擇性地接收某些會話的消息,關注度低的會話,僅需要接收會話狀態、未讀數、@ 信息等通知就可以。和第一類結合起來,還可以做到訂閱式的會話驅動。
分發機制決定了群的管理節點、會話節點、消息分發節點都必須是單獨的高可用邏輯單元。
消息投遞方式
用戶不在線的情況下,超級群仍然支持給用戶進行推送。但是,考慮到用戶體驗,APP 可以設置按時間聚合,或者僅推送 @ 等關聯度較高的消息,也可以讓用戶自行選擇,設置全局、群組級別、頻道級別的免打擾,減少對用戶的打擾。
用戶在線的情況下,IM 長連接一般有直接推送、通知拉取、聚合通知等方式。超級群的消息和會話,會動態地結合這幾種方式。協議層支持 QoS 并保證每條消息都有唯一值,客戶端可以通過增量時間戳的方式,進行同步和補償。
用戶離線再上線的情況下,客戶端會首先增量同步超級群會話信息,并通過會話和消息的 merge 和消息斷檔機制,同時保證消息的快速獲取和信息的完備性。
部分操作內化
普通群場景下,大部分的狀態、未讀數、正在輸入等會話信息,默認交給客戶端進行處理,以保證靈活性。
但在超級群場景下,由于海量的歷史消息和多端的特點,這些信息的存儲和獲取,需要內化在超級群的通信模型中。
針對消息的變更,融云超級群也提供了一系列擴展和內化的能力,比如消息發送時、發送后的擴展信息,并支持消息的撤回、刪除、修改、引用修改等操作。
而針對 APP 常用的通知或者控制信令的場景,融云也提供在線消息等方式,保證在線用戶的觸達并降低分發量。移步【融云全球互聯網通信云】免費體驗
流控和資源隔離
因為超級群的模型非常靈活且峰值很高,作為一個通信平臺,融云會在超級群的上行節點,提供 APP、群組、信令級別的流控,保證平臺的穩定性,且支持專有云的單獨調整。
通過以上方式,融云超級群得以在無限用戶場景中保證消息傳輸的可靠性,不會出現消息丟失、消息延遲、消息亂序等問題;消息高并發情況下,用戶不論是離線還是在線,都能有序接收推送或消息,不會出現卡頓,無法拉取等問題。同時,通過內化部分操作的方式減輕了客戶端的性能壓力。