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