推薦系統是一個微龐大的工程、算法與業務綜合的系統,其主要分爲三大子系統:redis
1)線下推薦子系統;算法
2)線上推薦子系統;數據庫
3)效果評估子系統;瀏覽器
後文將重點討論以上三大子系統的設計與實現。微信
線下推薦子系統又主要分爲線下挖掘模塊、數據管理工具兩大部分。架構
線下挖掘模塊,是各種線下挖掘算法實施的核心,它讀取各類數據源,運用各類算法實施線下數據挖掘,產出初步的挖掘結果,並將挖掘結果以必定格式保存下來。典型的,實施這些挖掘策略的是一些跑在hadoop平臺上的job,並行實施策略,並將挖掘結果保存到hadoop上。框架
數據管理工具,即DataMgrTools,它是一個工具(或者服務),它可以接受一些管理命令,讀取某些特定格式的線下數據,將這些數據實時或者週期性的打到線上的redis或者內存中,供線上服務讀取。工具
數據管理工具是一個與業務無關的通用工具,它須要支持多種特定格式數據的上傳,由於線下挖掘模塊產出的數據可能存儲在文件裏,HDFS上,數據庫裏,甚至是特定二進制數據。oop
該工具的實現要點是:定義好線下數據格式,線上數據格式,經過上下游API作數據的遷移和轉換。ui
線上推薦子系統主要分爲展現服務、分流服務、推薦內核、策略module服務等幾個部分。
展現服務,或者說是接入服務,它是整個推薦系統線上部分的入口,即整個推薦系統的接入層,它向上遊提供接口,供上游業務方調用。
展現服務是無狀態的服務(線上子系統各個服務都是無狀態的服務),能夠任意水平擴展,該服務的實現要點是:定義好通用的接口格式。
分流服務,它是推薦系統中一個很是有特點也很是重要的一個服務,它的做用是將上游過來的請求,按照不一樣的策略,以不一樣的比例,分流到不一樣的推薦算法實驗平臺(也就是下游的推薦內核)中去。
分流服務如何判斷上游過來的一個請求分配到那個推薦算法實驗平臺呢?答案是經過策略和配置。從架構圖中能夠看到,幾乎全部的服務都須要讀取數據(data)和配置(conf),這些data多是在線的動態變化的數據(例如:從redis中讀取的數據),亦多是相對靜態的數據(例如:城市列表),conf比較好理解,即一些配置(例如:全部請求80%流量必須走A算法實驗平臺)。經過這些策略和配置,配合請求帶過來的參數,分流服務計算出流量分配到哪一個實驗平臺。
該服務的實現要點是:實現通用的支持與或非關係的可配置的分流規則,與下游實驗平臺定義好通用的接口以實現將流量按需打往不一樣的實驗平臺。
推薦內核,是各種線上推薦算法實施的核心,它其實只是一個通用的實驗平臺容器,每一個推薦服務內部可能跑的是不一樣類型的推薦算法。
雖然推薦服務中跑着不一樣的推薦算法,但每一個算法的實施步驟都是相同的,都須要通過:
(1)預處理;
(2)預分析;
(3)去重過濾;
(4)排序;
(5)推薦解釋;
等五個步驟,每一個步驟均可能存在多種不一樣的算法,不一樣的模型,各個步驟中的一種算法組合起來,完成一個完整的流程,構成一個「推薦算法實驗平臺」。
對於上述每一個不一樣步驟中的不一樣模型,可能須要訪問不一樣的外部module服務,例如:
推薦解釋步驟,可能有兩個模型,第一個模型在推薦解釋階段可能須要訪問「解釋-module1-服務」,第二個模型在推薦解釋階段可能須要訪問「解釋-module2-服務」,這些不一樣模型訪問不一樣業務的需求,在架構層面都須要支持。
該服務的實現要點是:在一個推薦服務框架中跑多種策略,支持多個算法工程師在一個框架內並行開發/實驗多個推薦算法,配合分流服務實現推薦算法實驗平臺。
策略服務,又叫策略module服務,它實現了一個個推薦內核下游的推薦module。在推薦內核執行各個推薦步驟時,每一個步驟中均可能存在不一樣的算法/策略,這些算法/和策略可能須要調用一些和策略綁定比較緊密的module服務,它們並非通用服務,而是相對專有的服務。
例如:排序module服務,須要有一套方便,高效,可擴展的排序服務。
該服務的實現要點是:實現一個通用的服務框架,讓算法人員可以快速的生成module服務,並將本身的需求在module中實現,且可以在算法實驗平臺方便的進行module服務的調用。
效果評估子系統又分爲推薦服務調用端、瀏覽器上報端、實施效果分析端。
調用推薦系統接口的58同城業務線,例如招聘業務線。
瀏覽器端js,調用招聘服務時,可以在頁面展示出推薦系統中推薦出來的結果,而且可以知道哪些推薦結果被點擊了,且會將這些被展現的與被點擊的信息進行上報。
瀏覽器js將被展現的推薦結果,與被點擊的推薦結果進行上報後,有一個實時效果觀察的平臺,第一時間得知上線後推薦算法/推薦策略的效果。
綜合前面章節所述,58同城推薦系統整體架構圖如上。
推薦系統是一個工程、算法和業務的綜合性系統,上線了推薦系統,今後58同城正式進入了智能數據推薦的時代。
關於-58同城推薦業務
58同城是一個用戶與商戶共依的平臺,信息的推薦對58同城而言相當重要。以58同城的招聘業務線爲例:在招聘用戶端,爲用戶推薦更多很好的相關職位,可以加強用戶的體驗,也增長了58同城的PV;在招聘商家端,爲商戶推薦更多更好的相關簡歷,可以加強商家的體驗,促進簡歷的下載量,從而增長58同城的收入。
以上內容均來自微信公衆號「架構師之路」胡劍老師的文章,歡迎關注。