誰能解釋下這個架構?
來源:Hacking Word-of-Mouth: Making Referrals Work for Airbnb
這是一篇關於airbnb經典的推薦人系統架構的文章,作為一個門外漢但又特別感興趣,想了解:
1. 實現這樣的系統,需要哪些知識?
(或理解這樣的系統架構,我需要哪些知識?)
2. 如果我有3-4個有相關經驗的工程師,需要多久完成這樣的架構?我先說個我自己的理解,因為這個推薦系統涉及到幾個方面 web,mobile app,和後台服務,也就是裡面的kafka (應該是個分散式系統吧),以及後面的hive (數據倉庫架構),presto分散式sql,cascading hadoop的組件。
那麼我想像中的結構應該是:關於mobile app和web,要知道怎麼插入相關代碼去做追蹤和個性化,然後返回。關於後台服務,實在是門外漢,不知道如果要搭建的話,我利用amazon或阿里雲上面的服務(哪一個具體的能舉例就好)能實現?
數據方面,除了開源免費的原因之外,為什麼要用hadoop,要用hive...問題太多,希望看大家的答案我再整理下我的問題。
簡單滴說就是前端app把各自產生的事件日誌通過kafka保存到hdfs,然後用hadoop分析日誌
這裡面REST endpoint是供JS、IOS、Android客戶端提交事件日誌數據的介面
Rails App可以直接連接kafka所以不需要REST endpoint
kafka是一個分散式日誌系統,用來從多種數據源收集數據、再分發到不同目的地去。
這裡的用途是從前端app收集事件日誌,再轉存到HDFS
後面一堆都是hadoop的相關應用,用來分析、計算事件日誌
使用hadoop的原因是數據/計算量太大,資料庫無法滿足需求,hadoop這樣的分散式計算平台效率更高"如果我有3-4個有相關經驗的工程師",看到這句就不想看後面的
這個架構很類似汽車之家的架構,kafka+hadoop,一個做消息,一個做海量分析;
1. 實現這樣的系統,需要哪些知識?
架構前端是:移動端IOS,Android,h5 + 主站 ruby rails;
你得懂移動開發吧:ios+安卓,UI啦,交互啦;
H5:需要html技術,js的前端或者框架知識;
主站:這個是基於ROR的,不管是php,node,java.C#主站的知識包括web開發,http協議,MVC架構,前端知識,資料庫知識,sql或者orm,系統的安全性,高效性等;
有http就要搭建http伺服器,可能要用到反向代理nginx等;
後端:掌握對分散式集群的部署及運維,分散式消息系統的搭建,Hadoop的搭建及大數據處理的知識;
這個有經驗當然要看有多專業了,一個架構師,兩個移動,一個web也可以吧;
這個如果人少的話可以藉助雲系統;
門外漢表示:
看起來就是一個把日誌發到kafka然後再進hdfs的系統,並不複雜嘛。
然後因為上面那堆東西是運行在客戶端的,沒法直接連kafka,於是又給它們另做了一組REST介面。
比較經典的日誌系統設計,不過提問的問題又引出了那個經典的段子:"淘寶的頁面看起來不複雜啊,為什麼他們要那麼多人做那麼久"
呵呵,回答問題
1:代碼埋點沒什麼好說的(單頁調用量大的話做個http2優化)
2:採集介面:不同量的實現是不一樣的(同步非同步/前端負載均衡/反向代理負載均衡/七層的反向代理(eg:nginx)直接寫kafka等等)
3:kafka進hdfs:官方推薦gobblin(需要注意數據行式還是列式存儲,何種壓縮,不要產生過多小文件等)
4:分析:看是出簡單的報告還是做BI還是做模型預測,當然除了圖中的分析工具還有很多其它的,類似tez,spark等
如果不只是出報告的話,像數據立方體,以及常見的演算法(貝葉斯,回歸,支持向量機,決策樹,神經網路,隨機森林等)還是要熟悉的
5:系統的監控,熱備等高可用(非常耗時)
綜上:如果有3-4個懂這塊工程師,做DEMO的話可能3天就ok了,如果每天百G級別數據的話怎麼也要林林總總100台伺服器,工時一個月吧(3-4比較有經驗的)
最近卡夫卡頻繁聽到 看來是真的了
核心是kafka,實際上是一個生產者-消費者模型。
左邊各個組件調用kafka Producer介面將事件流式寫入kafka;右邊調用Consumer流式將數據寫入HDFS(結構或半結構化)。
HDFS上架幾個組件做分析用。
HDFS除了免費,還是一個分散式的可靠的數據存儲平台,而Hive等是這套平台適配的分析用組件。
3-4個分散式相關碼農大概2天能搞定。剩下的調優慢慢來吧。1.需要會用Hadoop生態圈內的這些技術
2.有3-4個懂這塊的人,半天就好了。噢,可能不需要半天
就是收集日誌放隊列,然後後面消費處理分析外加提供restful介面。
推薦閱讀:
TAG:iOS | RubyonRails | Airbnb愛彼迎 | 推薦系統 | 分散式系統 |