文章網址:58同城推荐系统架构设计与实现
58同城的推薦系統主要分為三樣子系統,(1)線下推薦(2)線上推薦(3)效果評估。
線下推薦: 主要是由線下挖掘模組和數據管理模組構成。 線下挖掘模組主要資料來源是由資料庫的數據內容構成,來源像是使用者資料,留言,商家資料等等,透過hadoop, mapreduce做ETL,並將結果存入HDFS。 而數據管理模組則是將線下挖掘模組所產生的結果,上傳到online的DB,如Redis,供下一步資料分析使用。執行時間採用如 週期或即時執行上傳方式。 其主要特點是線下及線上採用統一格式,如JSON,透過統一API,如Restful方式,達到數據轉換遷移。 線上推薦: 主要由展示、分流、推薦核心、策略模組服務構成。 展示服務: 或稱為接入服務,針對上游(來源)服務提供統一的端口,來提供服務,其關鍵為建立好通用格式,並可任意的水平擴展。 分流服務: 將展示服務的數據分流,透過conf和data,將推薦需求轉移到相對應的推薦核心上,其中data來自於線下推薦系統中儲存到Redis DB的結果,或static data(如城市列表),conf則是指定該請求該留到什麼演算法平台。 推薦核心及策略模組: 推薦系統最重要的部分,其中包含了多種演算法,但每個演算法都包含了幾樣固定程序。 (1)預處理; (2)預分析; (3)去除重複資料; (4)排序; (5)推薦解釋; 每個步驟可能有不同的演算法和模型,並將其模組化,以達到降低所寫的程式碼量特性,上述五樣步驟可以透過Template Method Pattern達成。 以上描述的主要特點為,在同一個推薦架構框架下,讓多個演算法工程師能開發不同的演算法,達到業務需求。 效果評估子系統: 可分為服務調用端,瀏覽器上報端,實施效果分析端: 服務調用端: 也就是業務呼叫推薦系統的端口。 瀏覽器上報端: 透過Browser的JavaScript,將推薦系統所推薦的物件回報給Server,記錄哪些被推薦的物件被點擊。 實施效果分析端: 經過瀏覽器上報的結果,能以視覺化方式觀看哪些推薦演算法或系統被點擊。以增加客戶的購買率及推薦的精準度。 (我會將哪些推薦方法的推薦成功率記錄下來,再下次要推薦給使用者時提高該演算法的被使用率,以提高推薦的精準度。) 所有的推薦系統目的,主要是為了達到業務需求,藉此來提高公司的營業收入,因此推薦系統的好壞有一定程度影響該公司業績,因此推薦系統的推薦成功率應該被記錄下來,觀看其成效如何。