回顾经典,Netflix的推荐系统架构
這篇文章我們回顧一篇經(jīng)典博客,Netflix官方博客介紹的推薦系統(tǒng)架構(gòu),雖然文章發(fā)布已有六年, 但是現(xiàn)在回看起來我自己還是蠻驚訝的,因?yàn)镹etflix的推薦系統(tǒng)架構(gòu)居然到現(xiàn)在依然是主流。
當(dāng)然,框架中的諸多技術(shù)在不斷的迭代更新,因?yàn)榻谂cNetflix的很多同行有過交流,也可以更新一下框架中一些模塊的最新進(jìn)展。
Netflix推薦系統(tǒng)架構(gòu)圖
Netflix推薦系統(tǒng)架構(gòu)圖Netflix的推薦系統(tǒng)從上至下依次分為離線(offline)、近線(nearline),在線(online)三部分。
離線(offline)
存儲(chǔ)離線數(shù)據(jù),利用大數(shù)據(jù)查詢工具進(jìn)行數(shù)據(jù)查詢和處理,離線模型訓(xùn)練。離線部分對(duì)于數(shù)據(jù)數(shù)量和算法復(fù)雜度限制很少,以批量方式完成數(shù)據(jù)處理,但是數(shù)據(jù)處理的實(shí)時(shí)性非常差,無法做到數(shù)據(jù)和模型的即使更新。可以看到當(dāng)時(shí)還是hive,pig等工具的天下,現(xiàn)在spark 是主流,但也有越來越多的offline job被合并到near line之中,可以說當(dāng)前的offline和nearline的界限日漸模糊了。
近線(near line)
基于數(shù)據(jù)消息隊(duì)列,利用一些流計(jì)算平臺(tái)進(jìn)行數(shù)據(jù)的準(zhǔn)實(shí)時(shí)處理。它居于離線和在線之間,既可以以分鐘級(jí)別甚至秒級(jí)的延時(shí)來準(zhǔn)實(shí)時(shí)地處理數(shù)據(jù),也有一定的數(shù)據(jù)批量處理能力。
nearline可以說是近幾年大數(shù)據(jù)架構(gòu)發(fā)展的重中之重了。當(dāng)時(shí)Netflix開發(fā)了自己的流處理框架Manhattan,但現(xiàn)在已經(jīng)是Flink一統(tǒng)天下的時(shí)候,Netflix內(nèi)部的Flink平臺(tái)每天會(huì)運(yùn)行上千個(gè)不同的流處理任務(wù)。涵蓋了特征實(shí)時(shí)計(jì)算、數(shù)據(jù)監(jiān)控、BI、模型實(shí)時(shí)訓(xùn)練等等。越來越多的offline任務(wù)被替代,也許Kappa架構(gòu)徹底替代Lambda架構(gòu)的日子不太遠(yuǎn)了。
在線(online)
online部分的主要任務(wù)是進(jìn)行用戶請(qǐng)求的實(shí)時(shí)處理,模型的在線服務(wù)。在線部分需要更快地響應(yīng)最近的事件和用戶交互,因此對(duì)于延遲的要求比較苛刻,一般都要求在100ms以內(nèi)完成所有處理,這會(huì)限制所用算法的復(fù)雜性和可處理的數(shù)據(jù)量。
正是online部分極高的響應(yīng)延遲要求和相比離線、近線較弱的數(shù)據(jù)處理能力,要求online部分采用不同的高效的model serving方法去支持個(gè)性化推薦服務(wù)。這也是前段時(shí)間我們專欄花了幾篇文章介紹model serving的原因。
從阿里的User Interest Center看模型線上實(shí)時(shí)serving方法
如何解決推薦系統(tǒng)工程難題——深度學(xué)習(xí)推薦模型線上serving?
AWS
大家要注意架構(gòu)圖右上角的AWS的標(biāo)志,它意味著Netflix的所有服務(wù)器和大數(shù)據(jù)設(shè)施都是架構(gòu)在amazon的云平臺(tái)上的,而且一直沿用至今。作為AWS的第一大用戶,Netflix服務(wù)的云化還是非常徹底的。
有的時(shí)候我也挺佩服美國(guó)這些互聯(lián)網(wǎng)公司的選擇,像Netflix、Pinterest這些公司,已經(jīng)是不折不扣的互聯(lián)網(wǎng)巨頭,居然非常放心的使用AWS,AWS確實(shí)能夠提供非常專業(yè)安全的云服務(wù)。這樣開放的精神還是讓我挺感慨的。國(guó)內(nèi)的阿里云發(fā)展當(dāng)然也非常好,但是巨頭級(jí)別的公司完全依賴阿里云的案例還是不多,從這一點(diǎn)上,國(guó)內(nèi)和國(guó)外整個(gè)互聯(lián)網(wǎng)的氛圍還是有一些微妙的區(qū)別。
不同層之間的配合與系統(tǒng)整體性
可以看到,從離線到在線,數(shù)據(jù)的實(shí)時(shí)性從上到下依次增強(qiáng),而數(shù)據(jù)規(guī)模和處理能力從上到下依次減弱。
但作為同一個(gè)系統(tǒng)之中的不同功能層,只有整合發(fā)揮不同層的優(yōu)勢(shì),才能夠讓系統(tǒng)整體發(fā)揮出最大的作用。所以我們可以在架構(gòu)圖中看到很多躍層的調(diào)用。
比如從online 到nearline和offline通過用戶消息隊(duì)列(User Event Queue,現(xiàn)在基本都使用Kafka)來緩存數(shù)據(jù)流,這是連接online和其他層的接口。
而從nearline和offline中連接online的接口則是algorithm service,online data service,以及model到online層的接口。他們分別存儲(chǔ)了算法結(jié)果,數(shù)據(jù)特征和模型文件。
在架構(gòu)圖正中央的存儲(chǔ)部分,也有不同的數(shù)據(jù)庫(kù)作為數(shù)據(jù)中心作為不同模塊的數(shù)據(jù)交換接口。比如cassandra更適宜存儲(chǔ)大數(shù)據(jù)量的nosql數(shù)據(jù),mysql當(dāng)然是適合結(jié)構(gòu)化的小數(shù)據(jù)量數(shù)據(jù),而EVcache則作為內(nèi)存數(shù)據(jù)庫(kù)當(dāng)作數(shù)據(jù)緩存使用。當(dāng)然,技術(shù)的發(fā)展使得現(xiàn)在已經(jīng)有更合適的技術(shù)選型,AWS的dynamoDB,以及redis都可以作為更好的替代方案。
總結(jié)
最后的總結(jié)就直接用netflix官方博客的總結(jié)吧。
We want the ability to use sophisticated machine learning algorithms that can grow to arbitrary complexity and can deal with huge amounts of data. We also want an architecture that allows for flexible and agile innovation where new approaches can be developed and plugged-in easily. Plus, we want our recommendation results to be fresh and respond quickly to new data and user actions. Finding the sweet spot between these desires is not trivial: it requires a thoughtful analysis of requirements, careful selection of technologies, and a strategic decomposition of recommendation algorithms to achieve the best outcomes for our members.
我們需要具備使用復(fù)雜機(jī)器學(xué)習(xí)算法的能力,這些算法要可以適應(yīng)高度復(fù)雜性,可以處理大量數(shù)據(jù)。我們還要能夠提供靈活、敏捷創(chuàng)新的架構(gòu),新的方法可以很容易在其基礎(chǔ)上開發(fā)和插入。而且,我們需要我們的推薦結(jié)果足夠新,能快速響應(yīng)新的數(shù)據(jù)和用戶行為。找到這些要求之間恰當(dāng)?shù)钠胶獠⒉蝗菀?#xff0c;需要深思熟慮的需求分析,細(xì)心的技術(shù)選擇,戰(zhàn)略性的推薦算法分解,最終才能為客戶達(dá)成最佳的結(jié)果。
能讓我拍案叫絕的技術(shù)經(jīng)驗(yàn)不多,上面的標(biāo)黑部分算是一句,寫的多好,我?guī)缀蹩梢哉J(rèn)為這是一個(gè)工程師乃至架構(gòu)師的最高境界,與大家共勉。
照例跟大家討論一個(gè)問題:
Netflix的架構(gòu)從大框架上看過時(shí)了嗎?業(yè)界還有其他的推薦系統(tǒng)工程架構(gòu)方案嗎?
參考資料:
1.https://netflixtechblog.com/system-architectures-for-personalization-and-recommendation-e081aa94b5d8
2.https://www.infoq.cn/article/2013%2F04%2Fnetflix-ml-architecture
本文原創(chuàng)于公眾號(hào)「王喆的機(jī)器學(xué)習(xí)筆記」,是資深算法工程師,《深度學(xué)習(xí)推薦系統(tǒng)》《百面機(jī)器學(xué)習(xí)》作者王喆的個(gè)人公眾號(hào),關(guān)注推薦系統(tǒng)、計(jì)算廣告、個(gè)性化搜索的業(yè)界前沿進(jìn)展。
掃碼關(guān)注我們
認(rèn)為文章有價(jià)值的同學(xué),歡迎關(guān)注「王喆的機(jī)器學(xué)習(xí)筆記」(wangzhenotes),跟蹤計(jì)算廣告、推薦系統(tǒng)、個(gè)性化搜索等機(jī)器學(xué)習(xí)領(lǐng)域前沿。
「王喆的機(jī)器學(xué)習(xí)筆記」近期優(yōu)質(zhì)內(nèi)容
見微知著,你真的搞懂Google的Wide&Deep模型了嗎?
回顧經(jīng)典,Netflix的推薦系統(tǒng)架構(gòu)
關(guān)于深度學(xué)習(xí)推薦系統(tǒng)領(lǐng)域的15個(gè)問題
從阿里的User Interest Center看模型線上實(shí)時(shí)serving方法
為什么有些深度學(xué)習(xí)網(wǎng)絡(luò)要加入Product層?
YouTube深度學(xué)習(xí)推薦模型最全總結(jié)
夕小瑤的賣萌屋
_
關(guān)注&星標(biāo)小夕,帶你解鎖AI秘籍
訂閱號(hào)主頁(yè)下方「撩一下」有驚喜哦
總結(jié)
以上是生活随笔為你收集整理的回顾经典,Netflix的推荐系统架构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有钱可以多任性?OpenAI提出人肉模型
- 下一篇: 从 0 搭建一个工业级推荐系统