華為雲PB級資料庫GaussDB(for Redis)揭秘第13期:如何搞定推薦系統儲存難題

lightwing發表於2021-09-11
摘要:GaussDB(for Redis)輕鬆搞定推薦系統核心儲存,為企業級應用保駕護航。

本文分享自華為雲社群《》,作者:高斯Redis官方部落格 。

一、推薦偏差引發的思考

七夕過後,筆者的一個朋友遇到了尷尬事:當女友點開他的購物APP,竟然自動彈出一系列推薦:玫瑰包郵、感動哭了、浪漫小夜燈……回想七夕那天,禮物並沒有出現,於是問題出現了:從實招來,你送誰了?

華為雲PB級資料庫GaussDB(for Redis)揭秘第13期:如何搞定推薦系統儲存難題

為了幫助友人重建信任,筆者進行了一番技術調研:這一定是“推薦系統”出了偏差。

華為雲PB級資料庫GaussDB(for Redis)揭秘第13期:如何搞定推薦系統儲存難題

推薦系統是一種資訊過濾系統,它能夠快速分析海量使用者行為資料,預測出使用者喜好,從而進行有效推薦。在商品推薦、廣告投放等業務中,推薦系統責任重大。根據亞馬遜2019年度報告,其40%的營收來自內部穩定的推薦系統。

在本文開篇的例子中,正是由於推薦系統問題,才導致了尷尬的場面。筆者決定力挺友人,用可靠的知識讓人信服!

華為雲PB級資料庫GaussDB(for Redis)揭秘第13期:如何搞定推薦系統儲存難題

二、推薦系統長什麼樣

通常來說,在一套成熟的推薦系統中,分散式計算、特徵儲存、推薦演算法是關鍵的三大環節,缺一不可。

下面介紹一類完整的推薦系統,在系統中GaussDB(for Redis)負責核心的特徵資料儲存。該系統也是華為雲諸多客戶案例中較為成熟的最佳實踐之一。

第一部分:獲取特徵資料

華為雲PB級資料庫GaussDB(for Redis)揭秘第13期:如何搞定推薦系統儲存難題

  • 原始資料採集

點贊、收藏、評論、購買……這些行為都屬於原始資料,他們隨時都在發生,因此資料量龐大。經由Kafka、Redis Stream等流元件向下遊傳遞,或存入數倉,等待後期提取使用。

  • 分散式計算

原始資料離散、含義模糊,無法直接給演算法使用。此時就要進行大規模的離線、線上計算,對資料加工。Spark、Flink都是典型的大資料計算元件,其強大的分散式計算能力是推薦系統不可或缺的。

  • 特徵資料儲存

經過加工的資料也就是特徵、標籤,是推薦演算法所需的寶貴資料來源。在特定場景下,也可以稱之為使用者畫像、物品畫像。這部分資料有著反覆共享、複用的價值,不僅能用於訓練演算法模型,還能為生產環境提供服務。

確保特徵資料的可靠儲存,是推薦系統中極為關鍵的一環。

第二部分:消費特徵資料

華為雲PB級資料庫GaussDB(for Redis)揭秘第13期:如何搞定推薦系統儲存難題

  • 線下模型訓練

有了關鍵的特徵資料,業務就可以開始訓練演算法模型。只有充分利用特徵庫,以及最新行為資料,不斷打磨推薦演算法,這樣才能提升推薦系統整體水平,最終帶給使用者更好的體驗。

  • 線上推理預測

演算法模型訓練結束後,將被部署到線上生產環境。它將繼續利用已有的特徵儲存,根據使用者的實時行為進行推理,快速預測出與使用者最匹配的優質內容,形成推薦列表,並推送給終端使用者。

三、推薦系統的儲存難題

很顯然, “特徵資料”在整個系統中起到了關鍵的銜接作用。由於KV形式的資料抽象與特徵資料極為接近,因此推薦系統裡往往少不了Redis的身影。

在上述系統的方案中,資料庫選型為GaussDB(for Redis),而不是開源Redis。原因是開源Redis在大資料場景下還是存在顯而易見的痛點:

1. 資料無法可靠儲存

推薦系統其實希望既能使用KV資料庫,又能放心將資料長久儲存。但開源Redis的能力更側重於資料的快取加速,而不是資料儲存。而且開源Redis畢竟是純記憶體設計,即使有AOF持久化,但通常也只能秒級落盤,資料的儲存並不可靠。

2. 資料量上不去,成本下不來

涉及推薦的業務往往使用者體量也不會小,隨著業務發展,也會有更多的特徵資料需要儲存。實際上,相同容量的記憶體與極速SSD相比,價格貴10倍以上都很正常。於是,當資料量達到幾十GB、幾百GB,開源Redis會變得越來越“燒錢”,因此一般只當做“小”快取使用。除此之外,開源Redis自身fork問題導致容量利用率低,硬體資源有很大的浪費。

3. 灌庫表現不佳

特徵資料需要定期更新,往往以小時或天為週期進行大規模資料灌入任務。如果儲存元件不夠“皮實”,大量寫入造成資料庫故障,將導致整個推薦系統發生異常。這就可能造成開篇提到的尷尬使用者體驗。

開源Redis抗寫能力並不強,這是由於叢集中有一半節點是備節點,它們只能處理讀請求。當大批次寫入到來時,主節點容易出問題,引發連鎖反應。

理論上,架構設計並不是越複雜越好,如果可以,誰不想使用一種既能兼顧特徵資料KV型別、成本友好、效能又有保障的可靠資料儲存引擎?

四、相見恨晚,遇見GaussDB(for Redis)

與開源Redis不同,GaussDB (for Redis)基於存算分離架構,為推薦系統這一類大資料場景帶來關鍵的技術價值:

1. 可靠儲存

資料命令級落盤,在底層儲存池中三副本冗餘儲存,真正做到了0丟失。

2. 降本增效

高效能持久化技術+細粒度儲存池,幫助企業將資料庫使用成本降低75%以上。

3. 抗寫能力強

多執行緒設計+全部節點可寫,抗寫能力足夠強大,從容應對Spark灌庫壓力和實時更新。華為雲企業級資料庫GaussDB (for Redis)提供穩定、可靠的KV儲存能力,正是推薦系統核心資料的極佳選型。

五、完美銜接,實現想存就存的自由

其實,在Spark後端接入Redis已經成為一種主流方案,而使用Flink從Redis中提取維度表也是很常見的用法。它們也都提供了用於接入Redis的聯結器。GaussDB(for Redis)完全相容Redis協議,即開即用,使用者隨時都可以快速建立例項並接入業務。

1. Spark-Redis-Connector

Spark-Redis-Connector完美實現了Spark RDD、DataFrame到GaussDB(for Redis)例項中String、Hash、List、Set等結構的對映。使用者可使用熟悉的Spark SQL語法輕鬆訪問GaussDB(for Redis),完成特徵資料灌庫、更新、提取等關鍵任務。

使用方法非常簡單:

1)當需要讀取Hash、List、Set結構到Spark RDD時,分別只用一行即可搞定:

華為雲PB級資料庫GaussDB(for Redis)揭秘第13期:如何搞定推薦系統儲存難題

2)而當推薦系統進行灌庫或特徵資料更新時,可以按如下方式輕鬆完成寫入:

華為雲PB級資料庫GaussDB(for Redis)揭秘第13期:如何搞定推薦系統儲存難題

2. Flink-Redis-Connector

Flink這款計算引擎流行程度不亞於Spark,它同樣有成熟的Redis連線方案。使用Flink提供的Connector或結合Jedis客戶端,都可輕鬆完成Flink到Redis的讀寫操作。

以使用Flink統計單詞頻次的簡單場景為例,資料來源經過Flink加工後,便可輕鬆存入GaussDB(for Redis)中。

華為雲PB級資料庫GaussDB(for Redis)揭秘第13期:如何搞定推薦系統儲存難題

六、結語

大資料應用對核心資料的儲存有著很高的要求,雲資料庫GaussDB(for Redis)擁有存算分離的雲原生架構,在完全相容Redis協議的基礎上,同時做到了穩定性、可靠性的全面領先。面對海量核心資料儲存,它還能為企業帶來相當可觀的成本節約。面向未來,GaussDB(for Redis)極有潛力成為下一個大資料浪潮的新星。

七、附錄

本文作者:華為雲資料庫GuassDB(for Redis)團隊

杭州/西安/深圳簡歷投遞:yuwenlong4@huawei.com

GuassDB(for Redis)產品主頁:https://www.huaweicloud.com/product/gaussdbforredis.html

更多技術文章,關注高斯Redis官方部落格:https://bbs.huaweicloud.com/community/usersnew/id_1614151726110813

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3407/viewspace-2795881/,如需轉載,請註明出處,否則將追究法律責任。

相關文章