回顧經典,Netflix的推薦系統架構

2021-03-04 王喆的機器學習筆記

這裡是「王喆的機器學習筆記」的第三十一篇文章。最近因為忙著書出版和DLP-KDD Workshop的事情,沒太多時間更新專欄,等過了這段時間再跟大家多聊聊。

這篇文章我們回顧一篇經典博客,Netflix官方博客介紹的推薦系統架構,雖然文章發布已有六年, 但是現在回看起來我自己還是蠻驚訝的,因為Netflix的推薦系統架構居然到現在依然是主流。

當然,框架中的諸多技術在不斷的迭代更新,因為近期與Netflix的很多同行有過交流,也可以更新一下框架中一些模塊的最新進展。

Netflix推薦系統架構圖

Netflix的推薦系統從上至下依次分為離線(offline)、近線(nearline),在線(online)三部分。

離線(offline)

存儲離線數據,利用大數據查詢工具進行數據查詢和處理,離線模型訓練。離線部分對於數據數量和算法複雜度限制很少,以批量方式完成數據處理,但是數據處理的實時性非常差,無法做到數據和模型的即使更新。

可以看到當時還是hive,pig等工具的天下,現在spark 是主流,但也有越來越多的offline job被合併到near line之中,可以說當前的offline和nearline的界限日漸模糊了。

近線(near line)

基於數據消息隊列,利用一些流計算平臺進行數據的準實時處理。它居於離線和在線之間,既可以以分鐘級別甚至秒級的延時來準實時地處理數據,也有一定的數據批量處理能力。

nearline可以說是近幾年大數據架構發展的重中之重了。當時Netflix開發了自己的流處理框架Manhattan,但現在已經是Flink一統天下的時候,Netflix內部的Flink平臺每天會運行上千個不同的流處理任務。涵蓋了特徵實時計算、數據監控、BI、模型實時訓練等等。越來越多的offline任務被替代,也許Kappa架構徹底替代Lambda架構的日子不太遠了。

大家要注意架構圖右上角的AWS的標誌,它意味著Netflix的所有伺服器和大數據設施都是架構在amazon的雲平臺上的,而且一直沿用至今。作為AWS的第一大用戶,Netflix服務的雲化還是非常徹底的。

有的時候我也挺佩服美國這些網際網路公司的選擇,像Netflix、Pinterest這些公司,已經是不折不扣的網際網路巨頭,居然非常放心的使用AWS,AWS確實能夠提供非常專業安全的雲服務。這樣開放的精神還是讓我挺感慨的。國內的阿里雲發展當然也非常好,但是巨頭級別的公司完全依賴阿里雲的案例還是不多,從這一點上,國內和國外整個網際網路的氛圍還是有一些微妙的區別。

可以看到,從離線到在線,數據的實時性從上到下依次增強,而數據規模和處理能力從上到下依次減弱

但作為同一個系統之中的不同功能層,只有整合發揮不同層的優勢,才能夠讓系統整體發揮出最大的作用。所以我們可以在架構圖中看到很多躍層的調用。

比如從online 到nearline和offline通過用戶消息隊列(User Event Queue,現在基本都使用Kafka)來緩存數據流,這是連接online和其他層的接口。

而從nearline和offline中連接online的接口則是algorithm service,online data service,以及model到online層的接口。他們分別存儲了算法結果,數據特徵和模型文件。

在架構圖正中央的存儲部分,也有不同的資料庫作為數據中心作為不同模塊的數據交換接口。比如cassandra更適宜存儲大數據量的nosql數據,mysql當然是適合結構化的小數據量數據,而EVcache則作為內存資料庫當作數據緩存使用。當然,技術的發展使得現在已經有更合適的技術選型,AWS的dynamoDB,以及redis都可以作為更好的替代方案。

最後的總結就直接用netflix官方博客的總結吧。

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.

我們需要具備使用複雜機器學習算法的能力,這些算法要可以適應高度複雜性,可以處理大量數據。我們還要能夠提供靈活、敏捷創新的架構,新的方法可以很容易在其基礎上開發和插入。而且,我們需要我們的推薦結果足夠新,能快速響應新的數據和用戶行為。找到這些要求之間恰當的平衡並不容易,需要深思熟慮的需求分析,細心的技術選擇,戰略性的推薦算法分解,最終才能為客戶達成最佳的結果。

能讓我拍案叫絕的技術經驗不多,上面的標黑部分算是一句,寫的多好,我幾乎可以認為這是一個工程師乃至架構師的最高境界,與大家共勉。

照例跟大家討論一個問題:

Netflix的架構從大框架上看過時了嗎?業界還有其他的推薦系統工程架構方案嗎?

參考資料:

https://netflixtechblog.com/system-architectures-for-personalization-and-recommendation-e081aa94b5d8

https://www.infoq.cn/article/2013%2F04%2Fnetflix-ml-architecture

相關焦點

  • Netflix支付生態系統遷移到AWS的實踐
    摘要:本文討論Netflix從數據中心(DC)遷移複雜的支付生態系統到AWS雲服務的方法。在2016年1月,Netflix完成了它的全球化服務,同時新增加了130個國家。在這之前,Netflix的支付生態系統已經100%遷移到AWS雲服務。Netflix的支付架構從Netflix數據中心(DC)遷移到AWS雲服務只是Netflix入雲之旅中的一部分。
  • 全面解析 Netflix 的微服務架構設計
    二、架構Netflix 基於亞馬遜雲計算服務(AWS),及公司內部的內容交付網絡 Open Connect 運營。兩套系統必須無縫協作才能在全球範圍內提供高質量的視頻流服務。從軟體架構的角度來看,Netflix 包括三大部分:客戶端、後端和內容交付網絡(CDN)。
  • 推薦系統之YouTube深度學習經典論文解讀
    今天給大家帶來的是2016年YouTube發表的基於Deep learning做視頻推薦的論文,站在今天來看,這篇paper在算法架構上並沒有什麼特別的地方,但是從工程和視頻場景理解上的的確確是一篇經典之作,下面一起重溫經典。
  • SpringCloud:系統架構之垂直應用架構
    1.1、說明當訪問量逐漸增大,單一應用增加機器帶來的加速度越來越小,將傳統的單體架構應用拆分成互不相干的幾個小應用,這些小應用獨立的部署到不同的伺服器上,以提升效率。1.2、圖示1垂直應用架構是這樣設計的:將圖中的整個兒大應用:用戶功能、訂單功能以及商品功能拆分成一個一個的小應用,而且每個的小應用都是很完整的,比如說:用戶小應用從頁面Controller,到用戶Service、再到用戶Mapper,再到資料庫都是完整的一套小系統,同時訂單功能、商品功能也是一樣。
  • 軟體項目實訓及課程設計指導——系統設計中的系統架構設計示例
    軟體項目實訓及課程設計指導——軟體系統設計中的系統架構設計示例1、軟體系統概要設計中所涉及的主要設計內容和工作過程(1)在軟體應用系統項目的系統概要設計工作中,首先是要完成軟體系統的總體架構設計及系統的分層設計,然後再利用UML包視圖體現出軟體系統架構設計的最終結果
  • Netflix禮品卡是什麼?哪裡購買?怎麼使用?
    1、實體禮品卡兌換2、收據上Netflix代碼兌換3、數字禮品卡兌換總結一下,就是打開 https://www.netflix.com/redeem,在「Netflix帳戶」頁面上選擇「兌換禮品卡或促銷代碼」,然後輸入此代碼。
  • 網際網路系統架構為什麼要做前後端分離呢?
    在現在的網際網路架構中,前後端分離已經是一個非常常見的系統架構方式了,但是我們將前後端分離以後,感覺項目的架構比傳統的分層架構更複雜了,需要的人力資源也更多了,甚至項目周期也變得更長了,既然看上去好處不大,為什麼還要做前後端分離呢?
  • 2018年,netflix製作了經典而精緻的恐怖片《鬼入侵》
    2018年,netflix製作了經典而精緻的恐怖片《鬼入侵》。 這是去年最流行的款式。 開篇嚇得人們睡去,最後感動得人們流淚。這一次,netflix與印度恐怖組織聯手; 印度版的幽靈入侵鬼書★★★ 為什麼一定要看:印度版的《鬼入侵》 當 長度:5 * 45分鐘 一看印度電影,你可能會認為這是一部「搞笑」的鬼片。 前三分鐘嚇死我了 Badez莊園,1983年。烏雲密布,風雨交加,雷聲隱隱。
  • Dubbo系統架構解析
    Dubbo 作為一個優秀的 RPC 框架,一個 Apache 的頂級項目,其最大的亮點之一就是其優秀的無限開放性設計架構—「微內核+插件」的架構設計思想,使得其幾乎所有組件均可方便的進行擴展、增強、替換。採用 URL 作為配置信息的統一格式,所有擴展點都通過傳遞 URL 攜帶配置信息。
  • 獨家回顧-理賠即將使用的中科軟的新系統
    10月份我們邀請到Sabrina Chen 給我們介紹理賠即將使用的中科軟的新系統。
  • B2C電商系統產品架構:全局分析系統定義與職責
    筆者在七八年職業經歷中,主要是聚焦於電商系統上下遊進行工作,而筆者在本文中就將結合工作實踐與經驗認知,為大家分析電商系統的各種架構,並對各個系統註明主要定義和主要職責。
  • 一個經典的 100% 無伺服器架構在 AWS 上是什麼樣?
    我們早時推薦完全使用 JavaScript,但出於種種原因,你可能想要使用另一種語言,或者可能希望逐步遷移到 JavaScript 中的無伺服器架構。在無伺服器架構中,微服務的極端優勢是你可以在架構中輕鬆混合多種技術棧,同時也能夠保持微服務之間的抽象接口的簡單性和一致性。
  • 回顧美好的港片時代!Netflix 超過40 部經典香港電影推薦
    而在Netflix 上也能看到許多經典膾炙人口的香港電影,現在就一起來回顧港片美好的黃金時代吧!故事講述了顧家明(張國榮飾)是一名在樂壇上有舉足輕重地位的音樂監製,與他有情人關係並同時為他親自捧紅的女歌星玫瑰(劉嘉玲飾)的感情多年後漸漸冷淡,這時一名女扮男裝的新人林子穎(袁詠儀飾)闖入他們的生活,顧家明逐漸喜歡這位「少年」,而不知林子穎是女兒身的玫瑰也對其產生愛意……袁詠儀因本片獲得第14 屆香港電影金像獎「最佳女主角」、而由張國榮演唱的經典名曲〈追〉(本片主題曲)同時也拿下「最佳電影歌曲」!
  • 推薦系統解構
    由於移動網際網路時代用戶每時每刻都會產生海量信息,伴隨著大數據技術的快速發展,使得企業能夠迎合用戶的痛點,分析用戶喜好,進行商品推薦。推薦系統誕生的益處:從用戶角度,推薦系統可以緩解信息過載帶來的時間成本;從企業角度,可以幫助企業進行精準營銷,解決長尾營銷,最大化收益。因此推薦系統的好壞對於網際網路企業來說至關重要。
  • Mozilla分享了針對mac電腦Apple Silicon系統上Netflix和Apple的...
    Mozilla分享了針對mac電腦Apple Silicon系統上Netflix和Apple的漏洞修復程序 Mozilla分享了有關如何解決Firefox 84的mac版本上,Netflix、Hulu、Disney +和Amazon的Prime Video Prime等多個視頻流媒體平臺上存在的已知漏洞的信息
  • 騰訊T7架構師至今還在鑽研的SpringBoot從構建小系統到架構大系統
    在本文中,我們將介紹:系統介紹Spring Boot2的兩個主要技術:一方面是極速開發一個Web應用系統,詳細介紹Spring Boot框架、Spring MVC、視圖技術、資料庫訪問技術,並且介紹多環境部署、自動裝配、單元測試等高級特性;
  • Telltale:看Netflix如何簡化應用程式監控體系
    應用程式是系統的一部分,可能會受到屬性變化的微妙影響,或者因為某些區域事件而發生根本性改變。一個Canary(https://netflixtechblog.com/automated-canary-analysis-at-netflix-with-kayenta-3260bc7acc69)的啟動也會影響應用程式,上下遊的部署也是同樣的道理。
  • 軟體定義PLC改變工業網際網路系統架構
    軟體定義PLC改變工業網際網路系統架構 控制工程中文版 發表於 2021-01-07 14:08:49   隨著雲計算,機器學習和大數據等IT技術和工業控制領域OT技術的不斷融合,工業網際網路和智能製造已經成為未來工業生產的大勢所趨
  • 軟體項目實訓及課程設計指導——如何實現面向對象的系統架構設計
    軟體項目實訓及課程設計指導——如何實現面向對象的系統架構設計1、什麼是面向對象的軟體應用系統的架構設計從軟體應用系統的架構設計師的角度來看,所謂的軟體應用系統的系統架構就是一套構建軟體應用系統的整體結構的各種設計準則
  • 軟體項目實訓及課程設計指導——軟體系統設計中的系統架構設計示例
    UML包視圖體現出軟體系統架構設計的最終結果。 3、軟體系統架構設計工作中應該要考慮的一些問題——其次是合理地選擇和採用C/S還是B/S軟體體系架構 C/S(客戶/伺服器模式)和B/S(瀏覽器/伺服器描述)軟體體系架構是當今軟體系統開發模式中的技術架構的兩大主流技術。