天天看點

用GaussDB(for Redis)存畫像,推薦業務輕松降本60%

摘要:使用者畫像存儲是推薦業務核心,但開源Redis無法勝任。華為雲高斯Redis是最佳存儲選型,輕松降本60%,同時獲得企業級高穩定性。

本文分享自華為雲社群《​​華為雲GaussDB(for Redis)揭秘第23期:用GaussDB(for Redis)存畫像,推薦業務輕松降本60%​​》,作者: 高斯Redis官方部落格 。

一、什麼是推薦系統

不知道大家有沒有過這樣的經曆,當你前腳剛在某電商網站買了一個手機,過兩天再打開該電商網站,首頁推薦顯示的必定有耳機、手機殼、藍牙音箱等手機配件。如果你買的不是手機,而是一件衣服,那麼下次打開電商網站顯示的,必定是和衣服搭配的褲子和鞋子等。

聰明的你不禁要問,為何電商網站如此強大,竟能提前預知你的偏好,并且給你推薦你可能喜歡的商品?其實在這背後,都離不開那強大的推薦系統。

什麼是推薦系統?首先我們來看看維基百科上的定義:推薦系統是一種資訊過濾系統,可以根據使用者曆史行為預測使用者對物品的“評分”或“偏好”。簡單來說,如果你是一個電子發燒友,那麼系統肯定會給你推薦各種新鮮出爐的3C産品,如果你是一個coder,那麼你的頁面肯定充滿各種程式設計大全的書籍。推薦系統近年來非常流行,應用于各行各業,推薦的對象包括:電影、音樂、新聞、書籍、學術論文、搜尋查詢、分衆分類、電商購物和遊戲業務等。

二、推薦系統的架構

了解了什麼是推薦系統之後,接下來我們繼續介紹下推薦系統的架構,以遊戲行業為例,一個典型的遊戲業務的推薦系統架構設計如下:

用GaussDB(for Redis)存畫像,推薦業務輕松降本60%

推薦系統主要由3部分組成,分别是:行為日志收集、特征生産和特征消費。

01.行為日志

大資料業務通過收集使用者的行為日志,分析獲得使用者畫像,并且将這些使用者畫像儲存在分布式檔案系統HDFS中

02.特征生産

工程業務負責為大資料業務提供一套接口調用,主要是“灌庫”,即定時或按一定邏輯把HDFS中的使用者畫像加工成特征,灌入工程業務負責的“KV存儲”。

03.特征消費

工程業務團隊還負責将算法團隊的推薦模型進行工程落地,他們開發線上推理元件,從KV存儲中提取特征資料、分析計算,最終得出推薦結論,展示給使用者。

三、推薦系統的存儲痛點

上一節中我們介紹了遊戲行業中推薦系統的架構,這也是推薦系統的一個典型架構。從架構圖可以看出,KV存儲在整套鍊路中,承載着重要的承上啟下作用。然而,推薦系統中的KV存儲卻存在着兩個大的痛點,第一個是成本高,第二個是擴容慢。

01.成本高

首先第一個是成本高的問題。通常我們搭建KV存儲的首選是選擇自建一個開源Redis叢集作為KV存儲系統。

一方面,開源Redis的資料全部放在記憶體中,衆所周知記憶體的存儲成本非常昂貴,隻适用于存儲少量資料,如果資料量大,存儲成本将成為企業的負擔;

另一方面,開源Redis在進行AOF檔案重寫的過程中存在fork機制,導緻開源Redis在AOF檔案重寫時,其記憶體使用率隻有50%,這就進一步使增加了開源Redis的記憶體使用成本。

02.擴容慢

除了成本比較高,開源Redis還存在擴容慢的問題,在自建的開源Redis叢集中,随着業務增長,KV存儲的容量不得不進行擴容。但由于原生Redis本身的架構特點,在擴容過程中難免要發生key的跨slot遷移,如下圖所示,跨slot遷移需要耗時很久并且業務受影響時間長。

用GaussDB(for Redis)存畫像,推薦業務輕松降本60%

四、為什麼推薦GaussDB(for Redis)

知道了推薦系統的痛點所在,該如何解決呢?究其根本是降本增效,而GaussDB(for Redis)可以說是為解決這些問題而生。

01.降本

GaussDB(for Redis)從兩個方面降低KV資料的存儲成本:

一個方面,GaussDB(for Redis)的所有資料全部落在存儲,相比開源Redis資料存放在記憶體中,其成本降低了75%~90%,形成極大的價格優勢。舉個例子,一個512GB的開源Redis叢集,其成本幾乎要5w/月,而相同規格的執行個體,如果替換成GaussDB(for Redis),其成本節約40%以上,幾乎節省了一個人力成本在裡面。下面這張表格是不同層級存儲器之間的成本對比圖。

用GaussDB(for Redis)存畫像,推薦業務輕松降本60%

另一方面,在推薦系統中,KV資料主要存儲的是使用者畫像的資訊,這些資訊基本上都是經過Protobuf序列化後的資訊,而GaussDB(for Redis)自帶的資料壓縮功能,可以對序列化後的資訊進行高壓縮比的壓縮,實際占用空間僅為開源Redis的50%左右,這又進一步降低了KV資料的存儲成本。

02.增效

除了降本,另一方面就是增效了。衆所周知,開源Redis的架構中,如下圖所示,其存儲和計算是不分離的,這就導緻節點進行擴容的時候,會發生分片的遷移,進而導緻業務會受到影響。

用GaussDB(for Redis)存畫像,推薦業務輕松降本60%

GaussDB(for Redis)為了解決這個問題,采用了存算分離的架構,如下圖所示:

用GaussDB(for Redis)存畫像,推薦業務輕松降本60%

在存算分離的架構下,底層資料可以被任意上層計算節點通路,擴容過程不發生資料拷貝搬遷,速度極快;同時還做到分鐘級節點擴容,業務秒級感覺;存儲擴容業務0感覺。無論是擴節點還是擴存儲容量,對業務的影響幾乎為0。

五、總結

六、附錄

  • 本文作者:華為雲資料庫GaussDB(for Redis)團隊
  • 更多産品資訊,歡迎通路官方部落格:​​​​bbs.huaweicloud.com/blogs/248875

繼續閱讀