本發明涉及消息存儲,尤其涉及一種高并發消息實時存儲方法、設備及介質。
背景技術:
1、在諸如醫療機構協同或互聯網平臺等場景的大型即時通訊系統中,消息的可靠存儲與實時處理是保證通信質量的核心基礎。當前常見的技術方案通常依賴傳統關系型數據庫直接進行消息持久化。
2、本技術發明人研究發現,在高并發場景下,大量用戶同時發送消息會導致數據庫寫入性能急劇下降,造成消息處理延遲,且難以保證消息全局的順序一致性。
3、為緩解數據庫壓力,現有技術中,常引入緩存層進行緩沖,但簡單的緩存機制在面對瞬時流量峰值時,其容量與吞吐能力容易達到瓶頸,可能引發緩存崩潰或消息丟失,系統穩定性不足。特別是在群組聊天場景中,若采用為每個成員完整存儲消息副本的寫擴散模式,會產生巨大的數據冗余,使得存儲空間與寫入負載呈倍數增長,效率低下。此外,若無有效的數據分布策略,所有熱點會話的讀寫壓力將集中至單一數據庫節點,極易形成性能瓶頸,導致系統整體服務能力下降。
技術實現思路
1、本發明實施例提供了一種高并發消息實時存儲方法、設備及介質,旨在解決的技術問題是:如何提供一種能夠支撐高并發即時消息的實時存儲,確保消息嚴格有序、系統穩定可靠且存儲高效的技術方案。
2、第一方面,本發明實施例提供了一種高并發消息實時存儲方法,其包括:
3、接收客戶端發送的消息,并將所述消息寫入一級緩存;
4、響應于所述消息寫入一級緩存,向所述客戶端返回發送成功響應;
5、為所述消息生成全局唯一的序列標識符,所述序列標識符用于確定所述消息的時序順序;
6、根據預設的分片規則,確定所述消息對應的目標存儲分片;
7、將攜帶所述序列標識符的消息發布至與所述目標存儲分片綁定的二級消息隊列,所述二級消息隊列用于按所述序列標識符的順序緩沖消息;
8、監聽所述二級消息隊列,并按所述序列標識符的順序,將消息批量寫入與所述目標存儲分片對應的三級持久化存儲單元。
9、可選地,所述為所述消息生成全局唯一的序列標識符,包括:
10、確定所述消息對應的會話標識符;
11、查詢與所述會話標識符對應的序列號;
12、基于分布式鎖機制,對所述會話標識符對應的序列號進行原子性遞增操作,生成所述消息的序列標識符;
13、將所述序列標識符與所述會話標識符的映射關系更新至一個全局共享的元數據存儲中。
14、可選地,所述根據預設的分片規則,確定所述消息對應的目標存儲分片,包括:
15、若所述消息為單聊消息,則根據所述消息對應的接收方用戶標識符計算第一哈希值,將所述第一哈希值對預設的總分片數取模,得到第一目標存儲分片;
16、若所述消息為群組消息,則根據所述消息對應的群組標識符計算第二哈希值,將所述第二哈希值對預設的總分片數取模,得到第二目標存儲分片。
17、可選地,所述方法還包括:
18、建立所述消息對應的群組的群組成員用戶標識符與所述第二目標存儲分片的索引關系,并將所述索引關系存儲于獨立的路由表中。
19、可選地,所述監聽所述二級消息隊列,并按所述序列標識符的順序,將消息批量寫入與所述目標存儲分片對應的三級持久化存儲單元,包括:
20、為每個目標存儲分片對應的二級消息隊列,部署至少一個獨立的寫入消費者進程;
21、所述寫入消費者進程執行以下循環操作:
22、向所述二級消息隊列發起批量拉取請求,以獲取一批按序列標識符排序的消息;
23、若拉取到消息,則基于當前系統負載動態計算本次批量寫入操作的批次大小與等待超時時間,并將拉取到的消息在內存中按序列標識符排序后暫存;
24、當內存中暫存的消息數量達到所述批次大小或等待時間達到所述超時時間時,將內存中暫存的消息按序列標識符的順序,作為一個事務批量寫入所述三級持久化存儲單元;
25、若未拉取到任何消息,則所述寫入消費者進程向所述二級消息隊列注冊一個異步推送監聽器,并進入阻塞等待狀態;
26、當所述異步推送監聽器被觸發,表明有新的消息到達所述二級消息隊列時,重新執行所述向所述二級消息隊列發起批量拉取請求的步驟。
27、可選地,所述方法還包括:
28、分別采集每個所述二級消息隊列的處理延遲和未處理消息積壓量;
29、若所述二級消息隊列的處理延遲超過預設延遲閾值,且所述二級消息隊列的未處理消息積壓量持續增長時,增加監聽所述二級消息隊列的寫入消費者進程實例的數量;
30、若所述二級消息隊列的處理延遲低于預設恢復閾值,且所述二級消息隊列的未處理消息積壓量持續減少時,減少監聽所述二級消息隊列的寫入消費者進程實例的數量。
31、可選地,所述增加監聽所述二級消息隊列的寫入消費者進程實例的數量,包括:
32、將所述二級消息隊列的處理延遲、未處理消息積壓量以及當前監聽所述二級消息隊列的寫入消費者進程實例的數量,輸入預訓練的第一實例數量預測模型,由所述第一實例數量預測模型輸出第一初始推薦實例數量,其中,所述第一實例數量預測模型中,限定輸出的所述第一初始推薦實例數量大于當前監聽所述二級消息隊列的寫入消費者進程實例的數量;
33、獲取所述二級消息隊列的未處理消息積壓量在預設統計周期內的增長速率;
34、若所述增長速率超過預設的增長速率閾值,則在所述第一初始推薦實例數量上增加一個與所述增長速率正相關的第一彈性冗余數量,得到第一目標推薦實例數量;
35、若所述增長速率未超過預設的增長速率閾值,將所述第一初始推薦實例數量作為所述第一目標推薦實例數量;
36、將監聽所述二級消息隊列的寫入消費者進程實例的數量調整至所述第一目標推薦實例數量。
37、可選地,所述減少監聽所述二級消息隊列的寫入消費者進程實例的數量,包括:
38、將所述二級消息隊列的處理延遲、未處理消息積壓量以及當前監聽所述二級消息隊列的寫入消費者進程實例的數量,輸入預訓練的第二實例數量預測模型,由所述第二實例數量預測模型輸出第二初始推薦實例數量,其中,所述第二實例數量預測模型中,限定輸出的所述第二初始推薦實例數量小于當前監聽所述二級消息隊列的寫入消費者進程實例的數量;
39、獲取所述二級消息隊列的未處理消息積壓量在預設統計周期內的降低速率;
40、若所述降低速率的絕對值超過預設的絕對值閾值,則在所述第二初始推薦實例數量上減去一個與所述降低速率的絕對值正相關的第二彈性冗余數量,得到第二目標推薦實例數量;
41、若所述降低速率的絕對值未超過預設的絕對值閾值,將所述第二初始推薦實例數量作為所述第二目標推薦實例數量;
42、將監聽所述二級消息隊列的寫入消費者進程實例的數量調整至所述第二目標推薦實例數量。
43、第二方面,本發明實施例還提供了一種計算機設備,其包括存儲器及處理器,所述存儲器上存儲有計算機程序,所述處理器執行所述計算機程序時實現上述方法。
44、第三方面,本發明實施例還提供了一種計算機可讀存儲介質,所述存儲介質存儲有計算機程序,所述計算機程序當被處理器執行時可實現上述方法。
45、本發明實施例提供了一種高并發消息實時存儲方法、設備及介質。其中,所述方法包括:接收客戶端發送的消息,并將所述消息寫入一級緩存;響應于所述消息寫入一級緩存,向所述客戶端返回發送成功響應;為所述消息生成全局唯一的序列標識符,所述序列標識符用于確定所述消息的時序順序;根據預設的分片規則,確定所述消息對應的目標存儲分片;將攜帶所述序列標識符的消息發布至與所述目標存儲分片綁定的二級消息隊列,所述二級消息隊列用于按所述序列標識符的順序緩沖消息;監聽所述二級消息隊列,并按所述序列標識符的順序,將消息批量寫入與所述目標存儲分片對應的三級持久化存儲單元。本發明通過將消息先寫入高性能一級緩存并立即確認,降低用戶感知的發送延遲。通過為消息生成全局唯一且有序的序列標識符,并結合將同一會話消息路由至同一有序緩沖隊列的機制,從根本上保證了海量異步處理過程中消息的存儲順序與發送順序嚴格一致,解決了消息亂序問題。進一步地,基于接收方或群組的標識信息進行存儲分片,將總寫入壓力分散到多個獨立的數據庫節點上,避免了因熱點數據集中導致單個數據庫過載的性能瓶頸。同時,引入有序消息隊列作為緩沖層,吸納瞬時流量洪峰,并通過批量持久化機制大幅減輕數據庫的寫入壓力和連接開銷,從而在整體上實現了低延遲、高吞吐、強一致且可水平擴展的消息存儲能力,能夠穩定支撐大規模用戶同時在線與海量消息的實時交互。