23 內(nèi)容架構(gòu)
日志收集奶甘、內(nèi)容發(fā)布、機(jī)器學(xué)習(xí)祭椰、信息流服務(wù)臭家、監(jiān)控。
日志收集方淤,是所有排序訓(xùn)練的數(shù)據(jù)來(lái)源钉赁,要收集的最核心數(shù)據(jù)就是用用戶在信息流上產(chǎn)生的行為,用于機(jī)器學(xué)習(xí)更新排序模型携茂;
內(nèi)容發(fā)布橄霉,就是用推或者拉的模式把信息流的內(nèi)容從源頭發(fā)布到受眾端;
機(jī)器學(xué)習(xí)邑蒋,從收集的用戶行為日志中訓(xùn)練模型,然后為每一個(gè)用戶即將收到的信息流內(nèi)容提供打分服務(wù)按厘;
信息流服務(wù)医吊,為信息流的展示前端提供 Rest API;
監(jiān)控逮京,這是系統(tǒng)的運(yùn)維標(biāo)配卿堂,保證系統(tǒng)的安全和穩(wěn)定等。
24 系統(tǒng)架構(gòu)
1.離線:不用實(shí)時(shí)數(shù)據(jù),不提供實(shí)時(shí)服務(wù)草描;
2.近線:使用實(shí)時(shí)數(shù)據(jù)览绿,不保證實(shí)時(shí)服務(wù);
3.在線:使用實(shí)時(shí)數(shù)據(jù)穗慕,要保證實(shí)時(shí)服務(wù)饿敲。
24.1 在線層
?在線層常常展現(xiàn)出的形式就是 Rest API 形式,后端則通常是 RPC 服務(wù)內(nèi)部互相調(diào)用逛绵,以用戶 ID怀各、場(chǎng)景信息去請(qǐng)求,通常就在 ms 響應(yīng)時(shí)間內(nèi)返回Json 形式的推薦結(jié)果术浪。那么哪些計(jì)算邏輯適合放在在線層呢.瓢对?
1.簡(jiǎn)單的算法邏輯;2.模型的預(yù)測(cè)階段胰苏;3.商業(yè)目標(biāo)相關(guān)的過(guò)濾或者調(diào)權(quán)邏輯硕蛹;4.場(chǎng)景有關(guān)的一些邏輯;5.互動(dòng)性強(qiáng)的一些算法硕并。
比如說(shuō)當(dāng)用戶訪問(wèn)一個(gè)物品詳情頁(yè)法焰,需要做相關(guān)推薦,那么在線階段給在線服務(wù)的 Rest API 傳入用戶身份及當(dāng)前的物品 ID鲤孵,實(shí)時(shí)地取出物品 ID 對(duì)應(yīng)的相關(guān)物品ID 做一些重排和過(guò)濾壶栋,就可以輸出了,整個(gè)過(guò)程都是在 ms 級(jí)別完成普监。這個(gè)實(shí)時(shí)響應(yīng)的過(guò)程中贵试,如果發(fā)生意外,比如說(shuō)這個(gè)物品 ID 就沒(méi)有相關(guān)的物品凯正,那么這時(shí)候服務(wù)就需要降級(jí)毙玻,所謂的降級(jí)就是不能達(dá)到最好的效果了,但是不能低于最低要求廊散,這里的最低要求就是必須要返回東西桑滩,不能開(kāi)天窗。就降級(jí)為取出熱門排行榜返回允睹。雖然不是個(gè)性化的相關(guān)結(jié)果运准,但是總比開(kāi)天窗要好。同時(shí)缭受,還需要不斷的使用產(chǎn)品過(guò)程中產(chǎn)生的用戶行為胁澳,實(shí)時(shí)報(bào)送有關(guān)模塊,例如不能重復(fù)推薦米者。
24.2 離線層
批量韭畸、周期性地執(zhí)行一些計(jì)算任務(wù)宇智。其特點(diǎn)是“不用實(shí)時(shí)數(shù)據(jù),不提供實(shí)時(shí)服務(wù)”胰丁。
通過(guò) Pig 或者 Hive 等工具随橘,從全量日志中按照算法要求抽取出不同的數(shù)據(jù),再加上其他數(shù)據(jù)變成了不同算法所需的數(shù)據(jù)源锦庸。
離線階段的任務(wù)主要是兩類:模型訓(xùn)練和推薦結(jié)果計(jì)算机蔗。通常機(jī)器學(xué)習(xí)類模型,尤其是監(jiān)督學(xué)習(xí)和非監(jiān)督學(xué)習(xí)酸员,都需要大量的數(shù)據(jù)和多次迭代蜒车,這類型的模型訓(xùn)練任務(wù)最適合放在離線階段。
大多數(shù)推薦算法幔嗦,實(shí)際上都是在離線階段產(chǎn)生推薦結(jié)果的酿愧。離線階段的推薦計(jì)算和模型訓(xùn)練,如果要用分布式框架邀泉,通虫业玻可以選擇 Spark 等。
24.3 近線層
近線層的特點(diǎn)是“使用實(shí)時(shí)數(shù)據(jù)汇恤,不保證實(shí)時(shí)服務(wù)”庞钢。雖然這看上去蠻不講理,但實(shí)際上這是一個(gè)非常重要的一層因谎,它結(jié)合了離線層和在線層的好處基括,摒棄了兩者的不足。近線層财岔,也叫做準(zhǔn)實(shí)時(shí)層风皿,所謂“準(zhǔn)實(shí)時(shí)”,就是接近實(shí)時(shí)匠璧,但不是真的實(shí)時(shí)桐款。
這一層的數(shù)據(jù)來(lái)源是實(shí)時(shí)的行為事件隊(duì)列,但是計(jì)算的結(jié)果并不是沿著輸入數(shù)據(jù)的方向原路返回夷恍,而是進(jìn)入了在線數(shù)據(jù)庫(kù)中魔眨,得到用戶真正發(fā)起請(qǐng)求時(shí),再提供服務(wù)酿雪。一個(gè)典型的近線計(jì)算任務(wù)是這樣的:從事件隊(duì)列中獲取最新的一個(gè)或少許幾個(gè)用戶反饋行為遏暴,首先將這些用戶已經(jīng)反饋過(guò)的物品從離線推薦結(jié)果中剔除,進(jìn)一步指黎,用這幾個(gè)反饋行為作為樣本朋凉,以小批量梯度下降的優(yōu)化方法去更新融合模型的參數(shù)。這兩個(gè)計(jì)算任務(wù)都不會(huì)也不需要立即對(duì)用戶做出響應(yīng)袋励,也不必須在下一次用戶請(qǐng)求時(shí)就產(chǎn)生效果,就是說(shuō)當(dāng)用戶實(shí)時(shí)請(qǐng)求時(shí),不需要去等待近線任務(wù)的最新結(jié)果茬故,因?yàn)閮烧呤钱惒降母蔷摹=€計(jì)算任務(wù)一個(gè)核心的組件就是流計(jì)算,因?yàn)樗幚淼膶?shí)時(shí)數(shù)據(jù)流磺芭。常用的流計(jì)算框架有 Storm赁炎,SparkStreaming,F(xiàn)Link 等钾腺,Netflix 采用的內(nèi)部流計(jì)算框架 Manhattan徙垫,這和 Storm 類似。略有區(qū)別的是 Spark Streaming放棒,實(shí)際上并不是實(shí)時(shí)流計(jì)算姻报,而是小批量計(jì)算。
24.4 簡(jiǎn)化
完全舍棄掉近線層间螟;避免使用分布式系統(tǒng)吴旋。
在一個(gè)新產(chǎn)品的場(chǎng)景下, 當(dāng)數(shù)據(jù)量還沒(méi)有那么大時(shí)厢破,使用分布式存儲(chǔ)或者計(jì)算框架荣瑟,非常不劃算。
總結(jié)
25 數(shù)據(jù)采集
推薦算法形形色色摩泪,但是他們所需要的數(shù)據(jù)可以概括為兩個(gè)字:矩陣笆焰。
基于這個(gè)分析,可以給要收集的數(shù)據(jù)歸納成下面幾種见坑。例如物品id嚷掠,注意區(qū)分物品與物品之間的不同。
有幾種方式可以獲取數(shù)據(jù)
1.用SDK:友盟鳄梅,google analytics叠国,得到一些統(tǒng)計(jì)數(shù)據(jù),但意義不大戴尸,可以自己仿照采集一些數(shù)據(jù)粟焊。
2.可視化:用開(kāi)源的解決方案 mixpanel,指定收集
3.按自己自己方法
數(shù)據(jù)之外考慮的內(nèi)容:
1.事件的設(shè)備信息孙蒙,地理位置
2.從什么事件而來(lái)(上下文)
3.什么頁(yè)面而來(lái)
4.事件發(fā)生的用戶相關(guān)屬性项棠,物品相關(guān)屬性。
總結(jié)挎峦,基本的推薦系統(tǒng)需要數(shù)據(jù)香追,如下,不會(huì)出錯(cuò)坦胶。