?

基于LFM算法的SpringCloud分布式購物系統

2023-11-27 02:23邵陽陽徐子良姜玉波李成龍
關鍵詞:路由代理分布式

邵陽陽,徐子良,姜玉波,李成龍,田 甜

(山東建筑大學 計算機科學與技術學院,山東 濟南 250101)

1 引言

互聯網技術的迅速發展使得人類獲得信息的途徑更加廣泛,推薦算法是從繁雜信息中快速獲取個性化需求數據的有力工具[1],以機器學習為代表的新一代人工智能技術已得到了廣泛應用[2]。隱語義模型(Latent Factor Model,LFM)算法是一種典型的推薦算法,常被用在推薦系統和文本分類中。利用推薦算法實現用戶數據個性化推薦是開發在線購物平臺首要考慮的問題。同時,緩解無意義流量產生的冗余訪問壓力,降低后期代碼維護難度也是在線購物平臺需要解決的核心問題。

針對在線購物平臺的個性化數據推薦、無意義流量和代碼維護等問題,本文給出了相應的解決方案。

首先,系統通過數據實時同步工具Maxwell[3]實時讀取MySQL二進制日志文件binlog,采集用戶瀏覽數據和購買數據,并推送至開源消息代理軟件RabbitMQ[4]中;由日志收集系統Flume[5]接收RabbitMQ中的數據并存儲至分布式架構Hadoop[6]中;利用推薦服務讀取Hadoop中的數據,實現用戶喜愛商品的預測和推薦。其次,針對無意義流量對子系統產生冗余壓力的問題,系統利用微服務網關Zuul[7],限制窗口期時間內同一IP地址對相同子系統路由的訪問量,在網關服務器處攔截流量,以減少子系統的流量壓力。最后,為了降低代碼維護難度,系統使用微服務網關Zuul和Nacos注冊中心[8]實現動態路由代理,使得在增加服務器時,由動態路由代理自動將流量分發至新增服務器已注冊的子系統中,Web端無需修改任何路由代碼。

本文結構如下:第2節綜述相關工作,第3節闡述基于LFM的協同過濾推薦算法,第4節介紹基于Spring Cloud的分布式平臺,第5節是基于LFM算法的SpringCloud分布式購物系統的功能實現,第6節總結全文并展望下一步工作。

2 相關工作

本節從協同過濾推薦算法和分布式架構兩方面綜述相關工作。協同過濾是最經典且目前應用最為廣泛的推薦算法之一[9],該算法無需特定領域知識,主要包括在線協同和離線過濾兩部分。所謂在線協同,即通過在線數據尋找用戶可能的偏好內容;而離線過濾,則是過濾掉推薦值低或推薦值高但已使用過的數據?;镜膮f同過濾推薦算法主要分為基于用戶的協同過濾(User-Based Collaborative Filtering)[10]、基于物品的協同過濾(Item-Based Collaborative Filtering)[11],以及基于模型的協同過濾(Model-Based Collaborative Filtering)[12]三 種。

本文采用的LFM推薦算法,是一種隱含語義分析技術,最早在文本挖掘領域被提出,用于表示文本的潛在語義[13]。LFM推薦算法不依賴于共同評分矩陣,基本思想如下:將用戶和商品的內容分別映射到真實含義未知的特征向量中,通過發掘用戶與其所關注的商品間的隱含聯系,判斷兩者之間潛在的關注關系并做出推薦。例如,在推薦系統中能夠基于用戶的行為對商品進行自動聚類,即將商品劃分為不同類別,該類別就可以理解為用戶感興趣的商品。近些年,該技術被不斷應用到其它領域中,并得到不錯的應用效果,但其性能容易受到數據稀疏和冷啟動問題的制約[14]。

冷啟動是指系統剛開始運行時,由于后臺整合的數據不足,無法合理地分析數據,從而無法給客戶提供精準的推薦服務[14]。為解決該問題,鄭鵬等提出一種用戶隱式信任計算方法,建立用戶間接信任,在一定程度上改善了冷啟動問題[15]。Kai等通過融合用戶評分項目和其類型計算用戶相似度, 并設計相應的協同過濾算法,實現了推薦結果的高準確性[16]。Duricic等將網絡科學中的一種度量方法,正則等價,應用到信任網絡中生成一個相似度矩陣,用于選k最近鄰進行推薦,在一定程度上解決了冷啟動問題[17]。

用戶量的激增給系統的負載能力帶來了極大的挑戰。對單一應用架構而言,由于應用程序中的所有功能在同一系統內實現,巨大訪問量易導致服務崩潰,同時,各種問題也會隨著需求迭代接踵而來[18]。作為一種關注全局的分布式框架,SpringCloud是解決上述問題的有力工具?;赟pringCloud架構,蔡勛瑋等實現了新型供電系統數據挖掘方法的應用,更好地掌握了供電負荷量的實際變化規律[19];王蓉等設計并實現醫療信息共享平臺,進一步提高醫療信息的共享和交換能力[20];Yang等設計在線點餐系統,在準確判斷食品配料量的同時滿足不同居民的就餐需求[21]。

基于上述工作,本文利用SpringCloud以及LFM算法,實現了基于LFM算法的SpringCloud分布式購物系統。針對所有微服務接口,系統采用Spring Security框架進行統一鑒權;使用微服務網關Zuul進行全局路由代理,配合Nacos注冊中心和Zuul實現動態路由;利用數據實時同步工具Maxwell采集用戶瀏覽信息,由Maxwell推送信息至開源消息代理軟件RabbitMQ;由日志收集系統Flume主動接收RabbitMQ中的數據并下沉至分布式架構Hadoop中。在該分布式購物系統中,數據采集模塊通過模塊初始化以保持日常應用中穩定的采集與輸出,經過數據預處理后由推薦模塊執行推薦算法獲得推薦數據。

3 基于LFM的協同過濾推薦算法

近些年,企業對個性化推薦系統的需求在不斷增長,其主要原因是,可以幫助用戶過濾信息,進而發掘用戶所需內容。無論是影視推薦、電子商務,還是社交平臺,推薦算法都扮演著重要角色[22]。

LFM作為一種常用的推薦算法,其基本思想為:根據用戶的歷史行為數據分析其偏好特征,并基于偏好特征為用戶u推薦相應的商品i[22,23]。事實上,我們只能獲得用戶的行為數據共現矩陣R。LFM算法通過引入潛在因子表示用戶和商品,最終將共現矩陣R分解為兩個低維度的矩陣:潛在因子-用戶矩陣pu和潛在因子-商品矩陣qi。LFM原理的矩陣表示如圖1所示。

潛在因子-用戶矩陣pu表述為pu=m×k,潛在因子-商品矩陣qi表述為qi=k×n,其中,m表示用戶的數量,n表示商品的數量,k表示潛在因子,即影響用戶u對商品i偏好程度的隱藏特征。

共現矩陣R和低維矩陣pu和qi的關系如

(1)

式中K表示潛在因子的數量;puk表示用戶u與第k個潛在因子的關系;qik表示商品i與第k個潛在因子的關系;puk和qik作為參數用于模型訓練。 LFM算法通過計算式(1)獲得用戶對商品的偏好程度。

采用的損失函數為平方誤差損失函數loss1,如

(2)

式中r(u,i)表示共現矩陣中的值,即訓練樣本中的標簽,點擊時值為1,否則為0;rLFM(u,i)表示模型預估用戶對商品喜愛程度的值;D表示所有訓練樣本集合;當r(u,i)和rLFM(u,i)越接近時,損失函數越小。

在式(2)中,為防止模型過擬合,加入正則化表達式λ(‖pu‖+‖qi‖)2限制模型參數,以增強其泛化能力。由此得到新的損失函數loss2,如

(3)

式中λ表示正則化系數,基于不同場景的重復試驗得到。

此外,使用隨機梯度下降 (Stochastic Gradient Descent, SGD) 算法[24]進一步優化求解最小化損失函數,當經過足夠次數的迭代時,SGD可收斂至局部最優解。具體地說,首先,獲取未知數puk和qik的偏導值,如式(4)和式(5)所示

(4)

(5)

然后,基于SGD進行迭代計算,puk和qik沿梯度的負方向不斷更新,對應參數更新公式如式(6)和式(7)所示,達到預期目標時,可停止訓練。

puk=puk+α[qik(r(u,i)-rLFM(u,i))]-λpuk,

(6)

qik=qik+α[puk(r(u,i)-rLFM(u,i))]-λqik,

(7)

式中α為學習率,學習率隨迭代次數不斷變化。

LFM推薦算法實現如算法1所示。第2~3行定義并初始化矩陣pu、qi以及潛在因子個數K,迭代次數N,學習率α,正則化系數λ;第4~11行是模型訓練過程,其中,從第4行開始迭代;第5~6行通過從數據集中抽取u及i樣本實現優化計算;第7行用于獲取用戶對商品的偏好程度;第8行基于當前參數值計算誤差值E(u,i);第9~11行基于式(6)和式(7)實現參數優化。

4 基于SpringCloud的分布式平臺

基于SpringCloud的分布式平臺利用LFM的協同過濾推薦算法實現用戶推薦,提供了包括前端應用、后臺服務、算法實現和平臺部署等多方位的閉環業務實現方案,其業務實現流程如圖2所示?;赟pringCloud的分布式平臺分為綜合業務、數據存儲和日志服務三大部分。

圖2 業務實現方案

綜合業務主要包括3部分:(1) 用戶可視化:實現用戶交互和業務數據展示,主體采用VUE框架實現并部署在Nginx服務上; (2) 業務服務:通過Spring進行構建,對接業務需求,并部署在應用服務器Tomcat上,以實現JavaEE層面業務邏輯; (3) 推薦服務:利用Hadoop中存儲的數據,使用推薦算法為用戶進行個性化推薦。

數據存儲主要包括3部分:(1) 業務數據庫:采用MySQL作為主數據庫,負責平臺業務邏輯數據的存儲; (2) 緩存數據庫:采用Redis[25]作為緩存數據庫,為推薦系統實時高速獲取需求數據提供支撐; (3) 瀏覽數據存儲服務:使用Hadoop利用集群進行高速運算和存儲,實現分布式文件存儲系統。

日志服務主要包括2部分:(1) 日志采集服務:通過數據采集系統Flume-NG采集業務平臺中用戶的評分行為,實時發送到RabbitMQ中; (2) 消息緩沖服務:采用RabbitMQ作為流式數據的緩存組件,接受來自Flume的數據采集及業務請求,將數據推送到Hadoop存儲系統部分?;诖?實現基于SpringCloud框架,兼顧數據存儲、日志采集和系統推薦功能的高可用分布式平臺架構。

5 分布式購物系統功能實現

本節是基于LFM算法的SpringCloud分布式購物系統的功能實現,主要包括系統架構和主要功能。

5.1 系統架構

本系統中服務端包括用戶端、商家端、管理端和運維端四個部分,內部系統包括Web服務器、商品服務、訂單服務、用戶管理服務、推薦服務、統一鑒權中心服務以及數據庫服務器。

用戶通過Web服務器域名進行訪問,由Nginx路由代理分散用戶訪問流量至不同服務器,從而實現Web端負載均衡;再由Web端通過統一鑒權中心進行權限驗證,以配合Zuul和Nacos注冊中心將流量分配至不同服務器上的微服務模塊,由此實現服務端的負載均衡。系統中各模塊均與數據庫服務器進行數據交互,產生的部分數據由Maxwell實時讀取并推送至RabbitMQ,由Flume采集數據下沉至Hadoop中存儲。推薦服務模塊基于LFM算法實現采集推薦,推薦服務會將產生的推薦信息存儲至數據庫服務器中,由前端調用接口實現數據交互,完成前后端交互。系統架構及交互方式如圖3所示。

圖3 系統總體架構

在推薦服務中,使用LFM算法的主要優勢包括兩方面:一是無需關心分類角度問題,結果均基于用戶行為統計自動聚類;二是無需關心分類粒度問題,粒度的大小取決于潛在因子數量K。SpringCloud架構耦合性小,在系統開發過程中,服務器端的多個模塊不會相互影響。

5.2 主要功能實現

5.2.1 路由代理配置。(1) Zuul+Nacos動態路由代理。實現動態路由代理需要配置兩個中心:配置和注冊中心,其中,配置中心總結各個微服務模塊的配置文件,通過路徑映射完成配置;注冊中心注冊各個微服務模塊的功能和端口號;系統采用Nacos集成注冊中心和配置中心。

Zuul+Nacos動態路由代理服務在Nacos注冊中心被發現,Zuul通過讀取對應路由實現API網關,新增服務在Nacos中完成注冊,由微服務網關Zuul實現服務的動態代理,對應流程如圖4所示。

圖4 動態路由代理流程

(2) Nginx路由代理配置。Nginx實現客戶端的負載均衡,正常情況下,其處理單次請求響應速度更快;高并發請求情況下,Nginx的響應請求速度也快于其它Web服務器。Nginx單機支持10 萬以上的并發連接,利用Nginx的特性,將用戶URL代理到指定頁面,統一管理上傳文件位置,實現Nginx路由代理配置,對應流程如圖5所示。

圖5 Nginx路由代理配置

5.2.2 RabbitMQ數據源配置。系統通過Maxwell采集MySQL中用戶產生的數據信息,主動推送至RabbitMQ,再由RabbitMQ推送至Flume,最終下沉至Hadoop中。鑒于Flume無法直接接收來自RabbitMQ的數據,需要針對Flume單獨開發插件,以允許Flume獲取RabbitMQ中的數據。Flume采集RabbitMQ數據推送至Hadoop中。實現流程如圖6所示。

圖6 Flume采集RabbitMQ數據推送至Hadoop中實現流程

5.2.3 推薦服務實現。推薦服務實現是從Hadoop中讀取數據并進行數據清洗,即刪除無效信息,并將期望數據信息存儲至本地文件。推薦服務模塊采用LFM算法,通過奇異值矩陣分解(Singular Value Decomposition,SVD)[26]處理評分矩陣,基于用戶的潛在特征評價缺失項目。系統通過定時任務每日執行一次,執行過程中推薦程序讀取本地文件信息,LFM算法設置迭代次數為50,通過迭代后的數據,系統為每個用戶推薦4 條數據,并實例化到數據庫中。推薦服務流程如圖7所示,實現邏輯如圖8所示。

圖7 推薦服務流程

5.2.4 用戶購買商品實現。當用戶購買商品時,由商品服務先對用戶購買的商品加分布式鎖,并核驗庫存信息。當庫存容量足夠時,商品服務將購買數據發送至RabbitMQ中并使庫存減1,消息隊列獲取數據后等待訂單服務消費,消費完成后將數據存入數據庫中,對應流程如圖9所示。

圖9 用戶購買商品流程

5.2.5 服務上傳部署。首先,后臺管理端獲取并讀取用戶上傳的文件信息,基于文件名創建對應文件夾,文件路徑為“Linux服務器/opt”,并將用戶上傳的文件存儲至該文件夾下,使用SSH協議包連接至Linux服務,通過執行對應Linux語句運行jar包,對應流程如圖10所示。

圖10 服務上傳部署

6 結語

本系統基于Java語言、SpringCloud后端開發框架、Hadoop分布式架構、Flume日志收集系統、Maxwell數據實時同步工具、MySQL數據庫和Redis臨時數據庫,實現了基于LFM算法的分布式購物系統。系統采用LFM算法,綜合考慮用戶與歷史瀏覽商品特征間的相似性,實現了用戶偏好數據的個性化推薦。為應對高并發情況,采用分布式系統,使用微服務網關進行限流處理,減少了高并發環境下無意義流量對系統的壓力。當微服務系統壓力過大時,系統主動為響應過慢的服務降級,從而減少訪問壓力,當該服務響應時間恢復正常時,系統通過提高服務級別的方式降低服務宕機的可能性。此外,系統還使用微服務網關Zuul和Nacos注冊中心實現動態路由代理,自動將流量分發至新增服務器已注冊的子系統中,改善了后期系統維護中代碼修改困難的問題。在未來的研究工作中,我們將對基于LFM算法的分布式購物系統做進一步優化。

猜你喜歡
路由代理分布式
代理圣誕老人
探究路由與環路的問題
代理手金寶 生意特別好
分布式光伏熱錢洶涌
分布式光伏:爆發還是徘徊
復仇代理烏龜君
基于DDS的分布式三維協同仿真研究
PRIME和G3-PLC路由機制對比
西門子 分布式I/O Simatic ET 200AL
WSN中基于等高度路由的源位置隱私保護
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合