摘要:如果你需要一款穩定可靠的高效能企業級KV資料庫,不妨試試GaussDB(for Redis)。
每當網路上爆出熱點新聞,混跡於各個社交媒體的小夥伴們全都開啟了討論模式。一條訊息的產生是如何在群聊中傳遞的呢?讓我們一起來探索即時通訊系統(IM)的原理。
當你在群聊「相親相愛一家人」中,傳送了一條「我找到女朋友了,今天帶回家吃飯」,你自然是希望全家人都收到你的喜訊,為你女朋友的到來分頭準備。那麼正常的流程應該是這樣:遍歷群成員、查詢每個成員的線上狀態、如果小夥伴們線上則實時進行推播,如果小夥伴們不線上則暫存至離線庫待上線後主動拉取。
這種模式就是傳統的IM架構,由於傳送成功的訊息不會落入離線庫,因此聊天記錄多端漫遊無法實現。如果線上使用者推播發生異常,會導致個別人員丟失關鍵發言,錯失重要資訊。為了保證訊息儲存的可靠性,我們對IM系統架構進行了優化,不管成員是否線上都要先把訊息和傳送物件儲存起來,再進行推播。流程變成:遍歷群成員、為群聊的每一個人對應的訊息佇列都存一份訊息、查詢每個成員的線上狀態、對線上成員進行推播。這就是所謂的寫擴散模型。
這裡顯然還存在一個問題,我們向每個小夥伴的訊息佇列中都儲存了相同的「我找到女朋友了,今天帶回家吃飯」訊息,對磁碟和頻寬造成了很大的浪費,這是寫擴散的最大弊端。所以我們繼續優化,群訊息實體儲存一份,使用者只存訊息 ID 索引。流程優化為:遍歷群聊的成員、先存一份訊息實體、群聊所有人都存一份ID 參照、查詢每個成員的線上狀態、對線上成員進行推播。這就是所謂的讀擴散模型。
簡單總結下:
1.讀擴散:讀取操作很重,寫入操作很輕,資源消耗相對小一些。
2.寫擴散:讀取操作很輕,寫入操作很重,資源消耗相對大一些。
接下來,讓我們使用GaussDB(for Redis) 來實現一個簡單的IM應用。
IM系統有哪些痛點?高斯Redis如何解決這些痛點?
GaussDB(for Redis)採用先進的存算分離架構,在IM系統持續運營的過程中,如果出現突發流量,可以迅速對計算層資源進行秒級擴縮容,快速扛住流量尖峰;歷史訊息持續增長時,也可以單獨對儲存層資源大小進行秒級動態調整,最高可擴容至PB級。
GaussDB(for Redis)廣泛適用於社交媒體、遊戲、電商、推薦系統等領域,在海量並行場景具備極強的高可用能力。如果你需要一款穩定可靠的高效能企業級KV資料庫,不妨試試GaussDB(for Redis)。