刷微博是許多人每天的“例行指部鍛鍊”,一掃一劃,就能評論熱點話題,訂閱熱門動態。當然,也有不少人對明星不感興趣,轉而去刷 Reddit、貼吧、虎撲、知識星球或是其他 BBS 社群。對於 90、80 後來說,這個被“刷”的物件可能是曾經的即刻、糗百,天涯、貓撲。關注【融雲全球網際網路通訊雲】瞭解更多
可以說,“聚眾看熱鬧”是人類永恆不變的愛好,但我們看熱鬧的方式卻並不豐富:要麼刷 BBS 社群,要麼扎進社交軟體的群聊。
不知你有沒有想過,如果將二者合二為一,讓微博、貼吧這樣的社群,全部變成即時聊天,各個博主、吧友的動態,全部以群聊訊息的形式推送給你,你又可以即時地回覆、互動,甚至和這些博主、吧友連麥視訊,情況會是怎樣的?
這將是一個超級社群,或者更準確地說,這將是一個無人數上限的“超級群”。
可這個“超級群”,實現起來將非常困難。在程式設計師看到產品設計的那一刻,就有精神崩潰的風險。
(真正的伺服器壓力)
崩潰”主要源自技術挑戰,更確切地說,是伺服器面臨的巨大的讀寫壓力和儲存壓力。
微博曾出現過幾次著名的故障:趙麗穎領證、關曉彤官宣、王寶強離婚。在調侃微博崩潰的各種網路段子背後,我們能看到的是,一個架構師面對一條微博下幾秒新增數萬條評論,伺服器壓力瞬間暴漲幾十倍的無奈身影。
與此類似的是直播彈幕的分發場景。無論是近期的視訊號五月天跨年演唱會,還是 B 站春晚,彈幕過百萬輕而易舉(“二零一九最美的夜”bilibili 晚會彈幕超過 170 萬條)。
理論上講,每一條彈幕都要向直播間內觀眾做全量分發。以五月天跨年演唱會為例,當晚有 1,680 萬人線上上觀看,如果保守假設當晚共傳送 100 萬條彈幕,那麼單是彈幕的寫操作,就至少要執行 16,800,000 x 1,000,000 次。
因為實際支撐有困難,又要顧及使用者的螢幕根本無法同屏顯示上萬條評論,所以彈幕的轉發一般都是降級處理 —— 分發一小部分給你看,其他略過。
而如果將微博評論、直播彈幕,全部“群聊化”,問題會更加恐怖。“群聊化”後,產品形態成為“超級群”,問題進入 IM 場景,可以做相應的流控,但不能丟棄資訊。且無論是微博評論還是直播彈幕,對資訊上下文的關注度都不高,但這恰恰是 IM 關注的重點。
可以說,至少在 3 年以前,能夠系統解決這些問題並將其打磨為一個成熟產品的人不多。直到 2018 年,國外出現了一個名叫 Discord 的軟體,網友才體驗到了這種全新的社群形式。
Discord 最初只服務於遊戲語音連麥,但很快演化為一個超級社群。2021 年,據 CNN 報導,Discord 已有超過 1.4 億名註冊使用者,微軟正在談判以 100 億美元收購它。
而在 npr 的採訪中,美國芝加哥地區的一名 18 歲少年表示,他 2020 年的大部分時間都在 Discord 上閒逛,並將其形容為“Reddit 和群聊的混合體”。
元宇宙的支持者們也驚奇地發現,所謂的“Discord 模式”,不就是未來元宇宙虛擬社群的基礎模式麼?在元宇宙裡,總不能先加個 500 人的群再開始聊天吧。
拋開模式創新不談,如果要深究 Discord 的技術核心,恰恰就是我們前面所描述的“超級群”。而在 2022 年 1 月 11 日,融雲也釋出了一款名為“超級群”的 PaaS 產品,以此為例,我們或許能搞清楚,這種帶了點科幻色彩的未來社群,究竟是如何實現的。
(超級群的設計架構和實施方案)
超級群的底層技術支撐能力,可以簡單分為兩部分來談,分別是超級群業務能力、IM 底層技術能力
超級群的業務能力,在架構設計層面共分為四層,分別是加速網路、接入層、核心服務層以及底層儲存。之所以要做這樣的劃分,是為了充分利用融雲自身的統一加速網路機制, 保障網路連通性以及連線質量,讓超級群可以根據自身業務需求, 在連線通道的基礎上,專心實現更高效的業務互動。
在融雲,傳統的群訊息建立在收發模型(收件箱、發件箱)的基礎上,獨立維護會話列表和歷史訊息儲存。從使用者傳送群訊息,到群內 (成員數量為 N ) 接收群訊息。整個過程將產生四類訊息:
- 一條傳送方發件箱記錄;
- N-1 條接收方的收件箱記錄;
- 1 條群歷史訊息記錄;
- N 條會話列表記錄。
訊息儲存投遞流程為:
終端 A -> 傳送訊息 -> 接入服務 -> 群管理 (群訊息上行) -> 分發 -> 群聊訊息分發節點 -> 訊息節點 -> 通知拉取 (直接傳送) -> 終端 B/C/D
在這樣的流程下,訊息分發節點與訊息節點互動密切,通常合併部署。同時,訊息節點也會直接觸發收件箱、發件箱的訊息儲存。
但在超級群的場景下,群成員數量理論上無上限,無論是訊息的上行、下行,還是訊息在儲存層的寫入和查詢,都將導致空前的服務承載壓力,以上方案因此不再適用。於是,融雲在現有連線機制之上, 針對超級群做了互動設計優化,設計了兩種分發模型: 分別叫做訊息驅動模型和會話驅動模型。
對於訊息驅動模型而言,訊息節點將不再直接觸發收件箱儲存操作。
融雲特別設計了一個環狀訊息佇列, 通過記憶體搭配外部快取的方式,完成最近 N 條訊息的快取, 並通過對訊息儲存模型優化, 完成熱點資料的快速讀寫。對訊息的下行,則做聚合處理,保障客戶端能夠處理大量訊息變更通知,並且儘量減少互動次數,也讓訊息的拉取變得更快速、精準。
會話驅動模型則是在訊息驅動模型的基礎之上, 做進一步的優化。
首先,訊息節點不會再通知客戶端拉取訊息,而是通過觸發實時會話, 通知客戶端會話發生變更。而這裡的實時會話,則是實現客戶端訂閱機制的基礎, 讓客戶端可以只獲知已訂閱的會話變更訊息,從而進一步縮小需要處理的會話以及訊息數量。
其次,客戶端在收到會話變更通知後, 會根據通知,判斷是否要發起會話訊息查詢操作。如果是,則按照一定的機制查詢最新或特別範圍的訊息。
除訊息分發層面的優化外,對儲存的優化也非常關鍵。融雲超級群的所有服務,均按照業務維度進行一致性雜湊分發。比如,上行服務可以按照群 ID 或 channel ID 做雜湊,分發服務可以按照接收方 ID 做雜湊。核心目標在於確保熱資料的命中,優先使用記憶體、LRU 快取、再使用分散式快取、磁碟冷儲存。
APP、群組、信令級別的流控,則是另一重保障,它將一個看似無邊界的產品需求,轉化為了可琢磨、可實現的技術問題。因此,雖然流控不是超級群實現方案的重點,但依然不可或缺。
整體而言,融雲的超級群構建方案有四個要點:
- 弱化原發件箱 / 收件箱模型, 尤其是收件箱, 以極大提升讀寫效能,避免因 I/O 而產生的效能瓶頸;
- 通過"變更通知"聚合等方式,儘量減少終端與服務端的互動次數,減少因網路互動而產生的延時;
- 設計專用資料結構 (環形佇列), 並設定記憶體、外部快取等多級快取結構, 提升超大規模下的訊息分發儲存速度, 並提供快速查詢能力;
- 通過會話驅動模型, 進一步減少網路互動過程中,待傳輸的資料量。
那麼,有了以上方案,是否就可以構建出一個“超級群”呢?顯然還不夠,在超級群的場景之下,IM 底層技術能力的積累可能更為重要。
(IM 底層技術能力與網路層效能優化)
如果要解讀融雲超級群所依賴的 IM 基礎能力,恐怕一本迷你書也寫不完,其粗略架構圖如下:
但好在,關於超級群,我們只需重點關注其在網路層面的依賴即可。
對於所有的 IM 服務而言,底層網路的加速能力都是關鍵。融雲的底層服務網路全稱是融雲全球通訊網路 (以下簡稱為 SD-CAN,Software Defined - Communication Accelerate Network) ,集合了 BGP anycast、SD-WAN、對等連線、動態 CDN、智慧 DNS 等多種網路加速方式。
對於超級群來說,SD-CAN 允許客戶端 SDK 通過查詢和探測確定地域和運營商以及最後一公里的網路情況,將使用者就近排程到融雲的網路邊緣節點, 邊緣節點依據信令的請求目標地址投遞到路由節點,完成資料彙集,再由路由節點識別並轉發到對應的資料中心。
舉個例子,如果北美使用者要訪問中國國內的資料中心,典型的兩條路徑是:
- 北美使用者 -> 直接連線 -> 國內資料中心接入服務 -> 業務服務;
- 北美使用者 -> anycast -> 北美資料中心邊緣節點 -> 北美資料中心路由節點 -> SD-WAN/ 對等連線 -> 國內資料中心路由節點 -> 國內資料中心接入服務 -> 業務服務。
客戶端會按照服務下發的策略,做並行探測並同時建立連線。對最優鏈路的選擇,依賴於建連延遲、心跳間隔、鏈路傳送接收狀況等資訊。伺服器也會定期檢查連線的健康度,主動關閉長尾連線,結合客戶端的重連機制,一起保障對最優鏈路的呼叫。
(PaaS 產品接近完備,或將填補元宇宙到來前的空白)
除了技術實現,挑戰也出現在產品設計層面。
由於超級群中的資訊量太大,需要支援將群分割為不同的頻道,類似傳統的 topic 或 channel。即使相同的群和群成員,通過不同的頻道,仍然能將會話、訊息、未讀數分門別類聚合。使用者可以更關注自己感興趣的部分,提升使用者黏性。
這也反映了使用者在超級群場景下的真正需求:我或許會希望在一個有數十萬網友的超級群中建立社交關係,但卻不希望被數十萬訊息打擾生活。
此外,對於融雲來說,超級群是個 PaaS 產品,這意味著要為客戶端留下充裕的可定製空間,在不同的場景,對資訊推送的方式、邏輯、頻率都有不同的要求。同時,將資訊和聊天結合的場景,一般都有多端的需求。不同的平臺,比如 Android、iOS、Web 等,在海量訊息的網路請求和儲存方面都有不同的技術特點,甚至同平臺不同廠商的推送通道特性也不同,這些都需要一一考慮。
最近幾年,社交領域的新興公司新增不多,整體增長呈下降趨勢。這一方面是因為流量向頭部高度集中,擠壓了新玩家的空間;另一方面也是因為缺少新模式,大家仍在圍繞存量使用者做競爭。
超級群這一新應用形態,可能會對社交軟體整體的發展,產生巨大的牽引作用,從而帶來新的機會。同時,PaaS 產品的完備,也標誌著實現產品創新的技術基礎已經夯實,這或將在產品層面,填補從微信、語聊房邁入元宇宙的最後一段空白。