無懼百萬級并發(fā),GaussDB讓華為Push推送服務更快觸達
GaussDB(forCassandra)丨超大并發(fā)場景下,離線消息緩存的不二選擇
推送服務(Push Kit)是華為提供的消息推送平臺,建立了從云端到終端的消息推送通道。通過集成推送服務,您可以向客戶端應用實時推送消息,讓應用更精準觸達用戶,是開發(fā)者提升用戶感知度和活躍度的一件利器。
華為云GaussDB(for Cassandra) 是一款基于華為自研的計算存儲分離架構的分布式數(shù)據(jù)庫,致力于提供穩(wěn)定可靠、超高并發(fā),兼容Cassandra生態(tài)、彈性伸縮、一鍵部署、快速恢復、監(jiān)控告警的分布式數(shù)據(jù)庫服務,在Push業(yè)務的高效架構建設中,起到了關鍵的作用。
業(yè)務挑戰(zhàn)
Push服務能夠協(xié)助開發(fā)者快速觸達用戶,其提供的系統(tǒng)級通道推送速度每秒最高可達百萬級,消息量每日百億級,并且支持實時消息回執(zhí)。如此高到達率的背后,是因為Push使用了大量分布式架構、高性能隊列、大數(shù)據(jù)分析、數(shù)據(jù)庫、AI等技術,用來支撐實時推送、精準送達業(yè)務的高效開展。
Push的主要業(yè)務鏈路是發(fā)送上行消息和下行消息,接下來我們從發(fā)送下行消息流程來了解業(yè)務在哪些場景上用到了數(shù)據(jù)庫,以及對數(shù)據(jù)庫的要求有哪些?
下行消息交互圖如下所示:
當用戶設備網絡條件良好且不擁堵的情況下,華為Push服務器在收到消息后,會先將消息存入高性能隊列中,然后隊列消費消息發(fā)送給用戶設備。但是當用戶設備處于弱網、網絡異常,或不在線、,熄屏狀態(tài)時,消息無法到達設備,或此時發(fā)送消息價值較低。Push業(yè)務為了保障消息不丟失,以及提升消息的有效率,利用數(shù)據(jù)庫為底座,來支持離線消息緩存能力。
離線消息緩存是指當消息到達華為PushUSH平臺后,如果設備不在線,華為PushUSH平臺會將消息緩存起來,等到設備上線后,華為PushUSH平臺會將緩存的消息再次推送給用戶。如果用戶很長時間不在線,這些緩存的消息默認保存24小時,最長保存15天,超期的消息會被PushUSH平臺丟棄。
此時,在數(shù)據(jù)庫的選型上就需要考慮以下幾個問題:
1.推送速度每秒百萬級,極端場景下,大部分寫入數(shù)據(jù)庫,會有每秒百萬寫入請求,數(shù)據(jù)庫需要具備超高的寫入能力;
2.當設備恢復正常狀態(tài)時,消息會從數(shù)據(jù)庫中讀出發(fā)送給用戶,消息的實時性會直接影響到消息的價值,此時就要求數(shù)據(jù)庫的讀時延低且長尾時延穩(wěn)定;
3.推送的消息中,多與時事熱點相關,容易引發(fā)流量突增,且不可預知,這就要求數(shù)據(jù)庫具有快速彈性伸縮的能力;
4.為達成AI智能推送的能力,可能需要對數(shù)據(jù)庫中的數(shù)據(jù)進行數(shù)據(jù)挖掘和分析,從而實施智能推送策略,數(shù)據(jù)庫需支持與主流大數(shù)據(jù)引擎兼容的接口和解決方案。
為什么選擇GaussDB(forCassandra)?
基于以上挑戰(zhàn),Push業(yè)務經過一系列技術選型,最終選擇了GaussDB(forCassandra)數(shù)據(jù)庫。GaussDB(forCassandra)憑借豐富強大的特性,可以幫助Push業(yè)務很好地應對消息緩存的挑戰(zhàn):
1.從請求量上看,GaussDB(forCassandra)輕松支持千萬級并發(fā)訪問,高并發(fā)不在話下;
2.從時延上看,GaussDB(forCassandra)除了本身具備超低時延的能力外,在并發(fā)量大的情況下,可通過擴容和規(guī)格變更,增加分區(qū)和負載均衡保證業(yè)務時延基本無變化;
3.從彈性伸縮上看,GaussDB(forCassandra)基于存算分離架構,支持秒級存儲擴容,分鐘級計算擴容,輕松應對流量高峰;
4.從兼容能力看,GaussDB(forCassandra)支持CQL語法和靈活的數(shù)據(jù)定義,同時兼容主流的批式/流式處理引擎(Spark/Flink等),且提供動態(tài)增量+全量的解決方案,供大數(shù)據(jù)分析引擎接入,充分滿足不同類型數(shù)據(jù)的接入需求。
如何利用GaussDB(forCassandra)提升消息緩存體驗
下面,我們將從具體的幾個技術改進來聊聊,GaussDB(forCassandra)是如何幫助Push業(yè)務獲得更好的消息緩存體驗。
降本增效
l降低Push集群對數(shù)據(jù)庫請求量:
-表結構設計時,將同一用戶設備的多條信息存入同一partition中
-在讀取時,可使用范圍查詢將同一用戶設備的多條信息批量查出,且時延較低
-在寫入時,使用Batch寫入,降低客戶端與數(shù)據(jù)庫的交互次數(shù)
l降低存儲使用量:業(yè)務科通過TTL、范圍刪除、單行刪除等多種手段,根據(jù)業(yè)務情況靈活使用達到數(shù)據(jù)消亡的目的,降低存儲用量。
彈性伸縮,熱點無憂
每當出現(xiàn)重大新聞,各大應用均產生了海量的推送消息,Push業(yè)務收到消息后,流量激增,集群規(guī)模難以支撐巨大的流量。但依靠GaussDB(forCassandra)的快速擴容能力,Push業(yè)務實現(xiàn)了分鐘級別的計算擴容,業(yè)務不受影響,而且當流量回歸正常后,可以進行縮容降低成本。
超強可靠性,底座無憂
GaussDB(forCassandra)不僅在讀寫性能上表現(xiàn)優(yōu)異,在數(shù)據(jù)可靠性上也表現(xiàn)突出。因為采用多節(jié)點分布式架構,當任意盤或節(jié)點出現(xiàn)故障,讀寫操作會自動切換至其他節(jié)點,理論上可以達到N-1個節(jié)點故障容忍,即集群任一節(jié)點存活即可提供完整服務。同時還支持異地雙活,實現(xiàn)業(yè)務恢復和故障恢復解耦,Region級高可用。
綜上所述,GaussDB(for Cassandra)為Push業(yè)務提供了高效、穩(wěn)定、安全的數(shù)據(jù)庫底座,助力Push業(yè)務實現(xiàn)了離線消息緩存架構。我們相信,借助GaussDB(for Cassandra), Push業(yè)務在消息推送領域,會為開發(fā)者提供更優(yōu)質的服務和工具,助力企業(yè)提升業(yè)務價值和用戶體驗。