《Realtime Data Processing at Facebook》

最近讀到了一篇關(guān)于在facebook如何構(gòu)建流式分布式處理系統(tǒng)的paper蒿辙。感覺系統(tǒng)設(shè)計(jì)折中的思路總結(jié)非常好拇泛。在數(shù)據(jù)應(yīng)用領(lǐng)域滨巴,我覺得任何已經(jīng)確認(rèn)效果的方法都會(huì)嘗試提高時(shí)效性來獲得更好的收益

一. Facebook實(shí)際使用流處理的應(yīng)用場景

  • 用戶使用產(chǎn)品行為的埋點(diǎn)數(shù)據(jù)
  • mobile app運(yùn)行埋點(diǎn)數(shù)據(jù) for developer
  • facebook頁面統(tǒng)計(jì)數(shù)據(jù)(eg. trend)
  • 總的設(shè)計(jì)目標(biāo):秒級(jí)別的延遲,每秒處理百GB級(jí)別的吞吐量

二. 設(shè)計(jì)的思考

系統(tǒng)設(shè)計(jì)對(duì)比圖

1. 支持的語言

主要思考點(diǎn):編寫應(yīng)用的難易程度俺叭,應(yīng)用實(shí)際運(yùn)行的performance
選擇:

  • Declarative: 比如:SQL恭取,這類比較容易實(shí)現(xiàn)功能,但是可控的部分比較少
  • Functional: 這類也比較容易實(shí)現(xiàn)
  • Procedural:比如:c++ java python 可控程度最高熄守,性能最好

Facebook的選擇
線上有3套流式處理架構(gòu)(Puma蜈垮,Stylus, Swift),支持Declarative和Procedural方式裕照。puma實(shí)現(xiàn)簡單攒发,適合調(diào)研需求。stylus復(fù)雜晋南,開發(fā)測試周期相對(duì)更長惠猿,適合確定的復(fù)雜的任務(wù)

2. 數(shù)據(jù)流傳輸?shù)姆绞?/h4>

這個(gè)選擇確定了后面的容錯(cuò)性,性能和可擴(kuò)展性

  • 直接傳輸:比如:RPC或者zeromq搬俊。這類的好處是ms級(jí)別的延遲紊扬,速度快
  • 使用broker中轉(zhuǎn):這類好處是網(wǎng)絡(luò)都經(jīng)過broker可控性更好
  • 使用持久化隊(duì)列:比如:scribe和kafka蜒茄。這類的優(yōu)點(diǎn)是:讀寫異步唉擂,失敗恢復(fù)快,流量的重發(fā)易于debug
    Facebook的選擇
    使用基于scribe的持久化隊(duì)列的方案檀葛,滿足秒級(jí)別延遲的業(yè)務(wù)需求玩祟。同時(shí)收獲了
  • 更好的容錯(cuò)性
    某些node失敗重新啟動(dòng)即可
  • 更好的debug
    node不符合預(yù)期,重放流量調(diào)試即可
  • 更好的監(jiān)控
    監(jiān)控隊(duì)列的長度
  • 支持不同的流式處理工具
    可以某些node使用puma而某些node使用Stylus屿聋,node組件化可以快速復(fù)用

3. node處理的語義

這部分主要是思考是否需要在特定條件下犧牲部分性能來保證100%準(zhǔn)確性
node主要做的工作

  • 處理input events:查詢外部系統(tǒng)空扎,更新內(nèi)存中數(shù)據(jù)結(jié)構(gòu)
  • 產(chǎn)出output: 處理完input數(shù)據(jù)后,產(chǎn)出output 供下游node使用
  • 存儲(chǔ)checkpoints:存儲(chǔ)內(nèi)存中數(shù)據(jù)結(jié)構(gòu)润讥,存儲(chǔ)input的offset转锈,存儲(chǔ)output值
    選擇:
  • at-least-once: 至少處理一次,先處理楚殿,后update offset撮慨,需要下游兼容重復(fù)的情況
  • at-most-once: 至多處理一次,先update offset脆粥,后處理
  • exactly-once: 需要支持事務(wù)操作砌溺,有操作代價(jià)
    Facebook的選擇
    根據(jù)業(yè)務(wù)場景一般使用at-least-once和at-most-once。3個(gè)流式架構(gòu)支持不同的級(jí)別的語義

4. 狀態(tài)存儲(chǔ)的機(jī)制

選擇:

  • 多副本冗余:使用多1倍的機(jī)器冗余每個(gè)node, 代價(jià)高
  • 本地?cái)?shù)據(jù)庫存儲(chǔ)
  • 遠(yuǎn)程分布式數(shù)據(jù)庫存儲(chǔ)
  • 上游消息隊(duì)列備份
  • 全局分布式snapshot
    Facebook的選擇
  • 支持本地?cái)?shù)據(jù)存儲(chǔ)
    優(yōu)點(diǎn):沒有網(wǎng)絡(luò)開銷变隔,更加快速规伐。支持hdfs備份數(shù)據(jù)。
本地?cái)?shù)據(jù)庫存儲(chǔ)
  • 支持遠(yuǎn)程數(shù)據(jù)庫存儲(chǔ)
    優(yōu)點(diǎn):支持append only 提高吞吐匣缘,降低延遲猖闪。merge的時(shí)機(jī)很重要鲜棠。


    遠(yuǎn)程數(shù)據(jù)庫存儲(chǔ)

5. 數(shù)據(jù)回放的支持

在某些場景,數(shù)據(jù)回放十分有用

  • 驗(yàn)證一個(gè)新的流處理application是否正確
  • 增加了新的統(tǒng)計(jì)信息的維度萧朝,需要補(bǔ)充數(shù)據(jù)
  • debug application
    選擇:
  • 只通過流式: 通過緩存消息隊(duì)列實(shí)現(xiàn)岔留,很難支持很長時(shí)間
  • 通過流式和批量處理: 支持2個(gè)存儲(chǔ)系統(tǒng),短時(shí)間的通過緩存的消息隊(duì)列检柬。長時(shí)間的通過分布式存儲(chǔ)献联,如:hive。
  • 通過支持批量處理的流式處理:比如:spark streaming
    Facebook的選擇
  • 通過scribe支持短期數(shù)據(jù)的回放
  • 通過mapreduce on hive 實(shí)現(xiàn)長期數(shù)據(jù)的處理
  • 工具支持1套代碼2處都能運(yùn)行

三. 總體系統(tǒng)架構(gòu)

流式處理系統(tǒng)架構(gòu)圖
  • Scribe
    系統(tǒng)總體輸入的源頭何址,數(shù)據(jù)流先進(jìn)入scribe隊(duì)列里逆。黃色箭頭表示數(shù)據(jù)流。node從scribe讀取數(shù)據(jù)處理完成后寫入scribe
  • Puma
    puma支持filter 和 aggregation用爪。使用DSL編寫原押。針對(duì)于長久運(yùn)行,固定需求的查詢優(yōu)化(比如:最熱門的話題top10)偎血。filter的使用:如只關(guān)注處理#超級(jí)碗相關(guān)話題的post
  • Stylus
    更底層的支持DAGnode結(jié)構(gòu)的流處理框架
  • Laser
    基于RocksDB的kv系統(tǒng)诸衔。適用于寫少讀多的場景。用于共享流處理產(chǎn)出的數(shù)據(jù)
  • Scuba
    提供類似數(shù)據(jù)庫查詢的實(shí)時(shí)查詢
  • Hive
    存儲(chǔ)全量數(shù)據(jù)颇玷,按天分表笨农。基于Presto支持sql查詢
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末帖渠,一起剝皮案震驚了整個(gè)濱河市谒亦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌空郊,老刑警劉巖份招,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異狞甚,居然都是意外死亡锁摔,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門哼审,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谐腰,“玉大人,你說我怎么就攤上這事棺蛛≌觯” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵旁赊,是天一觀的道長桦踊。 經(jīng)常有香客問我,道長终畅,這世上最難降的妖魔是什么籍胯? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任竟闪,我火速辦了婚禮,結(jié)果婚禮上杖狼,老公的妹妹穿的比我還像新娘炼蛤。我一直安慰自己,他們只是感情好蝶涩,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布理朋。 她就那樣靜靜地躺著,像睡著了一般绿聘。 火紅的嫁衣襯著肌膚如雪嗽上。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天熄攘,我揣著相機(jī)與錄音兽愤,去河邊找鬼。 笑死挪圾,一個(gè)胖子當(dāng)著我的面吹牛浅萧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播哲思,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼洼畅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了也殖?” 一聲冷哼從身側(cè)響起土思,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤务热,失蹤者是張志新(化名)和其女友劉穎忆嗜,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體崎岂,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡捆毫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了冲甘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绩卤。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖江醇,靈堂內(nèi)的尸體忽然破棺而出濒憋,到底是詐尸還是另有隱情,我是刑警寧澤陶夜,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布凛驮,位于F島的核電站,受9級(jí)特大地震影響条辟,放射性物質(zhì)發(fā)生泄漏黔夭。R本人自食惡果不足惜宏胯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望本姥。 院中可真熱鬧肩袍,春花似錦、人聲如沸婚惫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽先舷。三九已至鹰祸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間密浑,已是汗流浹背蛙婴。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留尔破,地道東北人街图。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像懒构,于是被迫代替她去往敵國和親餐济。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容