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


摘要:GaussDB(for Redis)輕松搞定推薦系統核心存儲,為企業級應用保駕護航。

本文分享自華為雲社區《GaussDB(for Redis)揭秘第13期:如何搞定推薦系統存儲難題?》,作者:高斯Redis官方博客 。

一、推薦偏差引發的思考

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

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

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

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

二、推薦系統長什么樣

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

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

第一部分:獲取特征數據

  • 原始數據采集

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

  • 分布式計算

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

  • 特征數據存儲

經過加工的數據也就是特征、標簽,是推薦算法所需的寶貴數據源。在特定場景下,也可以稱之為用戶畫像、物品畫像。這部分數據有着反復共享、復用的價值,不僅能用於訓練算法模型,還能為生產環境提供服務。

確保特征數據的可靠存儲,是推薦系統中極為關鍵的一環。

第二部分:消費特征數據

  • 線下模型訓練

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

  • 線上推理預測

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

三、推薦系統的存儲難題

很顯然, “特征數據”在整個系統中起到了關鍵的銜接作用。由於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時,分別只用一行即可搞定:

2)而當推薦系統進行灌庫或特征數據更新時,可以按如下方式輕松完成寫入:

2. Flink-Redis-Connector

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

以使用Flink統計單詞頻次的簡單場景為例,數據源經過Flink加工后,便可輕松存入GaussDB(for Redis)中。

六、結語

大數據應用對核心數據的存儲有着很高的要求,雲數據庫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

 

點擊關注,第一時間了解華為雲新鮮技術~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM